@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,4 +1,4 @@
|
|
|
1
|
-
var lc=Object.defineProperty,cc=(t,e,n)=>e in t?lc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,gt=(t,e,n)=>(cc(t,"symbol"!=typeof e?e+"":e,n),n);function uc(){return new Promise(((t,e)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?e("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):t()}))}class nr{}function ac(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}nr.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},nr.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"};const ir=new WeakMap,gi=new WeakMap,zr=new WeakMap,Zo=Symbol("anyProducer"),hs=Promise.resolve(),Wi=Symbol("listenerAdded"),Vi=Symbol("listenerRemoved");let co=!1;function Sr(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function oi(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Yr(t,e){const n=gi.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function Or(t,e){const n="string"==typeof e||"symbol"==typeof e?e:Zo,r=zr.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function dc(t,e,n){const r=zr.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Zo)){const t=Promise.all([e,n]);for(const e of r.get(Zo))e.enqueue(t)}}function fs(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)Or(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)Or(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ms(t){if(void 0===t)return ps;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!ps.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const uo=t=>t===Wi||t===Vi;class Wr{static mixin(t,e){return e=ms(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Wr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return co;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||co}static set isDebugEnabled(t){co=t}constructor(t={}){ir.set(this,new Set),gi.set(this,new Map),zr.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Wr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){oi(e),t=Array.isArray(t)?t:[t];for(const n of t)Sr(n),Yr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),uo(n)||this.emit(Wi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){oi(e),t=Array.isArray(t)?t:[t];for(const n of t)Sr(n),Yr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),uo(n)||this.emit(Vi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Sr(e);return fs(this,t)}async emit(t,e){Sr(t),this.logIfDebugEnabled("emit",t,e),dc(this,t,e);const n=Yr(this,t),r=ir.get(this),i=[...n],o=uo(t)?[]:[...r];await hs,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Sr(t),this.logIfDebugEnabled("emitSerial",t,e);const n=Yr(this,t),r=ir.get(this),i=[...n],o=[...r];await hs;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return oi(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ir.get(this).add(t),this.emit(Wi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return fs(this)}offAny(t){oi(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Vi,{listener:t}),ir.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){Yr(this,e).clear();const t=Or(this,e);for(const e of t)e.finish();t.clear()}else{ir.get(this).clear();for(const t of gi.get(this).values())t.clear();for(const t of zr.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Sr(n),e+=ir.get(this).size;for(const t of gi.get(this).values())e+=t.size;for(const t of zr.get(this).values())e+=t.size}else e+=ir.get(this).size+Yr(this,n).size+Or(this,n).size+Or(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=ms(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const ps=Object.getOwnPropertyNames(Wr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Wr,"listenerAdded",{value:Wi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Wr,"listenerRemoved",{value:Vi,writable:!1,enumerable:!0,configurable:!1});var hc=Wr;const To=ac(hc);function fc(t){return"object"==typeof t&&null!==t&&"message"in t&&"string"==typeof t.message}function mc(t){if(fc(t))return t;try{return new Error(JSON.stringify(t))}catch{return new Error(String(t))}}function ao(t){return mc(t).message}var pc=Object.defineProperty,bc=(t,e,n)=>e in t?pc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,yc=(t,e,n)=>(bc(t,"symbol"!=typeof e?e+"":e,n),n);const gc="hlg.tokbox.com/prod/logging/vcp_webrtc",Zc="https://",vc=1e4;let si;const Gc=new Uint8Array(16);function Xc(){if(!si&&(si=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!si))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return si(Gc)}const Un=[];for(let t=0;t<256;++t)Un.push((t+256).toString(16).slice(1));function Wc(t,e=0){return(Un[t[e+0]]+Un[t[e+1]]+Un[t[e+2]]+Un[t[e+3]]+"-"+Un[t[e+4]]+Un[t[e+5]]+"-"+Un[t[e+6]]+Un[t[e+7]]+"-"+Un[t[e+8]]+Un[t[e+9]]+"-"+Un[t[e+10]]+Un[t[e+11]]+Un[t[e+12]]+Un[t[e+13]]+Un[t[e+14]]+Un[t[e+15]]).toLowerCase()}const Vc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),bs={randomUUID:Vc};function Rc(t,e,n){if(bs.randomUUID&&!e&&!t)return bs.randomUUID();const r=(t=t||{}).random||(t.rng||Xc)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return Wc(r)}function Fo(t,e){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let n=globalThis.vonage.workerizer;return n[t]||(n[t]=e),n[t]}const cr=Fo("globals",{});var vr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(vr||{});function js(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let xc=0;function Ic(t,e,n,r,i){const o=xc++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>js(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function ti(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>js(t))))}const ys=Fo("workerized",{});function zs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Sc(){if(zs())ti({type:vr.GLOBALS_SYNC},cr);else{const t=[];for(const e in ys){const{worker:n,resolvers:r}=ys[e].workerContext;n&&t.push(Ic(n,vr.GLOBALS_SYNC,"",[cr],r))}await Promise.all(t)}}function Ri(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Ri(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Ri(t[n],e[n])):e[n]=t[n]}async function Yc(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;ti(t,await e.instance[n](...null!=r?r:[]))}const wc=Fo("registeredWorkers",{});function Tc(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=wc[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Ri(r,cr),ti(t,void 0!==typeof e.instance)}async function Fc(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),ti(t,r)}function Cc(t){if(!t.args)throw"Missing globals while syncing";Ri(t.args[0],cr),ti(t,{})}function Lc(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case vr.INIT:Tc(n,t);break;case vr.FORWARD:Yc(n,t);break;case vr.TERMINATE:Fc(n,t);break;case vr.GLOBALS_SYNC:Cc(n)}}}function Hc(t,e){return cr[t]||(cr[t]=e),[()=>cr[t],async e=>{cr[t]=e,await Sc()}]}function Nc(t,e){return Hc(t,e)}zs()&&Lc();const[Jc,kc]=Nc("metadata");function Ec(t){kc(t)}function Zi(){return Jc()}class Co{constructor(t,e){yc(this,"uuid"),this.config=t,this.uuid=null!=e?e:Rc()}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=Zi())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),vc);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=Zi().proxyUrl)?t:Zc;return e+=("/"===e.at(-1)?"":"/")+gc,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=Zi();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const vi="2.0.4";class Uc{constructor(t,e){this.config=t,this.frameTransformedCount=0,this.frameFromSourceCount=0,this.startAt=0,this.reporter=new Co(t,e)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:t,frameFromSourceCount:e}=this;return e/((Date.now()-t)/1e3)}async onFrameTransformed(t={},e=!1){0===this.startAt&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:n,frameTransformedCount:r,frameFromSourceCount:i}=this,o=Date.now(),a=(o-n)/1e3,l=r/a,s=i/a;return e||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=o,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:s,transformedFps:l,framesTransformed:r,...t})):"success"}}var Bc=(t=>(t.FPS_DROP="fps_drop",t))(Bc||{}),Kc=(t=>(t.start="start",t.transform="transform",t.flush="flush",t))(Kc||{}),vo=(t=>(t.pipeline_ended="pipeline_ended",t.pipeline_ended_with_error="pipeline_ended_with_error",t.pipeline_started="pipeline_started",t.pipeline_started_with_error="pipeline_started_with_error",t.pipeline_restarted="pipeline_restarted",t.pipeline_restarted_with_error="pipeline_restarted_with_error",t))(vo||{});const Mc=500,Ac=.8;class jc extends To{constructor(t,e){super(),this.reporter_=new Co,this.reporterQos_=new Uc({loggingIntervalFrameCount:Mc,report:{version:vi}}),this.index_=e,this.transformer_=t,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in t&&(this.transformerType_=t.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t}async start(t){if(this.controller_=t,this.transformer_&&"function"==typeof this.transformer_.start)try{await this.transformer_.start(t)}catch(t){this.report({message:nr.errors.transformer_start,variation:"Error",error:ao(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"start"};this.emit("error",e)}}async transform(t,e){var n,r,i,o;if(0===this.mediaTransformerQosReportStartTimestamp_&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),t instanceof VideoFrame&&(this.videoHeight_=null!=(n=null==t?void 0:t.displayHeight)?n:0,this.videoWidth_=null!=(r=null==t?void 0:t.displayWidth)?r:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),t.close(),this.flush(e),e.terminate();else{try{await(null==(o=(i=this.transformer_).transform)?void 0:o.call(i,t,e)),this.reportQos()}catch(t){this.report({message:nr.errors.transformer_transform,variation:"Error",error:ao(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"transform"};this.emit("error",e)}if(-1!=this.trackExpectedRate_&&this.trackExpectedRate_*Ac>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(t){if(this.transformer_&&"function"==typeof this.transformer_.flush&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(t)}catch(t){this.report({message:nr.errors.transformer_flush,variation:"Error",error:ao(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"flush"};this.emit("error",e)}}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(t){this.reporter_.send({version:vi,action:"MediaTransformer",transformerType:this.transformerType_,...t})}reportQos(t=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:vi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},t)}}class zc extends To{constructor(t){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let e=0;e<t.length;e++){let n=new jc(t[e],e);n.on("error",(t=>{this.emit("error",t)})),n.on("warn",(t=>{this.emit("warn",t)})),this.transformers_.push(n)}}setTrackExpectedRate(t){this.trackExpectedRate_=t;for(let t of this.transformers_)t.setTrackExpectedRate(this.trackExpectedRate_)}async start(t,e){if(this.transformers_&&0!==this.transformers_.length){try{let n=t;for(let e of this.transformers_)t=t.pipeThrough(new TransformStream(e));t.pipeTo(e).then((async()=>{console.log("[Pipeline] Setup."),await e.abort(),await n.cancel(),this.emit("pipelineInfo","pipeline_ended")})).catch((async r=>{t.cancel().then((()=>{console.log("[Pipeline] Shutting down streams after abort.")})).catch((t=>{console.error("[Pipeline] Error from stream transform:",t)})),await e.abort(r),await n.cancel(r),this.emit("pipelineInfo","pipeline_ended_with_error")}))}catch{return this.emit("pipelineInfo","pipeline_started_with_error"),void this.destroy()}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}else console.log("[Pipeline] No transformers.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let t of this.transformers_)t.stop()}}class Oc extends To{constructor(){super(),this.reporter_=new Co,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(t,e){return this.readable_=t,this.writable_=e,this.transformInternal()}transformInternal(){return new Promise((async(t,e)=>{if(!this.transformers_||0===this.transformers_.length)return this.report({message:nr.errors.transformer_none,variation:"Error"}),void e("[MediaProcessor] Need to set transformers.");if(!this.readable_)return this.report({variation:"Error",message:nr.errors.readable_null}),void e("[MediaProcessor] Readable is null.");if(!this.writable_)return this.report({variation:"Error",message:nr.errors.writable_null}),void e("[MediaProcessor] Writable is null.");let n=!1;this.pipeline_&&(n=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new zc(this.transformers_),this.pipeline_.on("warn",(t=>{this.emit("warn",t)})),this.pipeline_.on("error",(t=>{this.emit("error",t)})),this.pipeline_.on("pipelineInfo",(t=>{n&&("pipeline_started"===t?t=vo.pipeline_restarted:"pipeline_started_with_error"===t&&(t=vo.pipeline_restarted_with_error)),this.emit("pipelineInfo",t)})),-1!=this.trackExpectedRate_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then((()=>{t()})).catch((t=>{e(t)}))}))}setTransformers(t){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=t,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise((async t=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),t()}))}report(t){this.reporter_.send({version:vi,action:"MediaProcessor",...t})}}class Pc{constructor(){this.processor_=null,this.generator_=null}init(t){return new Promise(((e,n)=>{try{this.processor_=new MediaStreamTrackProcessor(t)}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${t}`),n(t)}try{"audio"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):"video"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):n("kind not supported")}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${t}`),n(t)}e()}))}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class _c{constructor(t){this.insertableStreamHelper_=new Pc,this.mediaProcessor_=t}setTrack(t){return new Promise(((e,n)=>{this.insertableStreamHelper_.init(t).then((()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then((()=>{e(this.insertableStreamHelper_.getProccesorTrack())})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}destroy(){return new Promise(((t,e)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then((()=>{t()})).catch((t=>{e(t)})):e("no processor")}))}}var Gi=(t=>(t.Low="Low",t.High="High",t))(Gi||{}),Qc=(t=>(t.BackgroundBlur="BackgroundBlur",t.VirtualBackground="VirtualBackground",t.VideoBackground="VideoBackground",t.SilhouetteBlur="SilhouetteBlur",t))(Qc||{}),Go=(t=>(t.FAST="FAST",t.PRECISE="PRECISE",t))(Go||{}),xi=(t=>(t.CANVAS="CANVAS",t.WEBGL="WEBGL",t))(xi||{});const Dc=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 $c=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(e){var n,r,i=typeof(e=e||{})<"u"?e:{};i.ready=new Promise((function(t,e){n=t,r=e}));var o,a={};for(o in i)i.hasOwnProperty(o)&&(a[o]=i[o]);var l,s="./this.program",c=function(t,e){throw e},u=!0,d="";typeof document<"u"&&document.currentScript&&(d=document.currentScript.src),t&&(d=t),d=0!==d.indexOf("blob:")?d.substr(0,d.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var h,m=i.print||console.log.bind(console),p=i.printErr||console.warn.bind(console);for(o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);a=null,i.arguments&&i.arguments,i.thisProgram&&(s=i.thisProgram),i.quit&&(c=i.quit),i.wasmBinary&&(h=i.wasmBinary);var b=i.noExitRuntime||!0;"object"!=typeof WebAssembly&&L("no native wasm support detected");var f,g,y,Z,v,G=!1,X=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function W(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.subarray&&X)return X.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var l=63&t[e++];if(192!=(224&a)){var s=63&t[e++];if((a=224==(240&a)?(15&a)<<12|l<<6|s:(7&a)<<18|l<<12|s<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|l)}else o+=String.fromCharCode(a)}return o}function V(t,e){return t?W(Z,t,e):""}function R(t,e){return t%e>0&&(t+=e-t%e),t}function x(t){g=t,i.HEAP8=y=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=v=new Int32Array(t),i.HEAPU8=Z=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}i.INITIAL_MEMORY;var I,w=[],Y=[],S=[],F=0;var C=0,H=null;function L(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),G=!0,t+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}i.preloadedImages={},i.preloadedAudios={};var T,k,J,N="data:application/octet-stream;base64,";function K(t){return t.startsWith(N)}function U(t){try{if(t==T&&h)return new Uint8Array(h);if(!l)throw"both async and sync fetching of the wasm failed"}catch(t){L(t)}}function B(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var n=e.func;"number"==typeof n?void 0===e.arg?I.get(n)():I.get(n)(e.arg):n(void 0===e.arg?null:e.arg)}else e(i)}}K(T="tflite-simd.wasm")||(k=T,T=i.locateFile?i.locateFile(k,d):d+k),J=function(){return performance.now()};function j(t){try{return f.grow(t-g.byteLength+65535>>>16),x(f.buffer),1}catch{}}var z={};function M(){if(!M.strings){var t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var e in z)void 0===z[e]?delete t[e]:t[e]=z[e];var n=[];for(var e in t)n.push(e+"="+t[e]);M.strings=n}return M.strings}var E={mappings:{},buffers:[null,[],[]],printChar:function(t,e){var n=E.buffers[t];0===e||10===e?((1===t?m:p)(W(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){return E.varargs+=4,v[E.varargs-4>>2]},getStr:function(t){return V(t)},get64:function(t,e){return t}};var A={a:function(t,e,n,r){L("Assertion failed: "+V(t)+", at: "+[e?V(e):"unknown filename",n,r?V(r):"unknown function"])},e:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},d:function(t,e){L("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},b:function(){L("")},n:function(t,e){var n;if(0===t)n=Date.now();else{if(1!==t&&4!==t)return function(t){v[P()>>2]=t}(28),-1;n=J()}return v[e>>2]=n/1e3|0,v[e+4>>2]=n%1e3*1e3*1e3|0,0},h:function(){return 2147483648},l:function(t,e,n){Z.copyWithin(t,e,e+n)},m:function(t){var e=Z.length,n=2147483648;if((t>>>=0)>n)return!1;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),j(Math.min(n,R(Math.max(t,i),65536))))return!0}return!1},p:function(t){for(var e=J();J()-e<t;);},f:function(t,e){var n=0;return M().forEach((function(r,i){var o=e+n;v[t+4*i>>2]=o,function(t,e,n){for(var r=0;r<t.length;++r)y[e++>>0]=t.charCodeAt(r);n||(y[e>>0]=0)}(r,o),n+=r.length+1})),0},g:function(t,e){var n=M();v[t>>2]=n.length;var r=0;return n.forEach((function(t){r+=t.length+1})),v[e>>2]=r,0},j:function(t){!function(t,e){!function(t){b||F>0||(i.onExit&&i.onExit(t),G=!0),c(t,new Q(t))}(t)}(t)},i:function(t){return 0},k:function(t,e,n,r,i){},c:function(t,e,n,r){for(var i=0,o=0;o<n;o++){for(var a=v[e+8*o>>2],l=v[e+(8*o+4)>>2],s=0;s<l;s++)E.printChar(t,Z[a+s]);i+=l}return v[r>>2]=i,0},o:function t(e,n){t.randomDevice||(t.randomDevice=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}return function(){L("randomDevice")}}());for(var r=0;r<n;r++)y[e+r>>0]=t.randomDevice();return 0}};(function(){var t={a:A};function e(t,e){var n=t.exports;i.asm=n,x((f=i.asm.q).buffer),I=i.asm.E,function(t){Y.unshift(t)}(i.asm.r),function(t){if(C--,i.monitorRunDependencies&&i.monitorRunDependencies(C),0==C&&H){var e=H;H=null,e()}}()}function n(t){e(t.instance)}function o(e){return(!h&&u&&"function"==typeof fetch?fetch(T,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+T+"'";return t.arrayBuffer()})).catch((function(){return U(T)})):Promise.resolve().then((function(){return U(T)}))).then((function(e){return WebAssembly.instantiate(e,t)})).then((function(t){return t})).then(e,(function(t){p("failed to asynchronously prepare wasm: "+t),L(t)}))}if(C++,i.monitorRunDependencies&&i.monitorRunDependencies(C),i.instantiateWasm)try{return i.instantiateWasm(t,e)}catch(t){return p("Module.instantiateWasm callback failed with error: "+t),!1}(h||"function"!=typeof WebAssembly.instantiateStreaming||K(T)||"function"!=typeof fetch?o(n):fetch(T,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(n,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),o(n)}))}))).catch(r)})(),i.___wasm_call_ctors=function(){return(i.___wasm_call_ctors=i.asm.r).apply(null,arguments)},i._getModelBufferMemoryOffset=function(){return(i._getModelBufferMemoryOffset=i.asm.s).apply(null,arguments)},i._getInputMemoryOffset=function(){return(i._getInputMemoryOffset=i.asm.t).apply(null,arguments)},i._getInputHeight=function(){return(i._getInputHeight=i.asm.u).apply(null,arguments)},i._getInputWidth=function(){return(i._getInputWidth=i.asm.v).apply(null,arguments)},i._getInputChannelCount=function(){return(i._getInputChannelCount=i.asm.w).apply(null,arguments)},i._getOutputMemoryOffset=function(){return(i._getOutputMemoryOffset=i.asm.x).apply(null,arguments)},i._getOutputHeight=function(){return(i._getOutputHeight=i.asm.y).apply(null,arguments)},i._getOutputWidth=function(){return(i._getOutputWidth=i.asm.z).apply(null,arguments)},i._getOutputChannelCount=function(){return(i._getOutputChannelCount=i.asm.A).apply(null,arguments)},i._loadModel=function(){return(i._loadModel=i.asm.B).apply(null,arguments)},i._runInference=function(){return(i._runInference=i.asm.C).apply(null,arguments)},i._isGPUEnabled=function(){return(i._isGPUEnabled=i.asm.D).apply(null,arguments)};var O,P=i.___errno_location=function(){return(P=i.___errno_location=i.asm.F).apply(null,arguments)};function Q(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function _(t){function e(){O||(O=!0,i.calledRun=!0,!G&&(B(Y),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),S.unshift(t);var t;B(S)}()))}C>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),w.unshift(t);var t;B(w)}(),C>0)||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e())}if(H=function t(){O||_(),O||(H=t)},i.run=_,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return _(),e.ready}}();class qc{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 t2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",e2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function n2(t=t2,e=e2){let n=new qc;return new Promise((function(r,i){(async function(){return $c({locateFile:function(e){return t+e}})})().then((t=>{if(null===t)throw console.error("loadTFLite null"),"loadTFLite null";(async function(t){return new Promise((async(r,i)=>{const o=t;if(typeof o>"u")return i("TFLite backend unavailable: wasmSimd");const a="selfie_segmentation_landscape";console.log("Loading tflite model:",a);let l=e+`${a}.tflite`;console.log("TFLite modelUrl: "+l);try{const t=await(await fetch(l)).arrayBuffer();console.log("Model buffer size:",t.byteLength);const e=o._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",e),console.log("Loading model buffer..."),o.HEAPU8.set(new Uint8Array(t),e);const r=o._loadModel(t.byteLength);if(console.log("Load model result:",r),0!==r)return void i("Cannot load model");n.inputWidth=o._getInputWidth(),n.inputHeight=o._getInputHeight(),n.inputChannelCount=o._getInputChannelCount(),n.inputMemoryOffset=o._getInputMemoryOffset(),console.log("Input memory offset:",n.inputMemoryOffset),console.log("Input height:",n.inputHeight),console.log("Input width:",n.inputWidth),console.log("Input channels:",n.inputChannelCount),n.outputMemoryOffset=o._getOutputMemoryOffset(),n.outputWidth=o._getOutputWidth(),n.outputHeight=o._getOutputHeight(),n.outputChannelCount=o._getOutputChannelCount(),console.log("Output memory offset:",n.outputMemoryOffset),console.log("Output height:",n.outputHeight),console.log("Output width:",n.outputWidth),console.log("Output channels:",n.outputChannelCount),n.selectedTFLite=o}catch(t){return void i(t)}r()}))})(t).then((t=>{r(n)})).catch((t=>{console.error("loadTFLiteModel error"),i("loadTFLiteModel error")}))})).catch((t=>{console.error("loadTFLite error:",t),i("loadTFLite error:"+t)}))}))}class Os{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(t,e){await this.initWasm(t,e),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(t,e){this.infos=await n2(t,e)}getOutputDimensions(){var t,e,n,r;return{width:null!=(e=null==(t=this.infos)?void 0:t.outputWidth)?e:0,height:null!=(r=null==(n=this.infos)?void 0:n.outputHeight)?r:0}}async process(t){if(!this.mask||!this.infos)return;const e=this.infos.inputWidth,n=this.infos.inputHeight;this.context.drawImage(t,0,0,t.width,t.height,0,0,e,n);const r=this.context.getImageData(0,0,e,n),i=this.infos.selectedTFLite.HEAPF32;for(let t=0;t<this.pixelCount;t++){const e=this.inputOffset+3*t;i[e]=r.data[4*t]/255,i[e+1]=r.data[4*t+1]/255,i[e+2]=r.data[4*t+2]/255}this.infos.selectedTFLite._runInference();for(let t=0;t<this.pixelCount;t++){const e=this.infos.selectedTFLite.HEAPF32[this.outputOffset+t];this.mask.data[4*t]=this.mask.data[4*t+3]=255*e}return createImageBitmap(this.mask)}isGpuSupported(){var t,e,n;return null!=(n=null==(e=null==(t=this.infos)?void 0:t.selectedTFLite)?void 0:e._isGPUEnabled())&&n}}async function K3(t,e){const{wasm:n,insertableStreams:r,simd:i,webgl:o}=await r2(t,e);if(!n.supported)throw n.message;if(!r.supported)throw r.message;if(!i.supported)throw i.message;if(!o.supported)throw o.message}async function r2(t,e){const n=new Os;await n.initWasm(t,e);const r={wasm:{supported:"object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate,message:"Your browser does not support WebAssembly features."},simd:{supported:await Dc(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:n.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:i2(),performance:Ps()};try{await uc()}catch(t){r.insertableStreams.supported=!1,r.insertableStreams.message=t}return r}function i2(){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 Ps(){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 Ii={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function b(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){b(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,Y=typeof TextDecoder<"u",S=typeof TextEncoder<"u";function F(t){if(S)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var C={},H=null;function L(t,e){void 0===e&&(e=0),k(),e=C[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=H[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!H){H={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));C[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===H[o]&&(H[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function B(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=e,t&&j(this,t)}function j(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.j=0,t.i=t.h.length,t.g=t.j}function z(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&t.g++,r)))))}function M(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,t=2*((n=(e<<0|n<<8|r<<16|i<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))}B.prototype.reset=function(){this.g=this.j};var E=[];function A(){this.g=new Uint8Array(64),this.h=0}function O(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function P(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,E.length?(n=E.pop(),e&&(n.v=e.v),t&&j(n,t),t=n):t=new B(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function Q(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.m=t.g.g;var n=7&(e=z(t.g));return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function _(t){switch(t.h){case 0:if(0!=t.h)_(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?_(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)_(t);else{var e=z(t.g);(t=t.g).g+=e}break;case 5:5!=t.h?_(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!Q(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}_(t)}break;default:t.j=!0}}function D(t,e,n){var r=t.g.i,i=z(t.g);return i=t.g.g+i,t.g.i=i,n(e,t),t.g.g=i,t.g.i=r,e}function $(t){var e,n=z(t.g),r=(t=t.g).g;if(t.g+=n,t=t.h,Y)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function q(){this.h=[],this.i=0,this.g=new A}function tt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function et(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function nt(t,e,n){if(null!=n){O(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),r=8388607&Math.round(8388608*r),0,U=(n<<31|e+127<<23|r)>>>0),n=U,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}A.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},A.prototype.length=function(){return this.h},A.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},P.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var rt="function"==typeof Uint8Array;function it(t,e,n){if(null!=t)return"object"==typeof t?rt&&t instanceof Uint8Array?n(t):ot(t,e,n):e(t)}function ot(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=it(t[i],e,n);return Array.isArray(t)&&t.W&&ct(r),r}for(i in r={},t)r[i]=it(t[i],e,n);return r}function at(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var lt,st={W:{value:!0,configurable:!0}};function ct(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,st),t}function ut(t,e,n){var r=lt;if(lt=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.i=null,this.g=t,t=(r=this.g.length)-1,r&&null!==(r=this.g[t])&&"object"==typeof r&&r.constructor===Object?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ct(r):this.g[t]=dt):(ht(this),(r=this.h[t])?ct(r):this.h[t]=dt)}var dt=Object.freeze(ct([]));function ht(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function mt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function pt(t){var e=void 0!==e&&e,n=mt(t,1,e);return null==n&&(n=dt),n===dt&&ft(t,1,n=ct([]),e),n}function bt(t,e,n){return null==(t=null==(t=mt(t,e))?t:+t)?void 0===n?0:n:t}function ft(t,e,n,r){void 0!==r&&r||e>=t.l?(ht(t),t.h[e]=n):t.g[e+t.j]=n}function gt(t,e){t.i||(t.i={});var n=t.i[1];if(!n){var r=pt(t);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.i[1]=n}return n}function yt(t,e,n,r){var i=gt(t,n);e=e||new n,t=pt(t),null!=r?(i.splice(r,0,e),t.splice(r,0,Zt(e))):(i.push(e),t.push(Zt(e)))}function Zt(t,e){if(t.i)for(var n in t.i){var r=t.i[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Zt(r[i]);else r&&Zt(r)}return t.g}function vt(t,e){return null==(t=mt(t,e))?0:t}function Gt(t,e){return null==(t=mt(t,e))?"":t}function Xt(t,e){if(t=t.m){tt(e,e.g.end());for(var n=0;n<t.length;n++)tt(e,t[n])}}function Wt(t,e){if(4==e.h)return!1;var n=e.m;return _(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.m)?n.push(e):t.m=[e]),!0}function Vt(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Rt(t){ut.call(this,t)}function xt(t,e){for(;Q(e);)switch(e.i){case 8:var n=z(e.g);ft(t,1,n);break;case 21:ft(t,2,n=M(e.g));break;case 26:ft(t,3,n=$(e));break;case 34:ft(t,4,n=$(e));break;default:if(!Wt(t,e))return t}return t}function It(t){ut.call(this,t,-1,wt)}ut.prototype.toJSON=function(){return ot(Zt(this),at,L)},ut.prototype.toString=function(){return Zt(this).toString()},m(Rt,ut),m(It,ut),It.prototype.addClassification=function(t,e){yt(this,t,Rt,e)};var wt=[1];function Yt(t){ut.call(this,t)}function St(t,e){for(;Q(e);)switch(e.i){case 13:var n=M(e.g);ft(t,1,n);break;case 21:ft(t,2,n=M(e.g));break;case 29:ft(t,3,n=M(e.g));break;case 37:ft(t,4,n=M(e.g));break;case 45:ft(t,5,n=M(e.g));break;default:if(!Wt(t,e))return t}return t}function Ft(t){ut.call(this,t,-1,Ct)}m(Yt,ut),m(Ft,ut);var Ct=[1];function Ht(t){ut.call(this,t)}function Lt(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Tt(t){return gt(t,Rt).map((function(t){return{index:vt(t,1),Y:bt(t,2),label:null!=mt(t,3)?Gt(t,3):void 0,displayName:null!=mt(t,4)?Gt(t,4):void 0}}))}function kt(t){return{x:bt(t,1),y:bt(t,2),z:bt(t,3),visibility:null!=mt(t,4)?bt(t,4):void 0}}function Jt(t,e){this.h=t,this.g=e,this.l=0}function Nt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Lt(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Lt(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Kt(t){this.g=t}m(Ht,ut);var Ut=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 Bt(t,e){return e+t}function jt(t,e){window[t]=e}function zt(t){if(this.g=t,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=t&&t.locateFile||Bt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Mt(t){return Vt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Vt(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ut),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return jt("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),jt("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=Et(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Vt(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Vt(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,Et(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function Et(t,e){return Vt(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function At(t,e,n){return Vt(t,(function t(){var r,i,o,l,s,c,u,d,h,m,p,b,f,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(t,function(t,e,n){return Vt(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Jt(i.h,i.D),i.s[e]=r),t.return(Nt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new Ht;for(x=new P(x);Q(x);)switch(x.i){case 13:var w=M(x.g);ft(I,1,w);break;case 21:ft(I,2,w=M(x.g));break;case 29:ft(I,3,w=M(x.g));break;case 37:ft(I,4,w=M(x.g));break;case 45:ft(I,5,w=M(x.g));break;case 48:for(var Y=x.g,S=128,F=0,C=w=0;4>C&&128<=S;C++)F|=(127&(S=Y.h[Y.g++]))<<7*C;if(128<=S&&(F|=(127&(S=Y.h[Y.g++]))<<28,w|=(127&S)>>4),128<=S)for(C=0;5>C&&128<=S;C++)w|=(127&(S=Y.h[Y.g++]))<<7*C+3;128>S?(Y=F>>>0,(w=2147483648&(S=w>>>0))&&(S=~S>>>0,0==(Y=1+~Y>>>0)&&(S=S+1>>>0)),Y=4294967296*S+(Y>>>0),w=w?-Y:Y):(Y.l=!0,w=void 0),ft(I,6,w);break;default:if(!Wt(I,x))break t}}I={Z:bt(I,1),$:bt(I,2),height:bt(I,3),width:bt(I,4),rotation:bt(I,5,0),X:vt(I,6)},w=G.get(R);t:for(x=new Ft,w=new P(w);Q(w);)if(10===w.i)yt(x,Y=D(w,new Yt,St),Yt,void 0);else if(!Wt(x,w))break t;x=gt(x,Yt).map(kt),Y=W.get(R);t:for(w=new It,Y=new P(Y);Q(Y);)if(10===Y.i)w.addClassification(D(Y,new Rt,xt));else if(!Wt(w,Y))break t;I={T:I,O:x,M:Tt(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=Z.s[d])||(p=new Jt(Z.h,Z.D),Z.s[d]=p),g(t,Nt(p,m,Z.G),13);case 13:b=t.h,r[d]=b;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:f[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function Ot(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=At(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Pt(t){return 1===(void 0===t&&(t=0),t)?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function Qt(t){var e=this;t=t||{},this.g=new zt({locateFile:t.locateFile,files:function(t){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Pt(t.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(t){return Vt(e,(function e(){var n,r,i,o=this;return X(e,(function(e){return 1==e.g?(n=Pt(t),r="third_party/mediapipe/modules/selfie_segmentation/"+n,g(e,Et(o.g,n),2)):(i=e.h,o.g.overrideFile(r,i),e.return(!0))}))}))}}}})}(t=zt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Vt(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,Mt(e),2):3!=t.g?g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,Et(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ot(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Vt(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var p=m,b=t[s];switch(c.type){case"video":var f=p.m[c.stream];if(f||(f=new Jt(p.h,p.D),p.m[c.stream]=f),0===(p=f).l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&b instanceof HTMLVideoElement){var y=b.videoWidth;f=b.videoHeight}else typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(y=b.naturalWidth,f=b.naturalHeight):(y=b.width,f=b.height);f={glName:p.l,width:y,height:f},(y=p.g).canvas.width=f.width,y.canvas.height=f.height,y.activeTexture(y.TEXTURE0),p.h.bindTexture2d(p.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,b),p.h.bindTexture2d(0),p=f;break t;case"detections":for((f=p.m[c.stream])||(f=new Kt(p.h),p.m[c.stream]=f),(p=f).data||(p.data=new p.g.DetectionListData),p.data.reset(b.length),f=0;f<b.length;++f){y=b[f];var Z=p.data,v=Z.setBoundingBox,G=f,X=y.T,W=new Ht;ft(W,1,X.Z),ft(W,2,X.$),ft(W,3,X.height),ft(W,4,X.width),ft(W,5,X.rotation),ft(W,6,X.X);var V=X=new q;nt(V,1,mt(W,1)),nt(V,2,mt(W,2)),nt(V,3,mt(W,3)),nt(V,4,mt(W,4)),nt(V,5,mt(W,5));var R=mt(W,6);if(null!=R&&null!=R){O(V.g,48);var x=V.g,I=R;R=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),R=U=w,w=I;0<w||127<R;)x.push(127&R|128),R=(R>>>7|w<<25)>>>0,w>>>=7;x.push(R)}if(Xt(W,V),X=et(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=p.data).addNormalizedLandmark,X=f,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),ft(V=new Yt,1,W.x),ft(V,2,W.y),ft(V,3,W.z),W.visibility&&ft(V,4,W.visibility),nt(x=W=new q,1,mt(V,1)),nt(x,2,mt(V,2)),nt(x,3,mt(V,3)),nt(x,4,mt(V,4)),nt(x,5,mt(V,5)),Xt(V,x),W=et(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=p.data).addClassification,X=f,W=y.M[Z],ft(V=new Rt,2,W.Y),W.index&&ft(V,1,W.index),W.label&&ft(V,3,W.label),W.displayName&&ft(V,4,W.displayName),x=W=new q,null!=(w=mt(V,1))&&null!=w)if(O(x.g,8),R=x.g,0<=w)O(R,w);else{for(I=0;9>I;I++)R.push(127&w|128),w>>=7;R.push(1)}nt(x,2,mt(V,2)),null!=(R=mt(V,3))&&(R=F(R),O(x.g,26),O(x.g,R.length),tt(x,x.g.end()),tt(x,R)),null!=(R=mt(V,4))&&(R=F(R),O(x.g,34),O(x.g,R.length),tt(x,x.g.end()),tt(x,R)),Xt(V,x),W=et(W),G.call(v,X,W)}}p=p.data;break t;default:p={}}}switch(u=p,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",zt),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qt.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Vt(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("SelfieSegmentation",Qt),R("VERSION","0.1.1632777926")}).call(Ii);const Si={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ra=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function b(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={fa:e,ga:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ga)throw e.fa;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){b(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.s=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,Y,S=typeof TextDecoder<"u",F=typeof TextEncoder<"u",C={},H=null;function L(t){var e;void 0===e&&(e=0),k(),e=C[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=H[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!H){H={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));C[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===H[o]&&(H[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function U(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice,j=0;function z(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw z(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw z(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function bt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function ft(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=ft(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=ft(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=ft(t,e))?0:t}function Wt(t,e){return null==(t=ft(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?wt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return L(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?L(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return K(t)?new Uint8Array(t):t}function Yt(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function St(){Yt.apply(this,arguments)}if(Yt.prototype.toJSON=function(){return Vt(this.m)},Yt.prototype.toString=function(){return this.m.toString()},m(St,Yt),pt){var Ft={};Object.defineProperties(St,(Ft[Symbol.hasInstance]=bt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ft))}function Ct(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ja;a||(i.F=o.pa||o.ha.P,o.ba?(i.U=Kt(o.ba),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.da?(i.T=Ut(o.X.g,o.da),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ja=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ca){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ht=Symbol();function Lt(t,e,n){return t[Ht]||(t[Ht]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Ht];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ht]=e}return e}function kt(t){var e=function(t){var e=t.ba;return e?Tt(e):(e=t.oa)?Lt(t.X.g,e,t.da):void 0}(t),n=t.X,r=t.ha.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Ut(t,e){var n=t[Nt];return n||(n=function(t,n){return Ct(t,n,e)},t[Nt]=n),n}var Bt=Symbol();function jt(t,e){t.push(e)}function zt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Ut(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[Bt]||Jt(t,t[Bt]=[],jt,zt,Mt,Et)}var Ot=Symbol();function Pt(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Lt(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||Jt(t,t[Ot]={},Pt,Qt,_t,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):B?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ca)?o.push(i):r.ca=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ct(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,j=(n<<31|e+127<<23|8388607&r)>>>0),n=j,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=j=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,S)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){var r=!1;if(r=void 0!==r&&r,F){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(Y||(Y=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){St.apply(this,arguments)}if(m(ce,St),pt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=bt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,be)}function pe(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var be=[1];function fe(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,fe,ge]}m(fe,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}function We(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ve(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),score:Zt(t,2),label:null!=ft(t,3)?Wt(t,3):void 0,displayName:null!=ft(t,4)?Wt(t,4):void 0}}))}function Re(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=ft(t,4)?Zt(t,4):void 0}}function xe(t){return t.map((function(t){return vt(te(t,ye,Ze),fe,1).map(Re)}))}function Ie(t,e){this.h=t,this.g=e,this.l=0}function we(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=We(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=We(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),qa:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Ye(t){this.g=t}m(Ge,ce);var Se=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 Fe(t,e){return e+t}function Ce(t,e){window[t]=e}function He(t){if(this.g=t,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=t&&t.locateFile||Fe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.aa=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Le(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.$?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Se),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ce("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ce("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Te(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.aa)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Te(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.aa)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.$=!1,m.g=0}}))}function Te(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function ke(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,b,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ie(t.h,t.G),t.u[e]=r),i.return(we(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={ea:{ka:Zt(x,1),la:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),ia:Xt(x,6)},Y:vt(te(G.get(R),ye,Ze),fe,1).map(Re),V:Ve(te(W.get(R),me,pe))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.u[d])||(p=new Ie(t.h,t.G),t.u[d]=p),g(Z,we(p,m,t.I),13);case 13:b=Z.h,r[d]=b;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Je(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=ke(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ne(t){return void 0===t&&(t=0),1===t?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ke(t){var e=this;t=t||{},this.g=new He({locateFile:t.locateFile,files:function(t){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:Ne(t.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:xe},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:xe},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(t){return t.map((function(t){return Ve(te(t,me,pe))[0]}))}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Ne(t),r="third_party/mediapipe/modules/hand_landmark/"+n,g(o,Te(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=He.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Le(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Z===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Z=t.g.graph.url,g(u,Te(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Je(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var b=h.o[s.stream];if(b||(b=new Ie(h.h,h.G),h.o[s.stream]=b),0===b.l&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var f=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(f=p.naturalWidth,y=p.naturalHeight):(f=p.width,y=p.height);y={glName:b.l,width:f,height:y},(f=b.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),b.h.bindTexture2d(b.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,p),b.h.bindTexture2d(0),b=y;break t;case"detections":for((b=h.o[s.stream])||(b=new Ye(h.h),h.o[s.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(p.length),y=0;y<p.length;++y){f=p[y];var Z=b.data,v=Z.setBoundingBox,G=y,X=f.ea,W=new Ge;if(gt(W,1,X.ka),gt(W,2,X.la),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.ia),X=ne(W,Xe),v.call(Z,G,X),f.Y)for(Z=0;Z<f.Y.length;++Z){var V=!!(W=f.Y[Z]).visibility;G=(v=b.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new fe,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(f.V)for(Z=0;Z<f.V.length;++Z)G=(v=b.data).addClassification,X=y,W=f.V[Z],gt(V=new de,2,W.score),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}b=b.data;break t;default:b={}}}switch(c=b,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",He),R("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Ke.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Hands",Ke),R("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]]),R("VERSION","0.4.1646424915")}).call(Si);var Yi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.da=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function b(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){b(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){x(Error("Failed to read varint, encoding is invalid."))}function Y(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,F,C=typeof TextDecoder<"u",H=typeof TextEncoder<"u";function L(t){if(H)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}j.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:B&&t instanceof Uint8Array?J(t):null;return t};var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===j){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.m=0,t.i=t.h.length,t.g=t.m}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.l=!0,w()}function Q(t){t.g>t.i&&(t.l=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}A.prototype.reset=function(){this.g=this.m},A.prototype.j=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,Q(this),n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,Q(this),n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,Q(this),n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,Q(this),n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,Q(this),n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]?(this.l=!0,w(),n):(Q(this),n))))))},A.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,Q(this),t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=t.g.j();return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.l=!0,w()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?nt(t):(e=t.g.j(),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.o)?n.push(t):e.o=[t])}function it(t,e,n){var r=t.g.i,i=t.g.j(),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}function ot(t,e,n){var r=t.g.j();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new D}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){q(t.g,8*e+2),q(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t,e){Object.isFrozen(t)||(dt?t[dt]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function mt(t){return t?null==(e=dt?t[dt]:t.g)?0:e:0;var e}function pt(t){return Array.isArray(t)&&ht(t,1),t}function bt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ht(t,2)}function ft(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function gt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return B&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function yt(t,e){if(null!=t)return Array.isArray(t)||ft(t)?Zt(t,e):e(t)}function Zt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=yt(t[r],e);return 1&mt(t)&&pt(n),n}for(r in n={},t)n[r]=yt(t[r],e);return n}function vt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ba,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,r&&ft(r=this.h[t])?(this.l=t-this.j,this.i=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?pt(r):this.h[t]=Xt):(Wt(this),(r=this.i[t])?pt(r):this.i[t]=Xt)}var Gt,Xt=Object.freeze(pt([]));function Wt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function Vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function Rt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Vt(t,e,r);return null==i&&(i=Xt),i===Xt?Yt(t,e,i=pt([]),r):n&&Array.isArray(i)&&2&mt(i)&&Yt(t,e,i=i.slice(),r),i}function xt(t){var e=Rt(t,3,!1);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function It(t,e,n){return null==(t=Vt(t,e))?n:t}function wt(t,e,n){return null==(t=null==(t=Vt(t,e))?t:+t)?void 0===n?0:n:t}function Yt(t,e,n,r){void 0!==r&&r||e>=t.l?(Wt(t),t.i[e]=n):t.h[e+t.j]=n}function St(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=Vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function Ft(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Rt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&mt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&bt(r[a].h);o&&(bt(r),Object.freeze(r)),t.g[n]=r}return r}function Ct(t,e,n,r,i){var o=Ft(t,r,e);n=n||new r,t=Rt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Ht(n))):(o.push(n),t.push(Ht(n)))}function Ht(t){if(t.g)for(var e in t.g){var n=t.g[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&Ht(n[r]);else n&&Ht(n)}return t.h}function Lt(t,e){if(t=t.o){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}function Tt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function kt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Tt(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Jt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Nt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.m=0,e.i=0,e.g=0,e.l=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Kt(t,e,n){if(null!=(e=Vt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=E)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Ut(t,e,n){return 5===t.h&&(Yt(e,n,t.g.o()),!0)}function Bt(t,e,n){return(5===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.o,e):e.push(t.g.o()),!0)}function jt(t,e,n){return 0===t.h&&(Yt(e,n,P(t.g)),!0)}function zt(t,e,n){return 0===t.h&&(Yt(e,n,t.g.j()),!0)}function Mt(t,e,n){if(2!==t.h)return!1;var r,i=t.g.j(),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,C)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=Y(u,c),c.length=0);r=Y(u,c)}return Yt(e,n,r),!0}function Et(t,e,n,r,i){if(2!==t.h)return!1;t=it(t,new r,i);var o=void 0!==o&&o;return e.g||(e.g={}),r=t&&Ht(t),e.g[n]=t,Yt(e,n,r,o),!0}function At(t,e,n,r,i){return 2===t.h&&(Ct(e,n,t=it(t,new r,i),r,void 0),!0)}function Ot(t,e,n){return(0===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.j,e):e.push(t.g.j()),!0)}function Pt(t,e,n){return 0===t.h&&(Yt(e,n,P(t.g)),!0)}function Qt(t){vt.call(this,t,-1,qt)}function _t(t,e){return kt(t,e,Gt||(Gt={1:zt,2:zt,3:Bt,4:Pt}))}vt.prototype.toJSON=function(){return Zt(Ht(this),gt)},vt.prototype.toString=function(){return Ht(this).toString()},m(Qt,vt),Qt.prototype.getRows=function(){return Vt(this,1)},Qt.prototype.getCols=function(){return Vt(this,2)},Qt.prototype.getPackedDataList=function(){return xt(this)},Qt.prototype.getLayout=function(){return It(this,4,0)};var Dt,$t,qt=[3];function te(t){vt.call(this,t)}function ee(t,e){var n=Vt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}Kt(e,t,2),null!=(r=Vt(t,3))&&ct(e,3,L(r)),null!=(r=Vt(t,4))&&ct(e,4,L(r)),Lt(t,e)}function ne(t,e){return kt(t,e,Dt||(Dt={1:zt,2:Ut,3:Mt,4:Mt}))}function re(t){vt.call(this,t,-1,le)}function ie(t,e){return kt(t,e,$t||($t={1:[At,te,ne]}))}m(te,vt),m(re,vt),re.prototype.addClassification=function(t,e){return Ct(this,1,t,te,e),this};var oe,ae,le=[1];function se(t){vt.call(this,t)}function ce(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5),Lt(t,e)}function ue(t,e){return kt(t,e,oe||(oe={1:Ut,2:Ut,3:Ut,4:Ut,5:Ut}))}function de(t){vt.call(this,t,-1,be)}function he(t,e){return kt(t,e,ae||(ae={1:[At,se,ue]}))}m(se,vt),m(de,vt);var me,pe,be=[1];function fe(t){vt.call(this,t)}function ge(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5);var n=Vt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Lt(t,e)}function ye(t,e){return kt(t,e,me||(me={1:Ut,2:Ut,3:Ut,4:Ut,5:Ut,6:jt}))}function Ze(t){vt.call(this,t,-1,Xe)}function ve(t,e){return kt(t,e,pe||(pe={1:Pt,2:Pt,3:Bt,4:Ot}))}m(fe,vt),m(Ze,vt),Ze.prototype.getVertexType=function(){return It(this,1,0)},Ze.prototype.getPrimitiveType=function(){return It(this,2,0)},Ze.prototype.getVertexBufferList=function(){return xt(this)},Ze.prototype.getIndexBufferList=function(){return Rt(this,4)};var Ge,Xe=[3,4];function We(t){vt.call(this,t)}function Ve(t,e){return kt(t,e,Ge||(Ge={1:[Et,Ze,ve],2:[Et,Qt,_t]}))}m(We,vt),We.prototype.getMesh=function(){return St(this,Ze,1)},We.prototype.getPoseTransformMatrix=function(){return St(this,Qt,2)};var Re=[[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]],xe=[[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]],Ie=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],we=[[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]],Ye=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Se=[[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]],Fe=[].concat(l(Re),l(xe),l(Ie),l(we),l(Ye),l(Se));function Ce(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function He(t){return Ft(t,te,1).map((function(t){return{index:It(t,1,0),score:wt(t,2),label:null!=Vt(t,3)?It(t,3,""):void 0,displayName:null!=Vt(t,4)?It(t,4,""):void 0}}))}function Le(t){return{x:wt(t,1),y:wt(t,2),z:wt(t,3),visibility:null!=Vt(t,4)?wt(t,4):void 0}}function Te(t){return Ft(Nt(t,de,he),se,1).map(Le)}function ke(t,e){this.h=t,this.g=e,this.l=0}function Je(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Ce(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ce(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),ca:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Ne(t){this.g=t}var Ke=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 Ue(t,e){return e+t}function Be(t,e){window[t]=e}function je(t){if(this.g=t,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=t&&t.locateFile||Ue,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ze(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ke),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Me(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Me(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Me(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function Ee(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,b,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new ke(t.h,t.D),t.s[e]=r),i.return(Je(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Nt(v.get(R),fe,ye);x={T:{X:wt(x,1),Y:wt(x,2),height:wt(x,3),width:wt(x,4),rotation:wt(x,5,0),W:It(x,6,0)},O:Te(G.get(R)),M:He(Nt(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.s[d])||(p=new ke(t.h,t.D),t.s[d]=p),g(Z,Je(p,m,t.G),13);case 13:b=Z.h,r[d]=b;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ae(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Ee(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Oe(t){return t.map(Pe)}function Pe(t){var e=(t=Nt(t,We,Ve)).getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}function Qe(t){var e=this;t=t||{},this.g=new je({locateFile:t.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:Te},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:Te},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:Te},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Te},ea:{type:"proto",stream:"world_landmarks",transform:Te},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:Oe}}}],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(t){var n,r,i,o;return X((function(a){if(1==a.g){switch(n="",t){case 1:n="pose_landmark_full.tflite";break;case 2:n="pose_landmark_heavy.tflite";break;default:n="pose_landmark_lite.tflite"}return r="third_party/mediapipe/modules/pose_landmark/"+n,i=e.g.locateFile(n,""),g(a,fetch(i),3)}return 2!=a.g?g(a,a.h.arrayBuffer(),2):(o=a.h,e.g.overrideFile(r,o),g(a,e.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"}}}})}(t=je.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ze(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Me(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ae(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var b=h.m[s.stream];if(b||(b=new ke(h.h,h.D),h.m[s.stream]=b),0===b.l&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var f=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(f=p.naturalWidth,y=p.naturalHeight):(f=p.width,y=p.height);y={glName:b.l,width:f,height:y},(f=b.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),b.h.bindTexture2d(b.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,p),b.h.bindTexture2d(0),b=y;break t;case"detections":for((b=h.m[s.stream])||(b=new Ne(h.h),h.m[s.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(p.length),y=0;y<p.length;++y){f=p[y];var Z=b.data,v=Z.setBoundingBox,G=y,X=f.T,W=new fe;if(Yt(W,1,X.X),Yt(W,2,X.Y),Yt(W,3,X.height),Yt(W,4,X.width),Yt(W,5,X.rotation),Yt(W,6,X.W),X=Jt(W,ge),v.call(Z,G,X),f.O)for(Z=0;Z<f.O.length;++Z){var V=!!(W=f.O[Z]).visibility;G=(v=b.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Yt(V=new se,1,W.x),Yt(V,2,W.y),Yt(V,3,W.z),W.visibility&&Yt(V,4,W.visibility),W=Jt(V,ce),G.call(v,X,W)}if(f.M)for(Z=0;Z<f.M.length;++Z)G=(v=b.data).addClassification,X=y,W=f.M[Z],Yt(V=new te,2,W.score),W.index&&Yt(V,1,W.index),W.label&&Yt(V,3,W.label),W.displayName&&Yt(V,4,W.displayName),W=Jt(V,ee),G.call(v,X,W)}b=b.data;break t;default:b={}}}switch(c=b,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",je),R("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Holistic",Qe),R("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}}),R("FACEMESH_LIPS",Re),R("FACEMESH_LEFT_EYE",xe),R("FACEMESH_LEFT_EYEBROW",Ie),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",we),R("FACEMESH_RIGHT_EYEBROW",Ye),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",Se),R("FACEMESH_CONTOURS",Fe),R("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]]),R("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]]),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.5.1635989137")}).call(Yi);const wi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.na=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function b(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={da:e,ea:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ea)throw e.da;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){b(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.s=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,Y,S=typeof TextDecoder<"u",F=typeof TextEncoder<"u",C={},H=null;function L(t){var e;void 0===e&&(e=0),k(),e=C[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=H[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!H){H={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));C[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===H[o]&&(H[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function U(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var B="function"==typeof Uint8Array.prototype.slice,j=0;function z(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===U)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw z(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw z(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function bt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function ft(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=ft(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=ft(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=ft(t,e))?0:t}function Wt(t,e){return null==(t=ft(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?wt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return L(t);if(t instanceof U){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?L(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return K(t)?new Uint8Array(t):t}function Yt(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function St(){Yt.apply(this,arguments)}if(Yt.prototype.toJSON=function(){return Vt(this.m)},Yt.prototype.toString=function(){return this.m.toString()},m(St,Yt),pt){var Ft={};Object.defineProperties(St,(Ft[Symbol.hasInstance]=bt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Ft))}function Ct(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ha;a||(i.F=o.la||o.fa.P,o.aa?(i.U=Kt(o.aa),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.ca?(i.T=Ut(o.X.g,o.ca),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ha=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ba){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ht=Symbol();function Lt(t,e,n){return t[Ht]||(t[Ht]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Ht];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ht]=e}return e}function kt(t){var e=function(t){var e=t.aa;return e?Tt(e):(e=t.ka)?Lt(t.X.g,e,t.ca):void 0}(t),n=t.X,r=t.fa.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Ut(t,e){var n=t[Nt];return n||(n=function(t,n){return Ct(t,n,e)},t[Nt]=n),n}var Bt=Symbol();function jt(t,e){t.push(e)}function zt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Ut(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[Bt]||Jt(t,t[Bt]=[],jt,zt,Mt,Et)}var Ot=Symbol();function Pt(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Lt(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||Jt(t,t[Ot]={},Pt,Qt,_t,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):B?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ba)?o.push(i):r.ba=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ct(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?j=0:(0,j=2147483648):isNaN(r)?(0,j=2147483647):34028234663852886e22<r?(0,j=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,j=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,j=(n<<31|e+127<<23|8388607&r)>>>0),n=j,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=j=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,S)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){var r=!1;if(r=void 0!==r&&r,F){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(Y||(Y=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){St.apply(this,arguments)}if(m(ce,St),pt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=bt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,be)}function pe(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var be=[1];function fe(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,fe,ge]}m(fe,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}m(Ge,ce);var We=[[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]],Ve=[[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]],Re=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],xe=[[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]],Ie=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],we=[[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]],Ye=[].concat(l(We),l(Ve),l(Re),l(xe),l(Ie),l(we));function Se(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Fe(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),ga:Zt(t,2),label:null!=ft(t,3)?Wt(t,3):void 0,displayName:null!=ft(t,4)?Wt(t,4):void 0}}))}function Ce(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=ft(t,4)?Zt(t,4):void 0}}function He(t,e){this.h=t,this.g=e,this.l=0}function Le(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=Se(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Se(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),ma:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Te(t){this.g=t}var ke=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(t,e){return e+t}function Ne(t,e){window[t]=e}function Ke(t){if(this.g=t,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=t&&t.locateFile||Je,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.$=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ue(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.Z?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(ke),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ne("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ne("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Be(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.$)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Be(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.$)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.Z=!1,m.g=0}}))}function Be(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function je(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,b,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new He(t.h,t.G),t.u[e]=r),i.return(Le(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={boundingBox:{xCenter:Zt(x,1),yCenter:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),rectId:Xt(x,6)},landmarks:vt(te(G.get(R),ye,Ze),fe,1).map(Ce),V:Fe(te(W.get(R),me,pe))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.u[d])||(p=new He(t.h,t.G),t.u[d]=p),g(Z,Le(p,m,t.I),13);case 13:b=Z.h,r[d]=b;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function ze(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=je(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Me(t){var e=this;t=t||{};var n={url:"face_detection_short.binarypb"},r={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Ke({locateFile:t.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:n,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:"object"==typeof window&&void 0!==window.navigator&&("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(t){var i,o,l,s,c;return X((function(u){switch(u.g){case 1:i=a("short"===t?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"]),o=i.next();case 2:if(o.done){u.g=4;break}return l=o.value,s="third_party/mediapipe/modules/face_detection/"+l,g(u,Be(e.g,l),5);case 5:c=u.h,e.g.overrideFile(s,c),o=i.next(),u.g=2;break;case 4:return n.url="short"===t?"face_detection_short.binarypb":"face_detection_full.binarypb",r.graphOptionXref.calculatorName="short"===t?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",u.return(!0)}}))}},minDetectionConfidence:r}})}(t=Ke.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ue(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Y===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Y=t.g.graph.url,g(u,Be(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,ze(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var b=h.o[s.stream];if(b||(b=new He(h.h,h.G),h.o[s.stream]=b),0===b.l&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var f=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(f=p.naturalWidth,y=p.naturalHeight):(f=p.width,y=p.height);y={glName:b.l,width:f,height:y},(f=b.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),b.h.bindTexture2d(b.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,p),b.h.bindTexture2d(0),b=y;break t;case"detections":for((b=h.o[s.stream])||(b=new Te(h.h),h.o[s.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(p.length),y=0;y<p.length;++y){f=p[y];var Z=b.data,v=Z.setBoundingBox,G=y,X=f.boundingBox,W=new Ge;if(gt(W,1,X.xCenter),gt(W,2,X.yCenter),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.rectId),X=ne(W,Xe),v.call(Z,G,X),f.landmarks)for(Z=0;Z<f.landmarks.length;++Z){var V=!!(W=f.landmarks[Z]).visibility;G=(v=b.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new fe,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(f.V)for(Z=0;Z<f.V.length;++Z)G=(v=b.data).addClassification,X=y,W=f.V[Z],gt(V=new de,2,W.ga),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}b=b.data;break t;default:b={}}}switch(c=b,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Ke),R("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Me.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("FaceDetection",Me),R("FACEDETECTION_LIPS",We),R("FACEDETECTION_LEFT_EYE",Ve),R("FACEDETECTION_LEFT_EYEBROW",Re),R("FACEDETECTION_RIGHT_EYE",xe),R("FACEDETECTION_RIGHT_EYEBROW",Ie),R("FACEDETECTION_FACE_OVAL",we),R("FACEDETECTION_CONTOURS",Ye),R("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]]),R("VERSION","0.4.1646425229")}).call(wi);const Ti={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function b(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){b(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,Y=typeof TextDecoder<"u",S=typeof TextEncoder<"u";function F(t){if(S)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var C={},H=null;function L(t,e){void 0===e&&(e=0),k(),e=C[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=H[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!H){H={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));C[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===H[o]&&(H[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var U=0;function B(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=e,t&&j(this,t)}function j(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.l=0,t.j=t.h.length,t.g=t.l}function z(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.m=!0}B.prototype.reset=function(){this.g=this.l},B.prototype.i=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&this.g++,n)))))},B.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var M=[];function E(){this.g=new Uint8Array(64),this.h=0}function A(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function O(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,M.length?(n=M.pop(),e&&(n.v=e.v),t&&j(n,t),t=n):t=new B(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function P(t){var e=t.g;if((e=e.g==e.j)||(e=t.j)||(e=(e=t.g).m||0>e.g||e.g>e.j),e)return!1;t.m=t.g.g;var n=7&(e=t.g.i());return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function Q(t){switch(t.h){case 0:if(0!=t.h)Q(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?Q(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)Q(t);else{var e=t.g.i();(t=t.g).g+=e}break;case 5:5!=t.h?Q(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!P(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}Q(t)}break;default:t.j=!0}}function _(t,e,n){var r=t.g.j,i=t.g.i(),o=t.g.g+i;if(t.g.j=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.j=r,e}function D(t){return t.g.o()}function $(t){var e,n=t.g.i(),r=(t=t.g).g;if(t.g+=n,t=t.h,Y)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function q(t,e,n){var r=t.g.i();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}function tt(t,e){2==t.h?q(t,B.prototype.o,e):e.push(D(t))}function et(){this.h=[],this.i=0,this.g=new E}function nt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function rt(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function it(t,e,n){if(null!=n){A(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,U=(n<<31|e+127<<23|8388607&r)>>>0),n=U,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}E.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},E.prototype.length=function(){return this.h},E.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},O.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var ot="function"==typeof Uint8Array;function at(t,e,n){if(null!=t)return"object"==typeof t?ot&&t instanceof Uint8Array?n(t):lt(t,e,n):e(t)}function lt(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=at(t[i],e,n);return Array.isArray(t)&&t.W&&dt(r),r}for(i in r={},t)r[i]=at(t[i],e,n);return r}function st(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var ct,ut={W:{value:!0,configurable:!0}};function dt(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,ut),t}function ht(t,e,n){var r=ct;if(ct=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,!r||(null===(r=this.h[t])||"object"!=typeof r||Array.isArray(r)||ot&&r instanceof Uint8Array)?void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE:(this.l=t-this.j,this.i=r),n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?dt(r):this.h[t]=mt):(pt(this),(r=this.i[t])?dt(r):this.i[t]=mt)}var mt=Object.freeze(dt([]));function pt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function bt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function ft(t,e){var n=void 0!==n&&n,r=bt(t,e,n);return null==r&&(r=mt),r===mt&&vt(t,e,r=dt([]),n),r}function gt(t){var e=ft(t,3);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function yt(t,e,n){return null==(t=bt(t,e))?n:t}function Zt(t,e,n){return null==(t=null==(t=bt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){void 0!==r&&r||e>=t.l?(pt(t),t.i[e]=n):t.h[e+t.j]=n}function Gt(t,e,n){if(-1===n)return null;if(t.g||(t.g={}),!t.g[n]){var r=bt(t,n,!1);r&&(t.g[n]=new e(r))}return t.g[n]}function Xt(t,e){t.g||(t.g={});var n=t.g[1];if(!n){var r=ft(t,1);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.g[1]=n}return n}function Wt(t,e,n){var r=void 0!==r&&r;t.g||(t.g={});var i=n&&Rt(n);t.g[e]=n,vt(t,e,i,r)}function Vt(t,e,n,r){var i=Xt(t,n);e=e||new n,t=ft(t,1),null!=r?(i.splice(r,0,e),t.splice(r,0,Rt(e))):(i.push(e),t.push(Rt(e)))}function Rt(t,e){if(t.g)for(var n in t.g){var r=t.g[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Rt(r[i]);else r&&Rt(r)}return t.h}function xt(t,e){if(t=t.o){nt(e,e.g.end());for(var n=0;n<t.length;n++)nt(e,t[n])}}function It(t,e){if(4==e.h)return!1;var n=e.m;return Q(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.o)?n.push(e):t.o=[e]),!0}function wt(t){ht.call(this,t,-1,St)}function Yt(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 16:vt(t,2,n=e.g.i());break;case 29:case 26:tt(e,t.getPackedDataList());break;case 32:vt(t,4,n=z(e.g));break;default:if(!It(t,e))return t}return t}ht.prototype.toJSON=function(){return lt(Rt(this),st,L)},ht.prototype.toString=function(){return Rt(this).toString()},m(wt,ht),wt.prototype.getRows=function(){return bt(this,1)},wt.prototype.getCols=function(){return bt(this,2)},wt.prototype.getPackedDataList=function(){return gt(this)},wt.prototype.getLayout=function(){return yt(this,4,0)};var St=[3];function Ft(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Ct(t){ht.call(this,t)}function Ht(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 26:vt(t,3,n=$(e));break;case 34:vt(t,4,n=$(e));break;default:if(!It(t,e))return t}return t}function Lt(t){ht.call(this,t,-1,Tt)}m(Ct,ht),m(Lt,ht),Lt.prototype.addClassification=function(t,e){return Vt(this,t,Ct,e),this};var Tt=[1];function kt(t){ht.call(this,t)}function Jt(t,e){for(;P(e);)switch(e.i){case 13:var n=D(e);vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 29:vt(t,3,n=D(e));break;case 37:vt(t,4,n=D(e));break;case 45:vt(t,5,n=D(e));break;default:if(!It(t,e))return t}return t}function Nt(t){ht.call(this,t,-1,Ut)}function Kt(t){t:{var e=new Nt;for(t=new O(t);P(t);)if(10===t.i){Vt(e,_(t,new kt,Jt),kt,void 0)}else if(!It(e,t))break t}return e}m(kt,ht),m(Nt,ht);var Ut=[1];function Bt(t){ht.call(this,t)}function jt(t){ht.call(this,t,-1,Mt)}function zt(t,e){for(;P(e);)switch(e.i){case 8:var n=z(e.g);vt(t,1,n);break;case 16:vt(t,2,n=z(e.g));break;case 29:case 26:tt(e,t.getVertexBufferList());break;case 32:case 34:n=e;var r=t.getIndexBufferList();2==n.h?q(n,B.prototype.i,r):r.push(n.g.i());break;default:if(!It(t,e))return t}return t}m(Bt,ht),m(jt,ht),jt.prototype.getVertexType=function(){return yt(this,1,0)},jt.prototype.getPrimitiveType=function(){return yt(this,2,0)},jt.prototype.getVertexBufferList=function(){return gt(this)},jt.prototype.getIndexBufferList=function(){return ft(this,4)};var Mt=[3,4];function Et(t){ht.call(this,t)}function At(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ot(t){return Xt(t,Ct).map((function(t){return{index:yt(t,1,0),Y:Zt(t,2),label:null!=bt(t,3)?yt(t,3,""):void 0,displayName:null!=bt(t,4)?yt(t,4,""):void 0}}))}function Pt(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=bt(t,4)?Zt(t,4):void 0}}function Qt(t,e){this.h=t,this.g=e,this.l=0}function _t(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=At(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=At(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Dt(t){this.g=t}m(Et,ht),Et.prototype.getMesh=function(){return Gt(this,jt,1)},Et.prototype.getPoseTransformMatrix=function(){return Gt(this,wt,2)};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 qt(t,e){return e+t}function te(t,e){window[t]=e}function ee(t){if(this.g=t,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=t&&t.locateFile||qt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ne(t){return Ft(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Ft(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate($t),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return te("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),te("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=re(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Ft(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Ft(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,re(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function re(t,e){return Ft(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function ie(t,e,n){return Ft(t,(function t(){var r,i,o,l,s,c,u,d,h,m,p,b,f,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(t,function(t,e,n){return Ft(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Qt(i.h,i.D),i.s[e]=r),t.return(_t(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new Bt;for(x=new O(x);P(x);)switch(x.i){case 13:var w=D(x);vt(I,1,w);break;case 21:vt(I,2,w=D(x));break;case 29:vt(I,3,w=D(x));break;case 37:vt(I,4,w=D(x));break;case 45:vt(I,5,w=D(x));break;case 48:vt(I,6,w=z(x.g));break;default:if(!It(I,x))break t}}I={Z:Zt(I,1),$:Zt(I,2),height:Zt(I,3),width:Zt(I,4),rotation:Zt(I,5,0),X:yt(I,6,0)},x=Xt(Kt(G.get(R)),kt).map(Pt);var Y=W.get(R);t:for(w=new Lt,Y=new O(Y);P(Y);)if(10===Y.i)w.addClassification(_(Y,new Ct,Ht));else if(!It(w,Y))break t;I={T:I,O:x,M:Ot(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=Z.s[d])||(p=new Qt(Z.h,Z.D),Z.s[d]=p),g(t,_t(p,m,Z.G),13);case 13:b=t.h,r[d]=b;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:f[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function oe(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ie(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function ae(t){t=function(t){t:{var e=new Et;for(t=new O(t);P(t);)switch(t.i){case 10:var n=_(t,new jt,zt);Wt(e,1,n);break;case 18:Wt(e,2,n=_(t,new wt,Yt));break;default:if(!It(e,t))break t}}return e}(t);var e=t.getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}(t=ee.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Ft(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,ne(e),2):3!=t.g?g(t,function(t){return Ft(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,re(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,oe(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Ft(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Ft(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var p=m,b=t[s];switch(c.type){case"video":var f=p.m[c.stream];if(f||(f=new Qt(p.h,p.D),p.m[c.stream]=f),0===(p=f).l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&b instanceof HTMLVideoElement){var y=b.videoWidth;f=b.videoHeight}else typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(y=b.naturalWidth,f=b.naturalHeight):(y=b.width,f=b.height);f={glName:p.l,width:y,height:f},(y=p.g).canvas.width=f.width,y.canvas.height=f.height,y.activeTexture(y.TEXTURE0),p.h.bindTexture2d(p.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,b),p.h.bindTexture2d(0),p=f;break t;case"detections":for((f=p.m[c.stream])||(f=new Dt(p.h),p.m[c.stream]=f),(p=f).data||(p.data=new p.g.DetectionListData),p.data.reset(b.length),f=0;f<b.length;++f){y=b[f];var Z=p.data,v=Z.setBoundingBox,G=f,X=y.T,W=new Bt;vt(W,1,X.Z),vt(W,2,X.$),vt(W,3,X.height),vt(W,4,X.width),vt(W,5,X.rotation),vt(W,6,X.X);var V=X=new et;it(V,1,bt(W,1)),it(V,2,bt(W,2)),it(V,3,bt(W,3)),it(V,4,bt(W,4)),it(V,5,bt(W,5));var R=bt(W,6);if(null!=R&&null!=R){A(V.g,48);var x=V.g,I=R;R=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),R=U=w,w=I;0<w||127<R;)x.push(127&R|128),R=(R>>>7|w<<25)>>>0,w>>>=7;x.push(R)}if(xt(W,V),X=rt(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=p.data).addNormalizedLandmark,X=f,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),vt(V=new kt,1,W.x),vt(V,2,W.y),vt(V,3,W.z),W.visibility&&vt(V,4,W.visibility),it(x=W=new et,1,bt(V,1)),it(x,2,bt(V,2)),it(x,3,bt(V,3)),it(x,4,bt(V,4)),it(x,5,bt(V,5)),xt(V,x),W=rt(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=p.data).addClassification,X=f,W=y.M[Z],vt(V=new Ct,2,W.Y),W.index&&vt(V,1,W.index),W.label&&vt(V,3,W.label),W.displayName&&vt(V,4,W.displayName),x=W=new et,null!=(w=bt(V,1))&&null!=w)if(A(x.g,8),R=x.g,0<=w)A(R,w);else{for(I=0;9>I;I++)R.push(127&w|128),w>>=7;R.push(1)}it(x,2,bt(V,2)),null!=(R=bt(V,3))&&(R=F(R),A(x.g,26),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),null!=(R=bt(V,4))&&(R=F(R),A(x.g,34),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),xt(V,x),W=rt(W),G.call(v,X,W)}}p=p.data;break t;default:p={}}}switch(u=p,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ee),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});var le={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(t){return t.map(ae)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(t){return t.map((function(t){return Xt(Kt(t),kt).map(Pt)}))}}}}],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"}}}},se=[[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]],ce=[[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]],ue=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],de=[[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]],he=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],me=[[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]],pe=[].concat(l(se),l(ce),l(ue),l(de),l(he),l(me));function be(t){t=t||{},t=Object.assign(Object.assign({},le),t),this.g=new ee(t)}(t=be.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Ft(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Ft(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("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}}),R("FaceMesh",be),R("FACEMESH_LIPS",se),R("FACEMESH_LEFT_EYE",ce),R("FACEMESH_LEFT_EYEBROW",ue),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",de),R("FACEMESH_RIGHT_EYEBROW",he),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",me),R("FACEMESH_CONTOURS",pe),R("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]]),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.4.1633559619")}).call(Ti);const Fi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ka=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function b(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={V:e,X:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.X)throw e.V;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){b(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.G(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.m(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.H(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.F(),this.B()},e.prototype.F=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.G=function(t){var e=this.j();t.K(e.resolve,e.reject)},e.prototype.H=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.K(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.K=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).K(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).K(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){throw t}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){x(Error("Failed to read varint, encoding is invalid."))}function Y(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,F,C=typeof TextDecoder<"u",H=typeof TextEncoder<"u";function L(t){if(H)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===j){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.j=!0,w()}function Q(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function _(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,Q(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,Q(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,Q(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,Q(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,Q(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(Q(t),r))))))}function D(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,Q(t),(e<<0|n<<8|r<<16|i<<24)>>>0}A.prototype.reset=function(){this.g=this.l},A.prototype.m=function(){var t=D(this),e=2*(t>>31)+1,n=t>>>23&255;return t&=8388607,255==n?t?NaN:1/0*e:0==n?e*Math.pow(2,-149)*t:e*Math.pow(2,n-150)*(t+Math.pow(2,23))};var $=[];function q(){this.g=new Uint8Array(64),this.h=0}function tt(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function et(t,e){for(;127<e;)tt(t,127&e|128),e>>>=7;tt(t,e)}function nt(t){var e={},n=void 0!==e.O&&e.O;this.m={v:void 0!==e.v&&e.v},this.O=n,e=this.m,$.length?(n=$.pop(),e&&(n.v=e.v),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function rt(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=_(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function it(t){switch(t.h){case 0:if(0!=t.h)it(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?it(t):(e=_(t.g),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!rt(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}it(t)}break;default:t.j=!0,I(t.h,t.l)}}function ot(t,e,n){var r=t.g.i,i=_(t.g),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}q.prototype.length=function(){return this.h},q.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},nt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new q}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){et(t.g,8*e+2),et(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t){return Object.isFrozen(t)||(dt?t[dt]|=1:void 0!==t.g?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function mt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function pt(t,e){if(null!=t)return Array.isArray(t)||mt(t)?bt(t,e):e(t)}function bt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=pt(t[r],e);var i;if(e=Array.isArray(t))e=1&(null==(i=dt?t[dt]:t.g)?0:i);return e&&ht(n),n}for(n in i={},t)i[n]=pt(t[n],e);return i}function ft(t){return t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(B&&null!=t&&t instanceof Uint8Array)return J(t);if(t instanceof j){if(null==t.g)t="";else{var e=t.g;e=null==e||"string"==typeof e?e:B&&e instanceof Uint8Array?J(e):null,t=t.g=e}return t}}return t}(t),Array.isArray(t)?bt(t,ft):t}function gt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ha,t||(t=r?[r]:[]),this.i=(r?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t,t=(r=this.u.length)-1,r&&mt(r=this.u[t])?(this.j=t-this.i,this.h=r):void 0!==e&&-1<e?(this.j=Math.max(e,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.j?(t+=this.i,(r=this.u[t])?Array.isArray(r)&&ht(r):this.u[t]=yt):(Zt(this),(r=this.h[t])?Array.isArray(r)&&ht(r):this.h[t]=yt)}var yt=Object.freeze(ht([]));function Zt(t){var e=t.j+t.i;t.u[e]||(t.h=t.u[e]={})}function vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.j?t.h?t.h[e]:void 0:t.u[e+t.i]}function Gt(t,e,n){var r=vt(t,e,n=void 0!==n&&n);return null==r&&(r=yt),r===yt&&Vt(t,e,r=ht(r.slice()),n),r}function Xt(t,e){var n=Gt(t,e);if(t.l||(t.l={}),!t.l[e]){for(var r=0;r<n.length;r++)n[r]=+n[r];t.l[e]=!0}return n}function Wt(t,e,n){return null==(t=null==(t=vt(t,e))?t:+t)?void 0===n?0:n:t}function Vt(t,e,n,r){void 0!==r&&r||e>=t.j?(Zt(t),t.h[e]=n):t.u[e+t.i]=n}function Rt(t,e,n,r){n!==r?Vt(t,e,n):Vt(t,e,void 0,!1)}function xt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function It(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Gt(t,n,!1);r=[];for(var o=0;o<i.length;o++)r[o]=new e(i[o]);t.g[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Gt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.u)):(o.push(n),t.push(n.u))}function Yt(t,e){return null==(t=vt(t,e))?0:t}function St(t,e){return null==(t=vt(t,e))?"":t}function Ft(t,e){if(t=t.m){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}gt.prototype.toJSON=function(){return bt(this.u,ft)},gt.prototype.toString=function(){return this.u.toString()};var Ct=Symbol();function Ht(t,e,n){return t[Ct]||(t[Ct]=function(t,r){return e(t,r,n)})}function Lt(t){var e=t[Ct];if(!e){var n=t[Jt]||(t[Jt]=t());e=function(t,e){return Nt(t,e,n)},t[Ct]=e}return e}function Tt(t){var e=function(t){var e=t.da;if(e)return Lt(e);if(e=t.ia){var n=t.Y;return delete t.Y,Ht(t.W.g,e,n)}}(t),n=t.W,r=t.ea;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=Lt(t[2]);return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[3],l=Lt(t[2]);return function(t,n,r){return e(t,n,r,o,l,a)};case 5:var s=t[1],c=Ht(s,t[3],t[4]);return function(t,n,r){return e(t,n,r,s,c)};case 6:var u=t[1],d=t[5],h=Ht(u,t[3],t[4]);return function(t,n,r){return e(t,n,r,u,h,d)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var Jt=Symbol();function Nt(t,e,n){for(;rt(e)&&4!=e.h;){var r=e.i,i=n[r];if(i)Array.isArray(i)&&(i=n[r]=kt(i));else{var o=n[0];o&&(o=o[r])&&(i=n[r]=Tt(o))}i&&i(e,t,r)||(r=t,o=(i=e).l,it(i),i.O||(i=M(i.g.h,o,i.g.g),(o=r.m)?o.push(i):r.m=[i]))}return t}function Kt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Ut(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new nt(t);try{return Nt(new e,t,n[Jt]||(n[Jt]=n()))}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.v=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Bt(t,e,n){if(null!=(e=vt(e,n))){et(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),tt(t,(n=E)>>>0&255),tt(t,n>>>8&255),tt(t,n>>>16&255),tt(t,n>>>24&255)}}function jt(t,e,n){if(1!==t.h)return!1;var r=t.g;t=D(r);var i=D(r);r=2*(i>>31)+1;var o=i>>>20&2047;return t=4294967296*(1048575&i)+t,Rt(e,n,2047==o?t?NaN:1/0*r:0==o?r*Math.pow(2,-1074)*t:r*Math.pow(2,o-1075)*(t+4503599627370496),0),!0}function zt(t,e,n){return 5===t.h&&(Vt(e,n,t.g.m()),!0)}function Mt(t,e,n){if(5!==t.h&&2!==t.h)return!1;if(e=Gt(e,n),2==t.h){n=A.prototype.m;var r=_(t.g);for(r=t.g.g+r;t.g.g<r;)e.push(n.call(t.g))}else e.push(t.g.m());return!0}function Et(t,e,n){return 5===t.h&&(Rt(e,n,t=t.g.m(),0),!0)}function At(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function Ot(t,e,n){return 0===t.h&&(Vt(e,n,_(t.g)),!0)}function Pt(t,e,n){return 0===t.h&&(Rt(e,n,t=_(t.g),0),!0)}function Qt(t,e,n){return 0===t.h&&(Rt(e,n,t=!!_(t.g),!1),!0)}function _t(t,e,n){if(2!==t.h)return!1;var r,i=_(t.g),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,C)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=Y(u,c),c.length=0);r=Y(u,c)}return Vt(e,n,r),!0}function Dt(t,e,n,r,i){return 2===t.h&&(t=ot(t,new r,i),e.g||(e.g={}),r=t&&t.u,e.g[n]=t,Vt(e,n,r,!1),!0)}function $t(t,e,n,r,i){return 2===t.h&&(wt(e,n,t=ot(t,new r,i),r,void 0),!0)}function qt(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function te(t){gt.call(this,t)}function ee(){return{1:Ot,2:zt,3:_t,4:_t}}function ne(t,e){var n=vt(t,1);if(null!=n&&null!=n){et(e.g,8);var r=e.g;if(0<=n)et(r,n);else{for(var i=0;9>i;i++)tt(r,127&n|128),n>>=7;tt(r,1)}}Bt(e,t,2),null!=(r=vt(t,3))&&ct(e,3,L(r)),null!=(r=vt(t,4))&&ct(e,4,L(r)),Ft(t,e)}function re(t){gt.call(this,t,-1,oe)}function ie(){return{1:[$t,te,ee]}}m(te,gt),m(re,gt),re.prototype.addClassification=function(t,e){return wt(this,1,t,te,e),this};var oe=[1];function ae(t){gt.call(this,t)}function le(){return{1:zt,2:zt,3:zt,4:zt,5:zt}}function se(t,e){Bt(e,t,1),Bt(e,t,2),Bt(e,t,3),Bt(e,t,4),Bt(e,t,5),Ft(t,e)}function ce(t){gt.call(this,t,-1,de)}function ue(){return{1:[$t,ae,le]}}m(ae,gt),m(ce,gt);var de=[1];function he(t){gt.call(this,t)}function me(){return{1:zt,2:zt,3:zt,4:zt,5:zt,6:At}}function pe(t,e){Bt(e,t,1),Bt(e,t,2),Bt(e,t,3),Bt(e,t,4),Bt(e,t,5);var n=vt(t,6);if(null!=n&&null!=n){et(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)tt(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;tt(r,n)}Ft(t,e)}function be(t){gt.call(this,t,-1,Ze)}function fe(){return{1:qt,2:qt,3:Mt,4:[Dt,ge,ye],5:Ot,6:Ot,7:Mt,8:Mt,9:Mt}}function ge(t){gt.call(this,t)}function ye(){return{1:zt,2:zt,3:zt}}m(he,gt),m(be,gt),m(ge,gt);var Ze=[3,7,8,9];function ve(t){gt.call(this,t)}function Ge(){return{1:Et,2:Et,3:Et}}function Xe(t){gt.call(this,t)}function We(){return{1:Et,2:Et,3:Et}}function Ve(t){gt.call(this,t)}function Re(){return{1:Pt,2:[Dt,Xe,We],3:[Dt,ve,Ge],4:Qt}}function xe(t){gt.call(this,t,-1,we)}function Ie(){return{1:Pt,2:[$t,Ve,Re],3:Et,4:Mt,5:Mt,6:Mt}}m(ve,gt),m(Xe,gt),m(Ve,gt),m(xe,gt);var we=[2,4,5,6];function Ye(t){gt.call(this,t,-1,Fe)}function Se(){return{1:Pt,2:[$t,xe,Ie],3:[Dt,be,fe],4:jt,5:Mt,6:Mt}}m(Ye,gt);var Fe=[2,5,6];function Ce(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function He(t){return It(t,te,1).map((function(t){return{index:Yt(t,1),$:Wt(t,2),label:null!=vt(t,3)?St(t,3):void 0,displayName:null!=vt(t,4)?St(t,4):void 0}}))}function Le(t){return{x:Wt(t,1),y:Wt(t,2),z:Wt(t,3),visibility:null!=vt(t,4)?Wt(t,4):void 0}}function Te(t,e){this.h=t,this.g=e,this.l=0}function ke(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Ce(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ce(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={J:n.getAttribLocation(r,"aVertex"),I:n.getAttribLocation(r,"aTex"),ja:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.J),n.disableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Je(t){this.g=t}var Ne=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 Ke(t,e){return e+t}function Ue(t,e){window[t]=e}function Be(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||Ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.T=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function je(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.S?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ne),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ue("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ue("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.T)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.T)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.F=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,m.g=0}}))}function ze(t,e){var n,r;return X((function(i){return e in t.G?i.return(t.G[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.G[e]=r,i.return(r))}))}function Me(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,b,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.H=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new Te(t.h,t.F),t.s[e]=r),i.return(ke(r,n,t.H))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Ut(v.get(R),he,me);x={U:{aa:Wt(x,1),ba:Wt(x,2),height:Wt(x,3),width:Wt(x,4),rotation:Wt(x,5,0),Z:Yt(x,6)},P:It(Ut(G.get(R),ce,ue),ae,1).map(Le),N:He(Ut(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.s[d])||(p=new Te(t.h,t.F),t.s[d]=p),g(Z,ke(p,m,t.H),13);case 13:b=Z.h,r[d]=b;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ee(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Me(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ae(t){var e=Yt(t,1),n=xt(t,ve,3);return{id:e,point2d:n={x:Wt(n,1),y:Wt(n,2),depth:Wt(n,3)},point3d:{x:Wt(t=xt(t,Xe,2),1),y:Wt(t,2),z:Wt(t,3)}}}function Oe(t){var e=Ut(t,Ye,Se);t=[],e=It(e,xe,2);for(var n=0;n<e.length;n++)t.push({id:Yt(e[n],1),keypoints:It(e[n],Ve,2).map(Ae),visibility:Wt(e[n],3),scale:Xt(e[n],6),translation:Xt(e[n],5),rotation:Xt(e[n],4)});return t}function Pe(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}(t=Be.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={L:o.L,M:o.M},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.L=s.onChange,o.M=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.L(t.M),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,je(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.R=t.g.graph.url,g(u,ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ee(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var b=h.m[s.stream];if(b||(b=new Te(h.h,h.F),h.m[s.stream]=b),0===b.l&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var f=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(f=p.naturalWidth,y=p.naturalHeight):(f=p.width,y=p.height);y={glName:b.l,width:f,height:y},(f=b.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),b.h.bindTexture2d(b.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,p),b.h.bindTexture2d(0),b=y;break t;case"detections":for((b=h.m[s.stream])||(b=new Je(h.h),h.m[s.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(p.length),y=0;y<p.length;++y){f=p[y];var Z=b.data,v=Z.setBoundingBox,G=y,X=f.U,W=new he;if(Vt(W,1,X.aa),Vt(W,2,X.ba),Vt(W,3,X.height),Vt(W,4,X.width),Vt(W,5,X.rotation),Vt(W,6,X.Z),X=Kt(W,pe),v.call(Z,G,X),f.P)for(Z=0;Z<f.P.length;++Z){var V=!!(W=f.P[Z]).visibility;G=(v=b.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Vt(V=new ae,1,W.x),Vt(V,2,W.y),Vt(V,3,W.z),W.visibility&&Vt(V,4,W.visibility),W=Kt(V,se),G.call(v,X,W)}if(f.N)for(Z=0;Z<f.N.length;++Z)G=(v=b.data).addClassification,X=y,W=f.N[Z],Vt(V=new te,2,W.$),W.index&&Vt(V,1,W.index),W.label&&Vt(V,3,W.label),W.displayName&&Vt(V,4,W.displayName),W=Kt(V,ne),G.call(v,X,W)}b=b.data;break t;default:b={}}}switch(c=b,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Be),R("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});var Qe={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 _e(t){var e=this;t=t||{},this.g=new Be({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:Oe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i,o;return X((function(a){return 1==a.g?(n=t,e.g.setOptions({allowedLabels:Pe(n)},Qe),r=function(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"}}(n),i="object_detection_3d.tflite",g(a,ze(e.g,r),2)):(o=a.h,e.g.overrideFile(i,o),a.return(!0))}))}},focalLength:{default:[1,1],onChange:function(t){var n;return X((function(r){return n=t,e.h=n,e.g.setOptions({focalX:n[0],focalY:n[1]},Qe),r.return(!0)}))}},principalPoint:{default:[0,0],onChange:function(t){var n;return X((function(r){return n=t,e.i=n,e.g.setOptions({principalX:n[0],principalY:n[1]},Qe),r.return(!0)}))}},imageSize:{onChange:function(t){var n,r,i,o;return X((function(a){if(void 0===e.h||void 0===e.i)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),a.return();r=[(n=t)[0]/2,n[1]/2],i=[e.h[0]/r[0],e.h[1]/r[1]],o=[e.i[0]/r[0],e.i[1]/r[1]],e.setOptions({focalLength:i,principalPoint:o}),a.g=0}))}}}})}(t=_e.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Objectron",_e),R("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]]),R("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}),R("VERSION","0.4.1636596145")}).call(Fi);const Ci={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function p(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function b(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new p,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return b(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){b(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}p.prototype.o=function(t){this.h=t},p.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){x(Error("Failed to read varint, encoding is invalid."))}function Y(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var S,F,C=typeof TextDecoder<"u",H=typeof TextEncoder<"u";function L(t){if(H)t=(F||(F=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var U,B="function"==typeof Uint8Array;function j(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}j.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:B&&t instanceof Uint8Array?J(t):null;return t};var z="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?U||(U=new Uint8Array(0)):z?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===j){if(null==t.g)var e=U||(U=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||B&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function Q(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,P(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,P(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,P(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,P(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,P(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(P(t),r))))))}A.prototype.reset=function(){this.g=this.l};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=Q(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,P(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,P(t);break;case 2:2!=t.h?nt(t):(e=Q(t.g),(t=t.g).g+=e,P(t));break;case 5:(t=t.g).g+=4,P(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.m)?n.push(t):e.m=[t])}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var it=[];function ot(){this.h=[],this.i=0,this.g=new D}function at(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function lt(t,e,n){q(t.g,8*e+2),q(t.g,n.length),at(t,t.g.end()),at(t,n)}var st,ct="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ut(t,e){Object.isFrozen(t)||(ct?t[ct]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function dt(t){return t?null==(e=ct?t[ct]:t.g)?0:e:0;var e}function ht(t){return Array.isArray(t)&&ut(t,1),t}function mt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ut(t,2)}function pt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function bt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return B&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function ft(t,e){if(null!=t)return Array.isArray(t)||pt(t)?gt(t,e):e(t)}function gt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=ft(t[r],e);return 1&dt(t)&&ht(n),n}for(r in n={},t)n[r]=ft(t[r],e);return n}function yt(t,e,n){var r=st;if(st=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.aa||0),this.i=null,this.g=t,t=(r=this.g.length)-1,r&&pt(r=this.g[t])?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ht(r):this.g[t]=Gt):(Xt(this),(r=this.h[t])?ht(r):this.h[t]=Gt)}var Zt,vt,Gt=Object.freeze(ht([]));function Xt(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function Wt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function Vt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Wt(t,e,r);return null==i&&(i=Gt),i===Gt?xt(t,e,i=ht([]),r):n&&Array.isArray(i)&&2&dt(i)&&xt(t,e,i=i.slice(),r),i}function Rt(t,e,n){return null==(t=null==(t=Wt(t,e))?t:+t)?void 0===n?0:n:t}function xt(t,e,n,r){void 0!==r&&r||e>=t.l?(Xt(t),t.h[e]=n):t.g[e+t.j]=n}function It(t,e,n){t.i||(t.i={});var r=t.i[n];if(!r){var i=Vt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&dt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&mt(r[a].g);o&&(mt(r),Object.freeze(r)),t.i[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Vt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Yt(n))):(o.push(n),t.push(Yt(n)))}function Yt(t){if(t.i)for(var e in t.i){var n=t.i[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&Yt(n[r]);else n&&Yt(n)}return t.g}function St(t,e){return null==(t=Wt(t,e))?0:t}function Ft(t,e){return null==(t=Wt(t,e))?"":t}function Ct(t,e){if(t=t.m){at(e,e.g.end());for(var n=0;n<t.length;n++)at(e,t[n])}}function Ht(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Lt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Ht(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Tt(t,e){var n=new ot;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function kt(t,e,n){if(it.length){var r=it.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>it.length&&it.push(t)}}function Jt(t,e,n){if(null!=(e=Wt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=E)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Nt(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,P(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,xt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}function Kt(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)o|=(127&(i=r.h[r.g++]))<<7*a;if(128<=i&&(o|=(127&(i=r.h[r.g++]))<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)t|=(127&(i=r.h[r.g++]))<<7*a+3;return 128>i?(r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),t=t?-r:r):(r.j=!0,w(),t=void 0),xt(e,n,t),!0}function Ut(t,e,n){return 0===t.h&&(xt(e,n,Q(t.g)),!0)}function Bt(t,e,n){if(2!==t.h)return!1;var r,i=Q(t.g),o=(t=t.g).g;if(t.g+=i,P(t),t=t.h,C)(r=S)||(r=S=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=Y(u,c),c.length=0);r=Y(u,c)}return xt(e,n,r),!0}function jt(t,e,n,r,i){if(2!==t.h)return!1;var o=new r,a=t.g.i,l=Q(t.g),s=t.g.g+l;if(t.g.i=s,i(o,t),0!==(i=s-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+l+" bytes, instead read "+(l-i)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=s,t.g.i=a,wt(e,n,o,r,void 0),!0}function zt(t){yt.call(this,t)}function Mt(t,e){var n=Wt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}Jt(e,t,2),null!=(r=Wt(t,3))&<(e,3,L(r)),null!=(r=Wt(t,4))&<(e,4,L(r)),Ct(t,e)}function Et(t,e){return Lt(t,e,Zt||(Zt={1:Ut,2:Nt,3:Bt,4:Bt}))}function At(t){yt.call(this,t,-1,_t)}function Ot(t,e){return Lt(t,e,vt||(vt={1:[jt,zt,Et]}))}yt.prototype.toJSON=function(){return gt(Yt(this),bt)},yt.prototype.toString=function(){return Yt(this).toString()},m(zt,yt),m(At,yt),At.prototype.addClassification=function(t,e){return wt(this,1,t,zt,e),this};var Pt,Qt,_t=[1];function Dt(t){yt.call(this,t)}function $t(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5),Ct(t,e)}function qt(t,e){return Lt(t,e,Pt||(Pt={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt}))}function te(t){yt.call(this,t,-1,re)}function ee(t,e){return Lt(t,e,Qt||(Qt={1:[jt,Dt,qt]}))}m(Dt,yt),m(te,yt);var ne,re=[1];function ie(t){yt.call(this,t)}function oe(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5);var n=Wt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Ct(t,e)}function ae(t,e){return Lt(t,e,ne||(ne={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt,6:Kt}))}function le(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function se(t){return It(t,zt,1).map((function(t){return{index:St(t,1),X:Rt(t,2),label:null!=Wt(t,3)?Ft(t,3):void 0,displayName:null!=Wt(t,4)?Ft(t,4):void 0}}))}function ce(t){return{x:Rt(t,1),y:Rt(t,2),z:Rt(t,3),visibility:null!=Wt(t,4)?Rt(t,4):void 0}}function ue(t){return It(kt(t,te,ee),Dt,1).map(ce)}function de(t,e){this.h=t,this.g=e,this.l=0}function he(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=le(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=le(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function me(t){this.g=t}m(ie,yt);var pe=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 be(t,e){return e+t}function fe(t,e){window[t]=e}function ge(t){if(this.g=t,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=t&&t.locateFile||be,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ye(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(pe),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return fe("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),fe("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Ze(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function ve(t,e,n){var r,i,o,l,s,c,u,d,h,m,p,b,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new de(t.h,t.D),t.s[e]=r),i.return(he(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=kt(v.get(R),ie,ae);x={T:{Y:Rt(x,1),Z:Rt(x,2),height:Rt(x,3),width:Rt(x,4),rotation:Rt(x,5,0),W:St(x,6)},O:ue(G.get(R)),M:se(kt(W.get(R),At,Ot))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(p=t.s[d])||(p=new de(t.h,t.D),t.s[d]=p),g(Z,he(p,m,t.G),13);case 13:b=Z.h,r[d]=b;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ge(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ve(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Xe(t){switch(void 0===t&&(t=0),t){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function We(t){var e=this;t=t||{},this.g=new ge({locateFile:t.locateFile,files:function(t){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:Xe(t.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:ue},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:ue},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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Xe(t),r="third_party/mediapipe/modules/pose_landmark/"+n,g(o,Ze(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=ge.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ye(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ge(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var p=t[l];switch(s.type){case"video":var b=h.m[s.stream];if(b||(b=new de(h.h,h.D),h.m[s.stream]=b),0===b.l&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement)var f=p.videoWidth,y=p.videoHeight;else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(f=p.naturalWidth,y=p.naturalHeight):(f=p.width,y=p.height);y={glName:b.l,width:f,height:y},(f=b.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),b.h.bindTexture2d(b.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,p),b.h.bindTexture2d(0),b=y;break t;case"detections":for((b=h.m[s.stream])||(b=new me(h.h),h.m[s.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(p.length),y=0;y<p.length;++y){f=p[y];var Z=b.data,v=Z.setBoundingBox,G=y,X=f.T,W=new ie;if(xt(W,1,X.Y),xt(W,2,X.Z),xt(W,3,X.height),xt(W,4,X.width),xt(W,5,X.rotation),xt(W,6,X.W),X=Tt(W,oe),v.call(Z,G,X),f.O)for(Z=0;Z<f.O.length;++Z){var V=!!(W=f.O[Z]).visibility;G=(v=b.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),xt(V=new Dt,1,W.x),xt(V,2,W.y),xt(V,3,W.z),W.visibility&&xt(V,4,W.visibility),W=Tt(V,$t),G.call(v,X,W)}if(f.M)for(Z=0;Z<f.M.length;++Z)G=(v=b.data).addClassification,X=y,W=f.M[Z],xt(V=new zt,2,W.X),W.index&&xt(V,1,W.index),W.label&&xt(V,3,W.label),W.displayName&&xt(V,4,W.displayName),W=Tt(V,Mt),G.call(v,X,W)}b=b.data;break t;default:b={}}}switch(c=b,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ge),R("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=We.prototype).reset=function(){this.g.reset()},t.close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.send=function(t,e){var n=this;return X((function(r){return g(r,n.g.send(t,e),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Pose",We),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("VERSION","0.5.1635988162")}).call(Ci);const qn=class{constructor(){gt(this,"mediapipeMap_",new Map)}getVersion(t){switch(t){case"face_detection":return wi.VERSION;case"face_mesh":return Ti.VERSION;case"hands":return Si.VERSION;case"holistic":return Yi.VERSION;case"objectron":return Fi.VERSION;case"selfie_segmentation":return Ii.VERSION;case"pose":return Ci.VERSION;default:return""}}initialize(t){return new Promise((async(e,n)=>{if(0!=t.mediaPipeModelConfigArray.length){for(let e=0;e<t.mediaPipeModelConfigArray.length;e++){const r=t.mediaPipeModelConfigArray[e];if(this.mediapipeMap_.has(r.modelType))return void n("setting same type is not supported");if("function"!=typeof r.listener)return void n(`[${r.modelType}] ResultsListener must be provided`);let i;switch(r.modelType){case"face_mesh":i=new Ti.FaceMesh({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+t});break;case"face_detection":i=new wi.FaceDetection({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+t});break;case"hands":i=new Si.Hands({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+t});break;case"holistic":i=new Yi.Holistic({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+t});break;case"objectron":i=new Fi.Objectron({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+t});break;case"selfie_segmentation":i=new Ii.SelfieSegmentation({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+t});break;case"pose":i=new Ci.Pose({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+t});break;default:return void n("unknown model type")}i.onResults(r.listener),r.options&&i.setOptions(r.options);try{await i.initialize(),this.mediapipeMap_.set(r.modelType,i)}catch(t){return void n(t)}}e()}else n("no model was selected")}))}close(t){return new Promise(((e,n)=>{let r=[];if(t){let e=this.mediapipeMap_.get(t);if(!e)return void n("model not exit");this.mediapipeMap_.delete(t),r.push(e.close())}else{for(const[t,e]of this.mediapipeMap_.entries())r.push(e.close());this.mediapipeMap_.clear()}Promise.all(r).then((()=>{e()})).catch((t=>{n(t)}))}))}send(t,e){return new Promise(((n,r)=>{let i=[];if(e){let n=this.mediapipeMap_.get(e);if(!n)return void r("model not exit");i.push(n.send({image:t}))}else for(const[e,n]of this.mediapipeMap_.entries())i.push(n.send({image:t}));Promise.all(i).then((()=>{n()})).catch((t=>{r(t)}))}))}reset(t){if(t){let e=this.mediapipeMap_.get(t);e&&"function"==typeof e.reset&&e.reset()}else for(const[t,e]of this.mediapipeMap_.entries())e&&"function"==typeof e.reset&&e.reset()}};let ho=qn;gt(ho,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const or=new WeakMap,gr=new WeakMap,tr=new WeakMap,Li=Symbol("anyProducer"),gs=Promise.resolve(),Hi=Symbol("listenerAdded"),Ni=Symbol("listenerRemoved");let Ji=!1,fo=!1;function wr(t){if("string"!=typeof t&&"symbol"!=typeof t&&"number"!=typeof t)throw new TypeError("`eventName` must be a string, symbol, or number")}function li(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Tr(t,e){const n=gr.get(t);if(n.has(e))return n.get(e)}function Pr(t,e){const n="string"==typeof e||"symbol"==typeof e||"number"==typeof e?e:Li,r=tr.get(t);if(r.has(n))return r.get(n)}function o2(t,e,n){const r=tr.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Li)){const t=Promise.all([e,n]);for(const e of r.get(Li))e.enqueue(t)}}function Zs(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e){let e=Pr(t,n);e||(e=new Set,tr.get(t).set(n,e)),e.add(o)}return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e){const e=Pr(t,n);e&&(e.delete(o),0===e.size&&tr.get(t).delete(n))}return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function vs(t){if(void 0===t)return Gs;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Gs.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const kr=t=>t===Hi||t===Ni;function ci(t,e,n){if(kr(e))try{Ji=!0,t.emit(e,n)}finally{Ji=!1}}class ar{static mixin(t,e){return e=vs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new ar}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){var t,e;if("object"!=typeof(null==(t=globalThis.process)?void 0:t.env))return fo;const{env:n}=null!=(e=globalThis.process)?e:{env:{}};return"emittery"===n.DEBUG||"*"===n.DEBUG||fo}static set isDebugEnabled(t){fo=t}constructor(t={}){var e;or.set(this,new Set),gr.set(this,new Map),tr.set(this,new Map),tr.get(this).set(Li,new Set),this.debug=null!=(e=t.debug)?e:{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}("symbol"==typeof n||"number"==typeof n)&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(ar.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){li(e),t=Array.isArray(t)?t:[t];for(const n of t){wr(n);let t=Tr(this,n);t||(t=new Set,gr.get(this).set(n,t)),t.add(e),this.logIfDebugEnabled("subscribe",n,void 0),kr(n)||ci(this,Hi,{eventName:n,listener:e})}return this.off.bind(this,t,e)}off(t,e){li(e),t=Array.isArray(t)?t:[t];for(const n of t){wr(n);const t=Tr(this,n);t&&(t.delete(e),0===t.size&&gr.get(this).delete(n)),this.logIfDebugEnabled("unsubscribe",n,void 0),kr(n)||ci(this,Ni,{eventName:n,listener:e})}}once(t){let e;const n=new Promise((n=>{e=this.on(t,(t=>{e(),n(t)}))}));return n.off=e,n}events(t){t=Array.isArray(t)?t:[t];for(const e of t)wr(e);return Zs(this,t)}async emit(t,e){var n;if(wr(t),kr(t)&&!Ji)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",t,e),o2(this,t,e);const r=null!=(n=Tr(this,t))?n:new Set,i=or.get(this),o=[...r],a=kr(t)?[]:[...i];await gs,await Promise.all([...o.map((async t=>{if(r.has(t))return t(e)})),...a.map((async n=>{if(i.has(n))return n(t,e)}))])}async emitSerial(t,e){var n;if(wr(t),kr(t)&&!Ji)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",t,e);const r=null!=(n=Tr(this,t))?n:new Set,i=or.get(this),o=[...r],a=[...i];await gs;for(const t of o)r.has(t)&&await t(e);for(const n of a)i.has(n)&&await n(t,e)}onAny(t){return li(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(t),ci(this,Hi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Zs(this)}offAny(t){li(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),ci(this,Ni,{listener:t}),or.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e||"number"==typeof e){const t=Tr(this,e);t&&t.clear();const n=Pr(this,e);if(n){for(const t of n)t.finish();n.clear()}}else{or.get(this).clear();for(const[t,e]of gr.get(this).entries())e.clear(),gr.get(this).delete(t);for(const[t,e]of tr.get(this).entries()){for(const t of e)t.finish();e.clear(),tr.get(this).delete(t)}}}listenerCount(t){var e,n,r,i,o,a;t=Array.isArray(t)?t:[t];let l=0;for(const s of t)if("string"!=typeof s){typeof s<"u"&&wr(s),l+=or.get(this).size;for(const t of gr.get(this).values())l+=t.size;for(const t of tr.get(this).values())l+=t.size}else l+=or.get(this).size+(null!=(n=null==(e=Tr(this,s))?void 0:e.size)?n:0)+(null!=(i=null==(r=Pr(this,s))?void 0:r.size)?i:0)+(null!=(a=null==(o=Pr(this))?void 0:o.size)?a:0);return l}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=vs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Gs=Object.getOwnPropertyNames(ar.prototype).filter((t=>"constructor"!==t));function Lo(t,e){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let n=globalThis.vonage.workerizer;return n[t]||(n[t]=e),n[t]}Object.defineProperty(ar,"listenerAdded",{value:Hi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(ar,"listenerRemoved",{value:Ni,writable:!1,enumerable:!0,configurable:!1});const Br=Lo("globals",{});var _n=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t.EVENT="EVENT",t))(_n||{});function _s(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let s2=0;function ki(t,e,n,r,i){const o=s2++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>_s(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function Kr(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>_s(t))))}const Ei=Lo("workerized",{});function Ho(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function l2(){if(Ho())Kr({type:_n.GLOBALS_SYNC},Br);else{const t=[];for(const e in Ei){const{worker:n,resolvers:r}=Ei[e].workerContext;n&&t.push(ki(n,_n.GLOBALS_SYNC,"",[Br],r))}await Promise.all(t)}}function Qr(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Qr(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Qr(t[n],e[n])):e[n]=t[n]}async function c2(t,e,n,r){const i=new e;if(i.addEventListener("message",(async({data:t})=>{var e,i,o,a,l,s,c;switch(t.type){case _n.GLOBALS_SYNC:t.id?(null==(i=n.get(null!=(e=t.id)?e:-1))||i(t.result),n.delete(null!=(o=t.id)?o:-1)):(Qr(null!=(a=t.result)?a:{},Br),await l2());break;case _n.EVENT:const{result:u}=t,d=u;if(null==(null==d?void 0:d.name))throw"Missing event name";r(d.name,d.data);break;default:null==(s=n.get(null!=(l=t.id)?l:-1))||s(t.result),n.delete(null!=(c=t.id)?c:-1)}})),!await ki(i,_n.INIT,"",[t.workerId,Br],n))throw"Failed to instantiate workerized class";return i}const sr=new WeakMap,Zr=new WeakMap,er=new WeakMap,Ui=Symbol("anyProducer"),Xs=Promise.resolve(),Bi=Symbol("listenerAdded"),Ki=Symbol("listenerRemoved");let Mi=!1,mo=!1;function Fr(t){if("string"!=typeof t&&"symbol"!=typeof t&&"number"!=typeof t)throw new TypeError("`eventName` must be a string, symbol, or number")}function ui(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Cr(t,e){const n=Zr.get(t);if(n.has(e))return n.get(e)}function _r(t,e){const n="string"==typeof e||"symbol"==typeof e||"number"==typeof e?e:Ui,r=er.get(t);if(r.has(n))return r.get(n)}function u2(t,e,n){const r=er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Ui)){const t=Promise.all([e,n]);for(const e of r.get(Ui))e.enqueue(t)}}function Ws(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e){let e=_r(t,n);e||(e=new Set,er.get(t).set(n,e)),e.add(o)}return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e){const e=_r(t,n);e&&(e.delete(o),0===e.size&&er.get(t).delete(n))}return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Vs(t){if(void 0===t)return Rs;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Rs.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Er=t=>t===Bi||t===Ki;function ai(t,e,n){if(Er(e))try{Mi=!0,t.emit(e,n)}finally{Mi=!1}}class Vr{static mixin(t,e){return e=Vs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Vr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){var t,e;if("object"!=typeof(null==(t=globalThis.process)?void 0:t.env))return mo;const{env:n}=null!=(e=globalThis.process)?e:{env:{}};return"emittery"===n.DEBUG||"*"===n.DEBUG||mo}static set isDebugEnabled(t){mo=t}constructor(t={}){var e;sr.set(this,new Set),Zr.set(this,new Map),er.set(this,new Map),er.get(this).set(Ui,new Set),this.debug=null!=(e=t.debug)?e:{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}("symbol"==typeof n||"number"==typeof n)&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){ui(e),t=Array.isArray(t)?t:[t];for(const n of t){Fr(n);let t=Cr(this,n);t||(t=new Set,Zr.get(this).set(n,t)),t.add(e),this.logIfDebugEnabled("subscribe",n,void 0),Er(n)||ai(this,Bi,{eventName:n,listener:e})}return this.off.bind(this,t,e)}off(t,e){ui(e),t=Array.isArray(t)?t:[t];for(const n of t){Fr(n);const t=Cr(this,n);t&&(t.delete(e),0===t.size&&Zr.get(this).delete(n)),this.logIfDebugEnabled("unsubscribe",n,void 0),Er(n)||ai(this,Ki,{eventName:n,listener:e})}}once(t){let e;const n=new Promise((n=>{e=this.on(t,(t=>{e(),n(t)}))}));return n.off=e,n}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Fr(e);return Ws(this,t)}async emit(t,e){var n;if(Fr(t),Er(t)&&!Mi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",t,e),u2(this,t,e);const r=null!=(n=Cr(this,t))?n:new Set,i=sr.get(this),o=[...r],a=Er(t)?[]:[...i];await Xs,await Promise.all([...o.map((async t=>{if(r.has(t))return t(e)})),...a.map((async n=>{if(i.has(n))return n(t,e)}))])}async emitSerial(t,e){var n;if(Fr(t),Er(t)&&!Mi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",t,e);const r=null!=(n=Cr(this,t))?n:new Set,i=sr.get(this),o=[...r],a=[...i];await Xs;for(const t of o)r.has(t)&&await t(e);for(const n of a)i.has(n)&&await n(t,e)}onAny(t){return ui(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(t),ai(this,Bi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Ws(this)}offAny(t){ui(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),ai(this,Ki,{listener:t}),sr.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e||"number"==typeof e){const t=Cr(this,e);t&&t.clear();const n=_r(this,e);if(n){for(const t of n)t.finish();n.clear()}}else{sr.get(this).clear();for(const[t,e]of Zr.get(this).entries())e.clear(),Zr.get(this).delete(t);for(const[t,e]of er.get(this).entries()){for(const t of e)t.finish();e.clear(),er.get(this).delete(t)}}}listenerCount(t){var e,n,r,i,o,a;t=Array.isArray(t)?t:[t];let l=0;for(const s of t)if("string"!=typeof s){typeof s<"u"&&Fr(s),l+=sr.get(this).size;for(const t of Zr.get(this).values())l+=t.size;for(const t of er.get(this).values())l+=t.size}else l+=sr.get(this).size+(null!=(n=null==(e=Cr(this,s))?void 0:e.size)?n:0)+(null!=(i=null==(r=_r(this,s))?void 0:r.size)?i:0)+(null!=(a=null==(o=_r(this))?void 0:o.size)?a:0);return l}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=Vs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Rs=Object.getOwnPropertyNames(Vr.prototype).filter((t=>"constructor"!==t));function a2(t){return t.onAny&&t.emit}function d2(t){return t.prototype.onAny&&t.prototype.emit}Object.defineProperty(Vr,"listenerAdded",{value:Bi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Vr,"listenerRemoved",{value:Ki,writable:!1,enumerable:!0,configurable:!1});let h2=0;async function f2(t,e,n){const r=d2(t)?new Vr:{},i=h2++;return Object.getOwnPropertyNames(t.prototype).forEach((t=>{r[t]=(...r)=>ki(e,_n.FORWARD,t,r,n)})),r.terminate=async(...t)=>{const o=await ki(e,_n.TERMINATE,"",t,n);return delete Ei[i],e.terminate(),r.workerContext.worker=void 0,o},r.workerContext={id:i,worker:e,resolvers:n},Ei[i]=r,r}async function m2(t,e){const n=new Map;let r;const i=await c2(t,e,n,((t,e)=>{null!=r&&r.emit&&(null==r||r.emit(t,e))}));return r=await f2(t,i,n),r}async function p2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;Kr(t,await e.instance[n](...null!=r?r:[]))}const Qs=Lo("registeredWorkers",{});function b2(t,e){e.workerId=t,Ho()&&(Qs[e.workerId]=e)}function y2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=Qs[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Qr(r,Br),a2(e.instance)&&e.instance.onAny(((t,e)=>{Kr({type:_n.EVENT},{name:t,data:e})})),Kr(t,void 0!==typeof e.instance)}async function g2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),Kr(t,r)}function Z2(t){if(!t.args)throw"Missing globals while syncing";Qr(t.args[0],Br),Kr(t,{})}function v2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case _n.INIT:y2(n,t);break;case _n.FORWARD:p2(n,t);break;case _n.TERMINATE:g2(n,t);break;case _n.GLOBALS_SYNC:Z2(n)}}}Ho()&&v2();class xs{static async createVideoReadable(t){return new Promise(((e,n)=>{const r=document.createElement("video");let i=new AbortController,o=new AbortController;r.addEventListener("canplay",(()=>{i.abort(),r.muted=!0,r.loop=!0,r.play().then((()=>{try{const t=r.captureStream(),n=new MediaStreamTrackProcessor(t.getVideoTracks()[0]);e(n.readable)}catch(t){n(t)}}))}),{once:!0,signal:o.signal}),r.addEventListener("error",(t=>{o.abort(),n("loading error:"+t)}),{once:!0,signal:i.signal}),r.crossOrigin="anonymous",r.src=t}))}static async createImageCanvas(t){const e=await(await fetch(t)).blob();return await createImageBitmap(e)}}var G2=Object.defineProperty,X2=(t,e,n)=>e in t?G2(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,W2=(t,e,n)=>(X2(t,"symbol"!=typeof e?e+"":e,n),n);const V2="hlg.tokbox.com/prod/logging/vcp_webrtc",R2="https://",x2=1e4;let di;const I2=new Uint8Array(16);function S2(){if(!di&&(di=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!di))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return di(I2)}const Bn=[];for(let t=0;t<256;++t)Bn.push((t+256).toString(16).slice(1));function Y2(t,e=0){return(Bn[t[e+0]]+Bn[t[e+1]]+Bn[t[e+2]]+Bn[t[e+3]]+"-"+Bn[t[e+4]]+Bn[t[e+5]]+"-"+Bn[t[e+6]]+Bn[t[e+7]]+"-"+Bn[t[e+8]]+Bn[t[e+9]]+"-"+Bn[t[e+10]]+Bn[t[e+11]]+Bn[t[e+12]]+Bn[t[e+13]]+Bn[t[e+14]]+Bn[t[e+15]]).toLowerCase()}const w2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Is={randomUUID:w2};function T2(t,e,n){if(Is.randomUUID&&!e&&!t)return Is.randomUUID();const r=(t=t||{}).random||(t.rng||S2)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return Y2(r)}function No(t,e){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let n=globalThis.vonage.workerizer;return n[t]||(n[t]=e),n[t]}const ur=No("globals",{});var Gr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(Gr||{});function Ds(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let F2=0;function C2(t,e,n,r,i){const o=F2++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>Ds(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function ei(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>Ds(t))))}const Ss=No("workerized",{});function $s(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function L2(){if($s())ei({type:Gr.GLOBALS_SYNC},ur);else{const t=[];for(const e in Ss){const{worker:n,resolvers:r}=Ss[e].workerContext;n&&t.push(C2(n,Gr.GLOBALS_SYNC,"",[ur],r))}await Promise.all(t)}}function Ai(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Ai(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Ai(t[n],e[n])):e[n]=t[n]}async function H2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;ei(t,await e.instance[n](...null!=r?r:[]))}const N2=No("registeredWorkers",{});function J2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=N2[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Ai(r,ur),ei(t,void 0!==typeof e.instance)}async function k2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),ei(t,r)}function E2(t){if(!t.args)throw"Missing globals while syncing";Ai(t.args[0],ur),ei(t,{})}function U2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case Gr.INIT:J2(n,t);break;case Gr.FORWARD:H2(n,t);break;case Gr.TERMINATE:k2(n,t);break;case Gr.GLOBALS_SYNC:E2(n)}}}function B2(t,e){return ur[t]||(ur[t]=e),[()=>ur[t],async e=>{ur[t]=e,await L2()}]}function K2(t,e){return B2(t,e)}$s()&&U2();const[M2,M3]=K2("metadata");function po(){return M2()}class A2{constructor(t){W2(this,"uuid",T2()),this.config=t}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=po())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),x2);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=po().proxyUrl)?t:R2;return e+=("/"===e.at(-1)?"":"/")+V2,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=po();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const j2="5.1.3";class Jo{constructor(){gt(this,"canvas"),gt(this,"context");const t=new OffscreenCanvas(0,0),e=t.getContext("2d");if(!e)throw"Fail to retrieve webgl2 context";this.canvas=t,this.context=e}setFlickeringOptions(t){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(t){return[]}async render(t,e){return this.canvas}resizeCanvas(t){const{width:e,height:n}=t;this.canvas.width=e,this.canvas.height=n}renderSilhouette(t,e,n="none"){const{width:r,height:i}=t;this.context.save(),this.context.drawImage(e,0,0,e.width,e.height,0,0,r,i),this.context.globalCompositeOperation="source-in",this.context.filter=n,this.context.drawImage(t,0,0,r,i,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class z2 extends Jo{constructor(t){super(),this.radius=t}async render(t,e){return super.resizeCanvas(t),this.renderSilhouette(t,e),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(t,0,0,t.width,t.height),this.context.restore(),super.render(t,e)}}class O2 extends Jo{constructor(t){super(),this.radius=t}async render(t,e){return super.resizeCanvas(t),this.renderSilhouette(t,e,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(t,0,0,t.width,t.height),this.context.restore(),super.render(t,e)}}class P2 extends Jo{constructor(){super(...arguments),gt(this,"backgroundImage")}setBackgroundImage(t){this.backgroundImage=t}async render(t,e){return super.resizeCanvas(t),this.renderSilhouette(t,e),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,t.width,t.height),this.context.restore()),super.render(t,e)}}
|
|
1
|
+
var l2=Object.defineProperty,c2=(t,e,n)=>e in t?l2(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,gt=(t,e,n)=>(c2(t,"symbol"!=typeof e?e+"":e,n),n);function u2(){return new Promise(((t,e)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?e("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):t()}))}class nr{}function a2(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}nr.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},nr.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"};const ir=new WeakMap,gi=new WeakMap,jr=new WeakMap,Zo=Symbol("anyProducer"),hs=Promise.resolve(),Wi=Symbol("listenerAdded"),Vi=Symbol("listenerRemoved");let co=!1;function Sr(t){if("string"!=typeof t&&"symbol"!=typeof t)throw new TypeError("eventName must be a string or a symbol")}function oi(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Tr(t,e){const n=gi.get(t);return n.has(e)||n.set(e,new Set),n.get(e)}function Or(t,e){const n="string"==typeof e||"symbol"==typeof e?e:Zo,r=jr.get(t);return r.has(n)||r.set(n,new Set),r.get(n)}function d2(t,e,n){const r=jr.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Zo)){const t=Promise.all([e,n]);for(const e of r.get(Zo))e.enqueue(t)}}function fs(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e)Or(t,n).add(o);return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e)Or(t,n).delete(o);return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ms(t){if(void 0===t)return ps;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!ps.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const uo=t=>t===Wi||t===Vi;class Wr{static mixin(t,e){return e=ms(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Wr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){if("object"!=typeof process)return co;const{env:t}=process||{env:{}};return"emittery"===t.DEBUG||"*"===t.DEBUG||co}static set isDebugEnabled(t){co=t}constructor(t={}){ir.set(this,new Set),gi.set(this,new Map),jr.set(this,new Map),this.debug=t.debug||{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}"symbol"==typeof n&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Wr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){oi(e),t=Array.isArray(t)?t:[t];for(const n of t)Sr(n),Tr(this,n).add(e),this.logIfDebugEnabled("subscribe",n,void 0),uo(n)||this.emit(Wi,{eventName:n,listener:e});return this.off.bind(this,t,e)}off(t,e){oi(e),t=Array.isArray(t)?t:[t];for(const n of t)Sr(n),Tr(this,n).delete(e),this.logIfDebugEnabled("unsubscribe",n,void 0),uo(n)||this.emit(Vi,{eventName:n,listener:e})}once(t){return new Promise((e=>{const n=this.on(t,(t=>{n(),e(t)}))}))}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Sr(e);return fs(this,t)}async emit(t,e){Sr(t),this.logIfDebugEnabled("emit",t,e),d2(this,t,e);const n=Tr(this,t),r=ir.get(this),i=[...n],o=uo(t)?[]:[...r];await hs,await Promise.all([...i.map((async t=>{if(n.has(t))return t(e)})),...o.map((async n=>{if(r.has(n))return n(t,e)}))])}async emitSerial(t,e){Sr(t),this.logIfDebugEnabled("emitSerial",t,e);const n=Tr(this,t),r=ir.get(this),i=[...n],o=[...r];await hs;for(const t of i)n.has(t)&&await t(e);for(const n of o)r.has(n)&&await n(t,e)}onAny(t){return oi(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ir.get(this).add(t),this.emit(Wi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return fs(this)}offAny(t){oi(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Vi,{listener:t}),ir.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e){Tr(this,e).clear();const t=Or(this,e);for(const e of t)e.finish();t.clear()}else{ir.get(this).clear();for(const t of gi.get(this).values())t.clear();for(const t of jr.get(this).values()){for(const e of t)e.finish();t.clear()}}}listenerCount(t){t=Array.isArray(t)?t:[t];let e=0;for(const n of t)if("string"!=typeof n){typeof n<"u"&&Sr(n),e+=ir.get(this).size;for(const t of gi.get(this).values())e+=t.size;for(const t of jr.get(this).values())e+=t.size}else e+=ir.get(this).size+Tr(this,n).size+Or(this,n).size+Or(this).size;return e}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=ms(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const ps=Object.getOwnPropertyNames(Wr.prototype).filter((t=>"constructor"!==t));Object.defineProperty(Wr,"listenerAdded",{value:Wi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Wr,"listenerRemoved",{value:Vi,writable:!1,enumerable:!0,configurable:!1});var h2=Wr;const wo=a2(h2);function f2(t){return"object"==typeof t&&null!==t&&"message"in t&&"string"==typeof t.message}function m2(t){if(f2(t))return t;try{return new Error(JSON.stringify(t))}catch{return new Error(String(t))}}function ao(t){return m2(t).message}var p2=Object.defineProperty,b2=(t,e,n)=>e in t?p2(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,y2=(t,e,n)=>(b2(t,"symbol"!=typeof e?e+"":e,n),n);const g2="hlg.tokbox.com/prod/logging/vcp_webrtc",Z2="https://",v2=1e4;let si;const G2=new Uint8Array(16);function X2(){if(!si&&(si=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!si))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return si(G2)}const Un=[];for(let t=0;t<256;++t)Un.push((t+256).toString(16).slice(1));function W2(t,e=0){return(Un[t[e+0]]+Un[t[e+1]]+Un[t[e+2]]+Un[t[e+3]]+"-"+Un[t[e+4]]+Un[t[e+5]]+"-"+Un[t[e+6]]+Un[t[e+7]]+"-"+Un[t[e+8]]+Un[t[e+9]]+"-"+Un[t[e+10]]+Un[t[e+11]]+Un[t[e+12]]+Un[t[e+13]]+Un[t[e+14]]+Un[t[e+15]]).toLowerCase()}const V2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),bs={randomUUID:V2};function R2(t,e,n){if(bs.randomUUID&&!e&&!t)return bs.randomUUID();const r=(t=t||{}).random||(t.rng||X2)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return W2(r)}function Lo(t,e){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let n=globalThis.vonage.workerizer;return n[t]||(n[t]=e),n[t]}const cr=Lo("globals",{});var vr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(vr||{});function zs(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let x2=0;function I2(t,e,n,r,i){const o=x2++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>zs(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function ti(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>zs(t))))}const ys=Lo("workerized",{});function js(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function S2(){if(js())ti({type:vr.GLOBALS_SYNC},cr);else{const t=[];for(const e in ys){const{worker:n,resolvers:r}=ys[e].workerContext;n&&t.push(I2(n,vr.GLOBALS_SYNC,"",[cr],r))}await Promise.all(t)}}function Ri(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Ri(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Ri(t[n],e[n])):e[n]=t[n]}async function T2(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;ti(t,await e.instance[n](...null!=r?r:[]))}const Y2=Lo("registeredWorkers",{});function w2(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=Y2[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Ri(r,cr),ti(t,void 0!==typeof e.instance)}async function L2(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),ti(t,r)}function F2(t){if(!t.args)throw"Missing globals while syncing";Ri(t.args[0],cr),ti(t,{})}function C2(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case vr.INIT:w2(n,t);break;case vr.FORWARD:T2(n,t);break;case vr.TERMINATE:L2(n,t);break;case vr.GLOBALS_SYNC:F2(n)}}}function H2(t,e){return cr[t]||(cr[t]=e),[()=>cr[t],async e=>{cr[t]=e,await S2()}]}function J2(t,e){return H2(t,e)}js()&&C2();const[N2,k2]=J2("metadata");function E2(t){k2(t)}function Zi(){return N2()}class Fo{constructor(t,e){y2(this,"uuid"),this.config=t,this.uuid=null!=e?e:R2()}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=Zi())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),v2);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=Zi().proxyUrl)?t:Z2;return e+=("/"===e.at(-1)?"":"/")+g2,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=Zi();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const vi="2.0.4";class U2{constructor(t,e){this.config=t,this.frameTransformedCount=0,this.frameFromSourceCount=0,this.startAt=0,this.reporter=new Fo(t,e)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:t,frameFromSourceCount:e}=this;return e/((Date.now()-t)/1e3)}async onFrameTransformed(t={},e=!1){0===this.startAt&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:n,frameTransformedCount:r,frameFromSourceCount:i}=this,o=Date.now(),a=(o-n)/1e3,l=r/a,s=i/a;return e||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=o,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:s,transformedFps:l,framesTransformed:r,...t})):"success"}}var B2=(t=>(t.FPS_DROP="fps_drop",t))(B2||{}),K2=(t=>(t.start="start",t.transform="transform",t.flush="flush",t))(K2||{}),vo=(t=>(t.pipeline_ended="pipeline_ended",t.pipeline_ended_with_error="pipeline_ended_with_error",t.pipeline_started="pipeline_started",t.pipeline_started_with_error="pipeline_started_with_error",t.pipeline_restarted="pipeline_restarted",t.pipeline_restarted_with_error="pipeline_restarted_with_error",t))(vo||{});const M2=500,A2=.8;class z2 extends wo{constructor(t,e){super(),this.reporter_=new Fo,this.reporterQos_=new U2({loggingIntervalFrameCount:M2,report:{version:vi}}),this.index_=e,this.transformer_=t,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in t&&(this.transformerType_=t.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t}async start(t){if(this.controller_=t,this.transformer_&&"function"==typeof this.transformer_.start)try{await this.transformer_.start(t)}catch(t){this.report({message:nr.errors.transformer_start,variation:"Error",error:ao(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"start"};this.emit("error",e)}}async transform(t,e){var n,r,i,o;if(0===this.mediaTransformerQosReportStartTimestamp_&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),t instanceof VideoFrame&&(this.videoHeight_=null!=(n=null==t?void 0:t.displayHeight)?n:0,this.videoWidth_=null!=(r=null==t?void 0:t.displayWidth)?r:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),t.close(),this.flush(e),e.terminate();else{try{await(null==(o=(i=this.transformer_).transform)?void 0:o.call(i,t,e)),this.reportQos()}catch(t){this.report({message:nr.errors.transformer_transform,variation:"Error",error:ao(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"transform"};this.emit("error",e)}if(-1!=this.trackExpectedRate_&&this.trackExpectedRate_*A2>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(t){if(this.transformer_&&"function"==typeof this.transformer_.flush&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(t)}catch(t){this.report({message:nr.errors.transformer_flush,variation:"Error",error:ao(t)});const e={eventMetaData:{transformerIndex:this.index_},error:t,function:"flush"};this.emit("error",e)}}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(t){this.reporter_.send({version:vi,action:"MediaTransformer",transformerType:this.transformerType_,...t})}reportQos(t=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:vi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},t)}}class j2 extends wo{constructor(t){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let e=0;e<t.length;e++){let n=new z2(t[e],e);n.on("error",(t=>{this.emit("error",t)})),n.on("warn",(t=>{this.emit("warn",t)})),this.transformers_.push(n)}}setTrackExpectedRate(t){this.trackExpectedRate_=t;for(let t of this.transformers_)t.setTrackExpectedRate(this.trackExpectedRate_)}async start(t,e){if(this.transformers_&&0!==this.transformers_.length){try{let n=t;for(let e of this.transformers_)t=t.pipeThrough(new TransformStream(e));t.pipeTo(e).then((async()=>{console.log("[Pipeline] Setup."),await e.abort(),await n.cancel(),this.emit("pipelineInfo","pipeline_ended")})).catch((async r=>{t.cancel().then((()=>{console.log("[Pipeline] Shutting down streams after abort.")})).catch((t=>{console.error("[Pipeline] Error from stream transform:",t)})),await e.abort(r),await n.cancel(r),this.emit("pipelineInfo","pipeline_ended_with_error")}))}catch{return this.emit("pipelineInfo","pipeline_started_with_error"),void this.destroy()}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}else console.log("[Pipeline] No transformers.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let t of this.transformers_)t.stop()}}class O2 extends wo{constructor(){super(),this.reporter_=new Fo,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(t){this.trackExpectedRate_=t,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(t,e){return this.readable_=t,this.writable_=e,this.transformInternal()}transformInternal(){return new Promise((async(t,e)=>{if(!this.transformers_||0===this.transformers_.length)return this.report({message:nr.errors.transformer_none,variation:"Error"}),void e("[MediaProcessor] Need to set transformers.");if(!this.readable_)return this.report({variation:"Error",message:nr.errors.readable_null}),void e("[MediaProcessor] Readable is null.");if(!this.writable_)return this.report({variation:"Error",message:nr.errors.writable_null}),void e("[MediaProcessor] Writable is null.");let n=!1;this.pipeline_&&(n=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new j2(this.transformers_),this.pipeline_.on("warn",(t=>{this.emit("warn",t)})),this.pipeline_.on("error",(t=>{this.emit("error",t)})),this.pipeline_.on("pipelineInfo",(t=>{n&&("pipeline_started"===t?t=vo.pipeline_restarted:"pipeline_started_with_error"===t&&(t=vo.pipeline_restarted_with_error)),this.emit("pipelineInfo",t)})),-1!=this.trackExpectedRate_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then((()=>{t()})).catch((t=>{e(t)}))}))}setTransformers(t){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=t,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise((async t=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),t()}))}report(t){this.reporter_.send({version:vi,action:"MediaProcessor",...t})}}class P2{constructor(){this.processor_=null,this.generator_=null}init(t){return new Promise(((e,n)=>{try{this.processor_=new MediaStreamTrackProcessor(t)}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${t}`),n(t)}try{"audio"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):"video"===t.kind?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):n("kind not supported")}catch(t){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${t}`),n(t)}e()}))}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class _2{constructor(t){this.insertableStreamHelper_=new P2,this.mediaProcessor_=t}setTrack(t){return new Promise(((e,n)=>{this.insertableStreamHelper_.init(t).then((()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then((()=>{e(this.insertableStreamHelper_.getProccesorTrack())})).catch((t=>{n(t)}))})).catch((t=>{n(t)}))}))}destroy(){return new Promise(((t,e)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then((()=>{t()})).catch((t=>{e(t)})):e("no processor")}))}}var Gi=(t=>(t.Low="Low",t.High="High",t))(Gi||{}),Q2=(t=>(t.BackgroundBlur="BackgroundBlur",t.VirtualBackground="VirtualBackground",t.VideoBackground="VideoBackground",t.SilhouetteBlur="SilhouetteBlur",t))(Q2||{}),Go=(t=>(t.FAST="FAST",t.PRECISE="PRECISE",t))(Go||{}),xi=(t=>(t.CANVAS="CANVAS",t.WEBGL="WEBGL",t))(xi||{});const D2=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 $2=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(e){var n,r,i=typeof(e=e||{})<"u"?e:{};i.ready=new Promise((function(t,e){n=t,r=e}));var o,a={};for(o in i)i.hasOwnProperty(o)&&(a[o]=i[o]);var l,s="./this.program",c=function(t,e){throw e},u=!0,d="";typeof document<"u"&&document.currentScript&&(d=document.currentScript.src),t&&(d=t),d=0!==d.indexOf("blob:")?d.substr(0,d.replace(/[?#].*/,"").lastIndexOf("/")+1):"";var h,m=i.print||console.log.bind(console),b=i.printErr||console.warn.bind(console);for(o in a)a.hasOwnProperty(o)&&(i[o]=a[o]);a=null,i.arguments&&i.arguments,i.thisProgram&&(s=i.thisProgram),i.quit&&(c=i.quit),i.wasmBinary&&(h=i.wasmBinary);var p=i.noExitRuntime||!0;"object"!=typeof WebAssembly&&C("no native wasm support detected");var f,g,y,Z,v,G=!1,X=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function W(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.subarray&&X)return X.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var l=63&t[e++];if(192!=(224&a)){var s=63&t[e++];if((a=224==(240&a)?(15&a)<<12|l<<6|s:(7&a)<<18|l<<12|s<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|l)}else o+=String.fromCharCode(a)}return o}function V(t,e){return t?W(Z,t,e):""}function R(t,e){return t%e>0&&(t+=e-t%e),t}function x(t){g=t,i.HEAP8=y=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=v=new Int32Array(t),i.HEAPU8=Z=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}i.INITIAL_MEMORY;var I,w=[],S=[],Y=[],L=0;var H=0,F=null;function C(t){i.onAbort&&i.onAbort(t),b(t="Aborted("+t+")"),G=!0,t+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}i.preloadedImages={},i.preloadedAudios={};var T,k,J,N="data:application/octet-stream;base64,";function K(t){return t.startsWith(N)}function B(t){try{if(t==T&&h)return new Uint8Array(h);if(!l)throw"both async and sync fetching of the wasm failed"}catch(t){C(t)}}function z(t){for(;t.length>0;){var e=t.shift();if("function"!=typeof e){var n=e.func;"number"==typeof n?void 0===e.arg?I.get(n)():I.get(n)(e.arg):n(void 0===e.arg?null:e.arg)}else e(i)}}K(T="tflite-simd.wasm")||(k=T,T=i.locateFile?i.locateFile(k,d):d+k),J=function(){return performance.now()};function U(t){try{return f.grow(t-g.byteLength+65535>>>16),x(f.buffer),1}catch{}}var j={};function M(){if(!M.strings){var t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:s||"./this.program"};for(var e in j)void 0===j[e]?delete t[e]:t[e]=j[e];var n=[];for(var e in t)n.push(e+"="+t[e]);M.strings=n}return M.strings}var E={mappings:{},buffers:[null,[],[]],printChar:function(t,e){var n=E.buffers[t];0===e||10===e?((1===t?m:b)(W(n,0)),n.length=0):n.push(e)},varargs:void 0,get:function(){return E.varargs+=4,v[E.varargs-4>>2]},getStr:function(t){return V(t)},get64:function(t,e){return t}};var A={a:function(t,e,n,r){C("Assertion failed: "+V(t)+", at: "+[e?V(e):"unknown filename",n,r?V(r):"unknown function"])},e:function(t,e){C("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},d:function(t,e){C("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},b:function(){C("")},n:function(t,e){var n;if(0===t)n=Date.now();else{if(1!==t&&4!==t)return function(t){v[P()>>2]=t}(28),-1;n=J()}return v[e>>2]=n/1e3|0,v[e+4>>2]=n%1e3*1e3*1e3|0,0},h:function(){return 2147483648},l:function(t,e,n){Z.copyWithin(t,e,e+n)},m:function(t){var e=Z.length,n=2147483648;if((t>>>=0)>n)return!1;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),U(Math.min(n,R(Math.max(t,i),65536))))return!0}return!1},p:function(t){for(var e=J();J()-e<t;);},f:function(t,e){var n=0;return M().forEach((function(r,i){var o=e+n;v[t+4*i>>2]=o,function(t,e,n){for(var r=0;r<t.length;++r)y[e++>>0]=t.charCodeAt(r);n||(y[e>>0]=0)}(r,o),n+=r.length+1})),0},g:function(t,e){var n=M();v[t>>2]=n.length;var r=0;return n.forEach((function(t){r+=t.length+1})),v[e>>2]=r,0},j:function(t){!function(t,e){!function(t){p||L>0||(i.onExit&&i.onExit(t),G=!0),c(t,new Q(t))}(t)}(t)},i:function(t){return 0},k:function(t,e,n,r,i){},c:function(t,e,n,r){for(var i=0,o=0;o<n;o++){for(var a=v[e+8*o>>2],l=v[e+(8*o+4)>>2],s=0;s<l;s++)E.printChar(t,Z[a+s]);i+=l}return v[r>>2]=i,0},o:function t(e,n){t.randomDevice||(t.randomDevice=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var t=new Uint8Array(1);return function(){return crypto.getRandomValues(t),t[0]}}return function(){C("randomDevice")}}());for(var r=0;r<n;r++)y[e+r>>0]=t.randomDevice();return 0}};(function(){var t={a:A};function e(t,e){var n=t.exports;i.asm=n,x((f=i.asm.q).buffer),I=i.asm.E,function(t){S.unshift(t)}(i.asm.r),function(t){if(H--,i.monitorRunDependencies&&i.monitorRunDependencies(H),0==H&&F){var e=F;F=null,e()}}()}function n(t){e(t.instance)}function o(e){return(!h&&u&&"function"==typeof fetch?fetch(T,{credentials:"same-origin"}).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+T+"'";return t.arrayBuffer()})).catch((function(){return B(T)})):Promise.resolve().then((function(){return B(T)}))).then((function(e){return WebAssembly.instantiate(e,t)})).then((function(t){return t})).then(e,(function(t){b("failed to asynchronously prepare wasm: "+t),C(t)}))}if(H++,i.monitorRunDependencies&&i.monitorRunDependencies(H),i.instantiateWasm)try{return i.instantiateWasm(t,e)}catch(t){return b("Module.instantiateWasm callback failed with error: "+t),!1}(h||"function"!=typeof WebAssembly.instantiateStreaming||K(T)||"function"!=typeof fetch?o(n):fetch(T,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(n,(function(t){return b("wasm streaming compile failed: "+t),b("falling back to ArrayBuffer instantiation"),o(n)}))}))).catch(r)})(),i.___wasm_call_ctors=function(){return(i.___wasm_call_ctors=i.asm.r).apply(null,arguments)},i._getModelBufferMemoryOffset=function(){return(i._getModelBufferMemoryOffset=i.asm.s).apply(null,arguments)},i._getInputMemoryOffset=function(){return(i._getInputMemoryOffset=i.asm.t).apply(null,arguments)},i._getInputHeight=function(){return(i._getInputHeight=i.asm.u).apply(null,arguments)},i._getInputWidth=function(){return(i._getInputWidth=i.asm.v).apply(null,arguments)},i._getInputChannelCount=function(){return(i._getInputChannelCount=i.asm.w).apply(null,arguments)},i._getOutputMemoryOffset=function(){return(i._getOutputMemoryOffset=i.asm.x).apply(null,arguments)},i._getOutputHeight=function(){return(i._getOutputHeight=i.asm.y).apply(null,arguments)},i._getOutputWidth=function(){return(i._getOutputWidth=i.asm.z).apply(null,arguments)},i._getOutputChannelCount=function(){return(i._getOutputChannelCount=i.asm.A).apply(null,arguments)},i._loadModel=function(){return(i._loadModel=i.asm.B).apply(null,arguments)},i._runInference=function(){return(i._runInference=i.asm.C).apply(null,arguments)},i._isGPUEnabled=function(){return(i._isGPUEnabled=i.asm.D).apply(null,arguments)};var O,P=i.___errno_location=function(){return(P=i.___errno_location=i.asm.F).apply(null,arguments)};function Q(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}function _(t){function e(){O||(O=!0,i.calledRun=!0,!G&&(z(S),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),Y.unshift(t);var t;z(Y)}()))}H>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),w.unshift(t);var t;z(w)}(),H>0)||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),e()}),1)):e())}if(F=function t(){O||_(),O||(F=t)},i.run=_,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return _(),e.ready}}();class q2{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 tc="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",ec="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function nc(t=tc,e=ec){let n=new q2;return new Promise((function(r,i){(async function(){return $2({locateFile:function(e){return t+e}})})().then((t=>{if(null===t)throw console.error("loadTFLite null"),"loadTFLite null";(async function(t){return new Promise((async(r,i)=>{const o=t;if(typeof o>"u")return i("TFLite backend unavailable: wasmSimd");const a="selfie_segmentation_landscape";console.log("Loading tflite model:",a);let l=e+`${a}.tflite`;console.log("TFLite modelUrl: "+l);try{const t=await(await fetch(l)).arrayBuffer();console.log("Model buffer size:",t.byteLength);const e=o._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",e),console.log("Loading model buffer..."),o.HEAPU8.set(new Uint8Array(t),e);const r=o._loadModel(t.byteLength);if(console.log("Load model result:",r),0!==r)return void i("Cannot load model");n.inputWidth=o._getInputWidth(),n.inputHeight=o._getInputHeight(),n.inputChannelCount=o._getInputChannelCount(),n.inputMemoryOffset=o._getInputMemoryOffset(),console.log("Input memory offset:",n.inputMemoryOffset),console.log("Input height:",n.inputHeight),console.log("Input width:",n.inputWidth),console.log("Input channels:",n.inputChannelCount),n.outputMemoryOffset=o._getOutputMemoryOffset(),n.outputWidth=o._getOutputWidth(),n.outputHeight=o._getOutputHeight(),n.outputChannelCount=o._getOutputChannelCount(),console.log("Output memory offset:",n.outputMemoryOffset),console.log("Output height:",n.outputHeight),console.log("Output width:",n.outputWidth),console.log("Output channels:",n.outputChannelCount),n.selectedTFLite=o}catch(t){return void i(t)}r()}))})(t).then((t=>{r(n)})).catch((t=>{console.error("loadTFLiteModel error"),i("loadTFLiteModel error")}))})).catch((t=>{console.error("loadTFLite error:",t),i("loadTFLite error:"+t)}))}))}class Os{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(t,e){await this.initWasm(t,e),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(t,e){this.infos=await nc(t,e)}getOutputDimensions(){var t,e,n,r;return{width:null!=(e=null==(t=this.infos)?void 0:t.outputWidth)?e:0,height:null!=(r=null==(n=this.infos)?void 0:n.outputHeight)?r:0}}async process(t){if(!this.mask||!this.infos)return;const e=this.infos.inputWidth,n=this.infos.inputHeight;this.context.drawImage(t,0,0,t.width,t.height,0,0,e,n);const r=this.context.getImageData(0,0,e,n),i=this.infos.selectedTFLite.HEAPF32;for(let t=0;t<this.pixelCount;t++){const e=this.inputOffset+3*t;i[e]=r.data[4*t]/255,i[e+1]=r.data[4*t+1]/255,i[e+2]=r.data[4*t+2]/255}this.infos.selectedTFLite._runInference();for(let t=0;t<this.pixelCount;t++){const e=this.infos.selectedTFLite.HEAPF32[this.outputOffset+t];this.mask.data[4*t]=this.mask.data[4*t+3]=255*e}return createImageBitmap(this.mask)}isGpuSupported(){var t,e,n;return null!=(n=null==(e=null==(t=this.infos)?void 0:t.selectedTFLite)?void 0:e._isGPUEnabled())&&n}}async function K3(t,e){const{wasm:n,insertableStreams:r,simd:i,webgl:o}=await rc(t,e);if(!n.supported)throw n.message;if(!r.supported)throw r.message;if(!i.supported)throw i.message;if(!o.supported)throw o.message}async function rc(t,e){const n=new Os;await n.initWasm(t,e);const r={wasm:{supported:"object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate,message:"Your browser does not support WebAssembly features."},simd:{supported:await D2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:n.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:ic(),performance:Ps()};try{await u2()}catch(t){r.insertableStreams.supported=!1,r.insertableStreams.message=t}return r}function ic(){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 Ps(){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 Ii={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function b(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new b,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}b.prototype.o=function(t){this.h=t},b.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,S=typeof TextDecoder<"u",Y=typeof TextEncoder<"u";function L(t){if(Y)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},F=null;function C(t,e){void 0===e&&(e=0),k(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=F[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!F){F={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===F[o]&&(F[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var B=0;function z(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=e,t&&U(this,t)}function U(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.j=0,t.i=t.h.length,t.g=t.j}function j(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&t.g++,r)))))}function M(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,t=2*((n=(e<<0|n<<8|r<<16|i<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))}z.prototype.reset=function(){this.g=this.j};var E=[];function A(){this.g=new Uint8Array(64),this.h=0}function O(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function P(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,E.length?(n=E.pop(),e&&(n.v=e.v),t&&U(n,t),t=n):t=new z(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function Q(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.m=t.g.g;var n=7&(e=j(t.g));return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function _(t){switch(t.h){case 0:if(0!=t.h)_(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?_(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)_(t);else{var e=j(t.g);(t=t.g).g+=e}break;case 5:5!=t.h?_(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!Q(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}_(t)}break;default:t.j=!0}}function D(t,e,n){var r=t.g.i,i=j(t.g);return i=t.g.g+i,t.g.i=i,n(e,t),t.g.g=i,t.g.i=r,e}function $(t){var e,n=j(t.g),r=(t=t.g).g;if(t.g+=n,t=t.h,S)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function q(){this.h=[],this.i=0,this.g=new A}function tt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function et(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function nt(t,e,n){if(null!=n){O(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?B=0:(0,B=2147483648):isNaN(r)?(0,B=2147483647):34028234663852886e22<r?(0,B=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,B=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),r=8388607&Math.round(8388608*r),0,B=(n<<31|e+127<<23|r)>>>0),n=B,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}A.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},A.prototype.length=function(){return this.h},A.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},P.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var rt="function"==typeof Uint8Array;function it(t,e,n){if(null!=t)return"object"==typeof t?rt&&t instanceof Uint8Array?n(t):ot(t,e,n):e(t)}function ot(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=it(t[i],e,n);return Array.isArray(t)&&t.W&&ct(r),r}for(i in r={},t)r[i]=it(t[i],e,n);return r}function at(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var lt,st={W:{value:!0,configurable:!0}};function ct(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,st),t}function ut(t,e,n){var r=lt;if(lt=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.i=null,this.g=t,t=(r=this.g.length)-1,r&&null!==(r=this.g[t])&&"object"==typeof r&&r.constructor===Object?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ct(r):this.g[t]=dt):(ht(this),(r=this.h[t])?ct(r):this.h[t]=dt)}var dt=Object.freeze(ct([]));function ht(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function mt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function bt(t){var e=void 0!==e&&e,n=mt(t,1,e);return null==n&&(n=dt),n===dt&&ft(t,1,n=ct([]),e),n}function pt(t,e,n){return null==(t=null==(t=mt(t,e))?t:+t)?void 0===n?0:n:t}function ft(t,e,n,r){void 0!==r&&r||e>=t.l?(ht(t),t.h[e]=n):t.g[e+t.j]=n}function gt(t,e){t.i||(t.i={});var n=t.i[1];if(!n){var r=bt(t);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.i[1]=n}return n}function yt(t,e,n,r){var i=gt(t,n);e=e||new n,t=bt(t),null!=r?(i.splice(r,0,e),t.splice(r,0,Zt(e))):(i.push(e),t.push(Zt(e)))}function Zt(t,e){if(t.i)for(var n in t.i){var r=t.i[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Zt(r[i]);else r&&Zt(r)}return t.g}function vt(t,e){return null==(t=mt(t,e))?0:t}function Gt(t,e){return null==(t=mt(t,e))?"":t}function Xt(t,e){if(t=t.m){tt(e,e.g.end());for(var n=0;n<t.length;n++)tt(e,t[n])}}function Wt(t,e){if(4==e.h)return!1;var n=e.m;return _(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.m)?n.push(e):t.m=[e]),!0}function Vt(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Rt(t){ut.call(this,t)}function xt(t,e){for(;Q(e);)switch(e.i){case 8:var n=j(e.g);ft(t,1,n);break;case 21:ft(t,2,n=M(e.g));break;case 26:ft(t,3,n=$(e));break;case 34:ft(t,4,n=$(e));break;default:if(!Wt(t,e))return t}return t}function It(t){ut.call(this,t,-1,wt)}ut.prototype.toJSON=function(){return ot(Zt(this),at,C)},ut.prototype.toString=function(){return Zt(this).toString()},m(Rt,ut),m(It,ut),It.prototype.addClassification=function(t,e){yt(this,t,Rt,e)};var wt=[1];function St(t){ut.call(this,t)}function Yt(t,e){for(;Q(e);)switch(e.i){case 13:var n=M(e.g);ft(t,1,n);break;case 21:ft(t,2,n=M(e.g));break;case 29:ft(t,3,n=M(e.g));break;case 37:ft(t,4,n=M(e.g));break;case 45:ft(t,5,n=M(e.g));break;default:if(!Wt(t,e))return t}return t}function Lt(t){ut.call(this,t,-1,Ht)}m(St,ut),m(Lt,ut);var Ht=[1];function Ft(t){ut.call(this,t)}function Ct(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Tt(t){return gt(t,Rt).map((function(t){return{index:vt(t,1),Y:pt(t,2),label:null!=mt(t,3)?Gt(t,3):void 0,displayName:null!=mt(t,4)?Gt(t,4):void 0}}))}function kt(t){return{x:pt(t,1),y:pt(t,2),z:pt(t,3),visibility:null!=mt(t,4)?pt(t,4):void 0}}function Jt(t,e){this.h=t,this.g=e,this.l=0}function Nt(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=Ct(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ct(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Kt(t){this.g=t}m(Ft,ut);var Bt=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 zt(t,e){return e+t}function Ut(t,e){window[t]=e}function jt(t){if(this.g=t,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=t&&t.locateFile||zt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Mt(t){return Vt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Vt(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Bt),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return Ut("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),Ut("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=Et(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Vt(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Vt(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,Et(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function Et(t,e){return Vt(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function At(t,e,n){return Vt(t,(function t(){var r,i,o,l,s,c,u,d,h,m,b,p,f,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(t,function(t,e,n){return Vt(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Jt(i.h,i.D),i.s[e]=r),t.return(Nt(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new Ft;for(x=new P(x);Q(x);)switch(x.i){case 13:var w=M(x.g);ft(I,1,w);break;case 21:ft(I,2,w=M(x.g));break;case 29:ft(I,3,w=M(x.g));break;case 37:ft(I,4,w=M(x.g));break;case 45:ft(I,5,w=M(x.g));break;case 48:for(var S=x.g,Y=128,L=0,H=w=0;4>H&&128<=Y;H++)L|=(127&(Y=S.h[S.g++]))<<7*H;if(128<=Y&&(L|=(127&(Y=S.h[S.g++]))<<28,w|=(127&Y)>>4),128<=Y)for(H=0;5>H&&128<=Y;H++)w|=(127&(Y=S.h[S.g++]))<<7*H+3;128>Y?(S=L>>>0,(w=2147483648&(Y=w>>>0))&&(Y=~Y>>>0,0==(S=1+~S>>>0)&&(Y=Y+1>>>0)),S=4294967296*Y+(S>>>0),w=w?-S:S):(S.l=!0,w=void 0),ft(I,6,w);break;default:if(!Wt(I,x))break t}}I={Z:pt(I,1),$:pt(I,2),height:pt(I,3),width:pt(I,4),rotation:pt(I,5,0),X:vt(I,6)},w=G.get(R);t:for(x=new Lt,w=new P(w);Q(w);)if(10===w.i)yt(x,S=D(w,new St,Yt),St,void 0);else if(!Wt(x,w))break t;x=gt(x,St).map(kt),S=W.get(R);t:for(w=new It,S=new P(S);Q(S);)if(10===S.i)w.addClassification(D(S,new Rt,xt));else if(!Wt(w,S))break t;I={T:I,O:x,M:Tt(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(b=Z.s[d])||(b=new Jt(Z.h,Z.D),Z.s[d]=b),g(t,Nt(b,m,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:f[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function Ot(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=At(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Pt(t){return 1===(void 0===t&&(t=0),t)?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function Qt(t){var e=this;t=t||{},this.g=new jt({locateFile:t.locateFile,files:function(t){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Pt(t.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(t){return Vt(e,(function e(){var n,r,i,o=this;return X(e,(function(e){return 1==e.g?(n=Pt(t),r="third_party/mediapipe/modules/selfie_segmentation/"+n,g(e,Et(o.g,n),2)):(i=e.h,o.g.overrideFile(r,i),e.return(!0))}))}))}}}})}(t=jt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Vt(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,Mt(e),2):3!=t.g?g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,Et(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ot(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Vt(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Vt(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var b=m,p=t[s];switch(c.type){case"video":var f=b.m[c.stream];if(f||(f=new Jt(b.h,b.D),b.m[c.stream]=f),0===(b=f).l&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;f=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,f=p.naturalHeight):(y=p.width,f=p.height);f={glName:b.l,width:y,height:f},(y=b.g).canvas.width=f.width,y.canvas.height=f.height,y.activeTexture(y.TEXTURE0),b.h.bindTexture2d(b.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),b.h.bindTexture2d(0),b=f;break t;case"detections":for((f=b.m[c.stream])||(f=new Kt(b.h),b.m[c.stream]=f),(b=f).data||(b.data=new b.g.DetectionListData),b.data.reset(p.length),f=0;f<p.length;++f){y=p[f];var Z=b.data,v=Z.setBoundingBox,G=f,X=y.T,W=new Ft;ft(W,1,X.Z),ft(W,2,X.$),ft(W,3,X.height),ft(W,4,X.width),ft(W,5,X.rotation),ft(W,6,X.X);var V=X=new q;nt(V,1,mt(W,1)),nt(V,2,mt(W,2)),nt(V,3,mt(W,3)),nt(V,4,mt(W,4)),nt(V,5,mt(W,5));var R=mt(W,6);if(null!=R&&null!=R){O(V.g,48);var x=V.g,I=R;R=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),R=B=w,w=I;0<w||127<R;)x.push(127&R|128),R=(R>>>7|w<<25)>>>0,w>>>=7;x.push(R)}if(Xt(W,V),X=et(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=b.data).addNormalizedLandmark,X=f,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),ft(V=new St,1,W.x),ft(V,2,W.y),ft(V,3,W.z),W.visibility&&ft(V,4,W.visibility),nt(x=W=new q,1,mt(V,1)),nt(x,2,mt(V,2)),nt(x,3,mt(V,3)),nt(x,4,mt(V,4)),nt(x,5,mt(V,5)),Xt(V,x),W=et(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=b.data).addClassification,X=f,W=y.M[Z],ft(V=new Rt,2,W.Y),W.index&&ft(V,1,W.index),W.label&&ft(V,3,W.label),W.displayName&&ft(V,4,W.displayName),x=W=new q,null!=(w=mt(V,1))&&null!=w)if(O(x.g,8),R=x.g,0<=w)O(R,w);else{for(I=0;9>I;I++)R.push(127&w|128),w>>=7;R.push(1)}nt(x,2,mt(V,2)),null!=(R=mt(V,3))&&(R=L(R),O(x.g,26),O(x.g,R.length),tt(x,x.g.end()),tt(x,R)),null!=(R=mt(V,4))&&(R=L(R),O(x.g,34),O(x.g,R.length),tt(x,x.g.end()),tt(x,R)),Xt(V,x),W=et(W),G.call(v,X,W)}}b=b.data;break t;default:b={}}}switch(u=b,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",jt),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qt.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Vt(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Vt(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("SelfieSegmentation",Qt),R("VERSION","0.1.1632777926")}).call(Ii);const Si={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ra=e.prototype}function b(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={fa:e,ga:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new b,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ga)throw e.fa;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}b.prototype.s=function(t){this.h=t},b.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,S,Y=typeof TextDecoder<"u",L=typeof TextEncoder<"u",H={},F=null;function C(t){var e;void 0===e&&(e=0),k(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=F[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!F){F={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===F[o]&&(F[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function B(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var z="function"==typeof Uint8Array.prototype.slice,U=0;function j(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===B)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw j(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw j(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,bt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function ft(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=ft(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=ft(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=ft(t,e))?0:t}function Wt(t,e){return null==(t=ft(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?wt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return C(t);if(t instanceof B){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?C(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return K(t)?new Uint8Array(t):t}function St(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function Yt(){St.apply(this,arguments)}if(St.prototype.toJSON=function(){return Vt(this.m)},St.prototype.toString=function(){return this.m.toString()},m(Yt,St),bt){var Lt={};Object.defineProperties(Yt,(Lt[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Lt))}function Ht(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ja;a||(i.F=o.pa||o.ha.P,o.ba?(i.U=Kt(o.ba),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.da?(i.T=Bt(o.X.g,o.da),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ja=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ca){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ft=Symbol();function Ct(t,e,n){return t[Ft]||(t[Ft]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Ft];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ft]=e}return e}function kt(t){var e=function(t){var e=t.ba;return e?Tt(e):(e=t.oa)?Ct(t.X.g,e,t.da):void 0}(t),n=t.X,r=t.ha.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Bt(t,e){var n=t[Nt];return n||(n=function(t,n){return Ht(t,n,e)},t[Nt]=n),n}var zt=Symbol();function Ut(t,e){t.push(e)}function jt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Bt(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[zt]||Jt(t,t[zt]=[],Ut,jt,Mt,Et)}var Ot=Symbol();function Pt(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Ct(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||Jt(t,t[Ot]={},Pt,Qt,_t,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):z?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ca)?o.push(i):r.ca=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ht(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,U=(n<<31|e+127<<23|8388607&r)>>>0),n=U,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=U=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,Y)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){var r=!1;if(r=void 0!==r&&r,L){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(S||(S=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){Yt.apply(this,arguments)}if(m(ce,Yt),bt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,pe)}function be(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function fe(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,fe,ge]}m(fe,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}function We(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ve(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),score:Zt(t,2),label:null!=ft(t,3)?Wt(t,3):void 0,displayName:null!=ft(t,4)?Wt(t,4):void 0}}))}function Re(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=ft(t,4)?Zt(t,4):void 0}}function xe(t){return t.map((function(t){return vt(te(t,ye,Ze),fe,1).map(Re)}))}function Ie(t,e){this.h=t,this.g=e,this.l=0}function we(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=We(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=We(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),qa:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Se(t){this.g=t}m(Ge,ce);var Ye=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 Le(t,e){return e+t}function He(t,e){window[t]=e}function Fe(t){if(this.g=t,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=t&&t.locateFile||Le,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.aa=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ce(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.$?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(Ye),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return He("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),He("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Te(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.aa)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Te(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.aa)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.$=!1,m.g=0}}))}function Te(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function ke(t,e,n){var r,i,o,l,s,c,u,d,h,m,b,p,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Ie(t.h,t.G),t.u[e]=r),i.return(we(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={ea:{ka:Zt(x,1),la:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),ia:Xt(x,6)},Y:vt(te(G.get(R),ye,Ze),fe,1).map(Re),V:Ve(te(W.get(R),me,be))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(b=t.u[d])||(b=new Ie(t.h,t.G),t.u[d]=b),g(Z,we(b,m,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Je(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=ke(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ne(t){return void 0===t&&(t=0),1===t?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ke(t){var e=this;t=t||{},this.g=new Fe({locateFile:t.locateFile,files:function(t){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:Ne(t.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:xe},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:xe},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(t){return t.map((function(t){return Ve(te(t,me,be))[0]}))}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Ne(t),r="third_party/mediapipe/modules/hand_landmark/"+n,g(o,Te(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=Fe.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ce(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Z===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Z=t.g.graph.url,g(u,Te(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Je(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var b=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Ie(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&b instanceof HTMLVideoElement)var f=b.videoWidth,y=b.videoHeight;else typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(f=b.naturalWidth,y=b.naturalHeight):(f=b.width,y=b.height);y={glName:p.l,width:f,height:y},(f=p.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),p.h.bindTexture2d(p.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,b),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new Se(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(b.length),y=0;y<b.length;++y){f=b[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=f.ea,W=new Ge;if(gt(W,1,X.ka),gt(W,2,X.la),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.ia),X=ne(W,Xe),v.call(Z,G,X),f.Y)for(Z=0;Z<f.Y.length;++Z){var V=!!(W=f.Y[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new fe,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(f.V)for(Z=0;Z<f.V.length;++Z)G=(v=p.data).addClassification,X=y,W=f.V[Z],gt(V=new de,2,W.score),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Fe),R("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Ke.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Hands",Ke),R("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]]),R("VERSION","0.4.1646424915")}).call(Si);var Ti={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.da=e.prototype}function b(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new b,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}b.prototype.o=function(t){this.h=t},b.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){x(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,L,H=typeof TextDecoder<"u",F=typeof TextEncoder<"u";function C(t){if(F)t=(L||(L=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var B,z="function"==typeof Uint8Array;function U(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}U.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:z&&t instanceof Uint8Array?J(t):null;return t};var j="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?B||(B=new Uint8Array(0)):j?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===U){if(null==t.g)var e=B||(B=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||z&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.m=0,t.i=t.h.length,t.g=t.m}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.l=!0,w()}function Q(t){t.g>t.i&&(t.l=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}A.prototype.reset=function(){this.g=this.m},A.prototype.j=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,Q(this),n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,Q(this),n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,Q(this),n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,Q(this),n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,Q(this),n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]?(this.l=!0,w(),n):(Q(this),n))))))},A.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,Q(this),t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).l||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=t.g.j();return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.l=!0,w()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?nt(t):(e=t.g.j(),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.o)?n.push(t):e.o=[t])}function it(t,e,n){var r=t.g.i,i=t.g.j(),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}function ot(t,e,n){var r=t.g.j();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new D}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){q(t.g,8*e+2),q(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t,e){Object.isFrozen(t)||(dt?t[dt]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function mt(t){return t?null==(e=dt?t[dt]:t.g)?0:e:0;var e}function bt(t){return Array.isArray(t)&&ht(t,1),t}function pt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ht(t,2)}function ft(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function gt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return z&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function yt(t,e){if(null!=t)return Array.isArray(t)||ft(t)?Zt(t,e):e(t)}function Zt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=yt(t[r],e);return 1&mt(t)&&bt(n),n}for(r in n={},t)n[r]=yt(t[r],e);return n}function vt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ba,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,r&&ft(r=this.h[t])?(this.l=t-this.j,this.i=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?bt(r):this.h[t]=Xt):(Wt(this),(r=this.i[t])?bt(r):this.i[t]=Xt)}var Gt,Xt=Object.freeze(bt([]));function Wt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function Vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function Rt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Vt(t,e,r);return null==i&&(i=Xt),i===Xt?St(t,e,i=bt([]),r):n&&Array.isArray(i)&&2&mt(i)&&St(t,e,i=i.slice(),r),i}function xt(t){var e=Rt(t,3,!1);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function It(t,e,n){return null==(t=Vt(t,e))?n:t}function wt(t,e,n){return null==(t=null==(t=Vt(t,e))?t:+t)?void 0===n?0:n:t}function St(t,e,n,r){void 0!==r&&r||e>=t.l?(Wt(t),t.i[e]=n):t.h[e+t.j]=n}function Yt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=Vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function Lt(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Rt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&mt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&pt(r[a].h);o&&(pt(r),Object.freeze(r)),t.g[n]=r}return r}function Ht(t,e,n,r,i){var o=Lt(t,r,e);n=n||new r,t=Rt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,Ft(n))):(o.push(n),t.push(Ft(n)))}function Ft(t){if(t.g)for(var e in t.g){var n=t.g[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&Ft(n[r]);else n&&Ft(n)}return t.h}function Ct(t,e){if(t=t.o){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}function Tt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function kt(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Tt(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Jt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Nt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.m=0,e.i=0,e.g=0,e.l=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function Kt(t,e,n){if(null!=(e=Vt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=E)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Bt(t,e,n){return 5===t.h&&(St(e,n,t.g.o()),!0)}function zt(t,e,n){return(5===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.o,e):e.push(t.g.o()),!0)}function Ut(t,e,n){return 0===t.h&&(St(e,n,P(t.g)),!0)}function jt(t,e,n){return 0===t.h&&(St(e,n,t.g.j()),!0)}function Mt(t,e,n){if(2!==t.h)return!1;var r,i=t.g.j(),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,H)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return St(e,n,r),!0}function Et(t,e,n,r,i){if(2!==t.h)return!1;t=it(t,new r,i);var o=void 0!==o&&o;return e.g||(e.g={}),r=t&&Ft(t),e.g[n]=t,St(e,n,r,o),!0}function At(t,e,n,r,i){return 2===t.h&&(Ht(e,n,t=it(t,new r,i),r,void 0),!0)}function Ot(t,e,n){return(0===t.h||2===t.h)&&(e=Rt(e,n),2==t.h?ot(t,A.prototype.j,e):e.push(t.g.j()),!0)}function Pt(t,e,n){return 0===t.h&&(St(e,n,P(t.g)),!0)}function Qt(t){vt.call(this,t,-1,qt)}function _t(t,e){return kt(t,e,Gt||(Gt={1:jt,2:jt,3:zt,4:Pt}))}vt.prototype.toJSON=function(){return Zt(Ft(this),gt)},vt.prototype.toString=function(){return Ft(this).toString()},m(Qt,vt),Qt.prototype.getRows=function(){return Vt(this,1)},Qt.prototype.getCols=function(){return Vt(this,2)},Qt.prototype.getPackedDataList=function(){return xt(this)},Qt.prototype.getLayout=function(){return It(this,4,0)};var Dt,$t,qt=[3];function te(t){vt.call(this,t)}function ee(t,e){var n=Vt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}Kt(e,t,2),null!=(r=Vt(t,3))&&ct(e,3,C(r)),null!=(r=Vt(t,4))&&ct(e,4,C(r)),Ct(t,e)}function ne(t,e){return kt(t,e,Dt||(Dt={1:jt,2:Bt,3:Mt,4:Mt}))}function re(t){vt.call(this,t,-1,le)}function ie(t,e){return kt(t,e,$t||($t={1:[At,te,ne]}))}m(te,vt),m(re,vt),re.prototype.addClassification=function(t,e){return Ht(this,1,t,te,e),this};var oe,ae,le=[1];function se(t){vt.call(this,t)}function ce(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5),Ct(t,e)}function ue(t,e){return kt(t,e,oe||(oe={1:Bt,2:Bt,3:Bt,4:Bt,5:Bt}))}function de(t){vt.call(this,t,-1,pe)}function he(t,e){return kt(t,e,ae||(ae={1:[At,se,ue]}))}m(se,vt),m(de,vt);var me,be,pe=[1];function fe(t){vt.call(this,t)}function ge(t,e){Kt(e,t,1),Kt(e,t,2),Kt(e,t,3),Kt(e,t,4),Kt(e,t,5);var n=Vt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Ct(t,e)}function ye(t,e){return kt(t,e,me||(me={1:Bt,2:Bt,3:Bt,4:Bt,5:Bt,6:Ut}))}function Ze(t){vt.call(this,t,-1,Xe)}function ve(t,e){return kt(t,e,be||(be={1:Pt,2:Pt,3:zt,4:Ot}))}m(fe,vt),m(Ze,vt),Ze.prototype.getVertexType=function(){return It(this,1,0)},Ze.prototype.getPrimitiveType=function(){return It(this,2,0)},Ze.prototype.getVertexBufferList=function(){return xt(this)},Ze.prototype.getIndexBufferList=function(){return Rt(this,4)};var Ge,Xe=[3,4];function We(t){vt.call(this,t)}function Ve(t,e){return kt(t,e,Ge||(Ge={1:[Et,Ze,ve],2:[Et,Qt,_t]}))}m(We,vt),We.prototype.getMesh=function(){return Yt(this,Ze,1)},We.prototype.getPoseTransformMatrix=function(){return Yt(this,Qt,2)};var Re=[[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]],xe=[[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]],Ie=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],we=[[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]],Se=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ye=[[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]],Le=[].concat(l(Re),l(xe),l(Ie),l(we),l(Se),l(Ye));function He(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Fe(t){return Lt(t,te,1).map((function(t){return{index:It(t,1,0),score:wt(t,2),label:null!=Vt(t,3)?It(t,3,""):void 0,displayName:null!=Vt(t,4)?It(t,4,""):void 0}}))}function Ce(t){return{x:wt(t,1),y:wt(t,2),z:wt(t,3),visibility:null!=Vt(t,4)?wt(t,4):void 0}}function Te(t){return Lt(Nt(t,de,he),se,1).map(Ce)}function ke(t,e){this.h=t,this.g=e,this.l=0}function Je(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=He(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=He(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),ca:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Ne(t){this.g=t}var Ke=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 Be(t,e){return e+t}function ze(t,e){window[t]=e}function Ue(t){if(this.g=t,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=t&&t.locateFile||Be,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function je(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ke),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return ze("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),ze("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Me(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Me(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Me(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function Ee(t,e,n){var r,i,o,l,s,c,u,d,h,m,b,p,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new ke(t.h,t.D),t.s[e]=r),i.return(Je(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Nt(v.get(R),fe,ye);x={T:{X:wt(x,1),Y:wt(x,2),height:wt(x,3),width:wt(x,4),rotation:wt(x,5,0),W:It(x,6,0)},O:Te(G.get(R)),M:Fe(Nt(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(b=t.s[d])||(b=new ke(t.h,t.D),t.s[d]=b),g(Z,Je(b,m,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ae(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=Ee(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Oe(t){return t.map(Pe)}function Pe(t){var e=(t=Nt(t,We,Ve)).getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}function Qe(t){var e=this;t=t||{},this.g=new Ue({locateFile:t.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:Te},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:Te},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:Te},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Te},ea:{type:"proto",stream:"world_landmarks",transform:Te},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:Oe}}}],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(t){var n,r,i,o;return X((function(a){if(1==a.g){switch(n="",t){case 1:n="pose_landmark_full.tflite";break;case 2:n="pose_landmark_heavy.tflite";break;default:n="pose_landmark_lite.tflite"}return r="third_party/mediapipe/modules/pose_landmark/"+n,i=e.g.locateFile(n,""),g(a,fetch(i),3)}return 2!=a.g?g(a,a.h.arrayBuffer(),2):(o=a.h,e.g.overrideFile(r,o),g(a,e.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"}}}})}(t=Ue.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,je(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Me(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ae(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var b=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new ke(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&b instanceof HTMLVideoElement)var f=b.videoWidth,y=b.videoHeight;else typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(f=b.naturalWidth,y=b.naturalHeight):(f=b.width,y=b.height);y={glName:p.l,width:f,height:y},(f=p.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),p.h.bindTexture2d(p.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,b),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new Ne(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(b.length),y=0;y<b.length;++y){f=b[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=f.T,W=new fe;if(St(W,1,X.X),St(W,2,X.Y),St(W,3,X.height),St(W,4,X.width),St(W,5,X.rotation),St(W,6,X.W),X=Jt(W,ge),v.call(Z,G,X),f.O)for(Z=0;Z<f.O.length;++Z){var V=!!(W=f.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),St(V=new se,1,W.x),St(V,2,W.y),St(V,3,W.z),W.visibility&&St(V,4,W.visibility),W=Jt(V,ce),G.call(v,X,W)}if(f.M)for(Z=0;Z<f.M.length;++Z)G=(v=p.data).addClassification,X=y,W=f.M[Z],St(V=new te,2,W.score),W.index&&St(V,1,W.index),W.label&&St(V,3,W.label),W.displayName&&St(V,4,W.displayName),W=Jt(V,ee),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Ue),R("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Qe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Holistic",Qe),R("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}}),R("FACEMESH_LIPS",Re),R("FACEMESH_LEFT_EYE",xe),R("FACEMESH_LEFT_EYEBROW",Ie),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",we),R("FACEMESH_RIGHT_EYEBROW",Se),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",Ye),R("FACEMESH_CONTOURS",Le),R("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]]),R("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]]),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.5.1635989137")}).call(Ti);const Yi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.na=e.prototype}function b(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={da:e,ea:!0},t.g=t.o||t.u}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new b,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.ea)throw e.da;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.s):(t.g.s(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.s):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}b.prototype.s=function(t){this.h=t},b.prototype.return=function(t){this.j={return:t},this.g=this.u},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.H(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.o(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.I(e,t):this.o(t)},e.prototype.l=function(t){this.u(2,t)},e.prototype.o=function(t){this.u(1,t)},e.prototype.u=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.G(),this.B()},e.prototype.G=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.s)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.H=function(t){var e=this.j();t.M(e.resolve,e.reject)},e.prototype.I=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.M(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.M=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.s=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).M(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).M(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(){throw Error("Invalid UTF8")}function I(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var w,S,Y=typeof TextDecoder<"u",L=typeof TextEncoder<"u",H={},F=null;function C(t){var e;void 0===e&&(e=0),k(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=F[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function k(){if(!F){F={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===F[o]&&(F[o]=i)}}}}var J,N="function"==typeof Uint8Array;function K(t){return N&&null!=t&&t instanceof Uint8Array}function B(t){if(this.L=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var z="function"==typeof Uint8Array.prototype.slice,U=0;function j(t,e){return Error("Invalid wire type: "+t+" (at position "+e+")")}function M(){return Error("Failed to read varint, encoding is invalid.")}function E(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.j=0,this.v=e,t&&A(this,t)}function A(t,e){t.h=function(t,e){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 T(t);if(t.constructor===B)return!e&&(e=t.L)&&e.constructor===Uint8Array?e:(e=null==(e=t.L)||K(e)?e:"string"==typeof e?T(e):null,(t=t.L=e)?new Uint8Array(t):J||(J=new Uint8Array(0)));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")}(e,t.v),t.j=0,t.i=t.h.length,t.g=t.j}function O(t){if(t.g>t.i)throw Error("Tried to read past the end of the data "+t.g+" > "+t.i)}function P(t){var e=t.h,n=e[t.g],r=127&n;if(128>n)return t.g+=1,O(t),r;if(r|=(127&(n=e[t.g+1]))<<7,128>n)return t.g+=2,O(t),r;if(r|=(127&(n=e[t.g+2]))<<14,128>n)return t.g+=3,O(t),r;if(r|=(127&(n=e[t.g+3]))<<21,128>n)return t.g+=4,O(t),r;if(n=e[t.g+4],t.g+=5,r|=(15&n)<<28,128>n)return O(t),r;if(128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++])throw M();return O(t),r}E.prototype.reset=function(){this.g=this.j};var Q=[];function _(){this.g=[]}function D(t,e){for(;127<e;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function $(t){var e={},n=void 0!==e.W&&e.W;this.l={v:void 0!==e.v&&e.v},this.W=n,e=this.l,Q.length?(n=Q.pop(),e&&(n.v=e.v),t&&A(n,t),t=n):t=new E(t,e),this.g=t,this.j=this.g.g,this.h=this.i=-1}function q(t){var e=t.g;if(e.g==e.i)return!1;t.j=t.g.g;var n=P(t.g)>>>0;if(e=n>>>3,!(0<=(n&=7)&&5>=n))throw j(n,t.j);if(1>e)throw Error("Invalid field number: "+e+" (at position "+t.j+")");return t.i=e,t.h=n,!0}function tt(t){switch(t.h){case 0:if(0!=t.h)tt(t);else t:{for(var e=(t=t.g).g,n=e+10;e<n;)if(0==(128&t.h[e++])){t.g=e,O(t);break t}throw M()}break;case 1:(t=t.g).g+=8,O(t);break;case 2:2!=t.h?tt(t):(e=P(t.g)>>>0,(t=t.g).g+=e,O(t));break;case 5:(t=t.g).g+=4,O(t);break;case 3:for(e=t.i;;){if(!q(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.h){if(t.i!=e)throw Error("Unmatched end-group tag");break}tt(t)}break;default:throw j(t.h,t.j)}}_.prototype.length=function(){return this.g.length},_.prototype.end=function(){var t=this.g;return this.g=[],t},$.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};var et=[];function nt(){this.i=[],this.h=0,this.g=new _}function rt(t,e){0!==e.length&&(t.i.push(e),t.h+=e.length)}var it="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ot(t,e){Object.isFrozen(t)||(it?t[it]|=e:void 0!==t.N?t.N|=e:Object.defineProperties(t,{N:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function at(t){var e;return null==(e=it?t[it]:t.N)?0:e}function lt(t){return ot(t,1),t}function st(t){return!!Array.isArray(t)&&!!(2&at(t))}function ct(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ot(t,2)}function ut(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)&&t.constructor===Object}var dt=Object.freeze(lt([]));function ht(t){if(st(t.m))throw Error("Cannot mutate an immutable Message")}var mt,bt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function pt(t){return{value:t,configurable:!1,writable:!1,enumerable:!1}}function ft(t,e,n){return-1===e?null:e>=t.i?t.g?t.g[e]:void 0:void 0!==n&&n&&t.g&&null!=(n=t.g[e])?n:t.m[e+t.h]}function gt(t,e,n,r){r=void 0!==r&&r,ht(t),e<t.i&&!r?t.m[e+t.h]=n:(t.g||(t.g=t.m[t.i+t.h]={}))[e]=n}function yt(t,e,n,r){n=void 0===n||n;var i=ft(t,e,r=void 0!==r&&r);return null==i&&(i=dt),st(t.m)?n&&(ct(i),Object.freeze(i)):(i===dt||st(i))&>(t,e,i=lt(i.slice()),r),i}function Zt(t,e,n){return null==(t=null==(t=ft(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){t.j||(t.j={});var i=st(t.m),o=t.j[n];if(!o){r=yt(t,n,!0,void 0!==r&&r),o=[],i=i||st(r);for(var a=0;a<r.length;a++)o[a]=new e(r[a]),i&&ct(o[a].m);i&&(ct(o),Object.freeze(o)),t.j[n]=o}return o}function Gt(t,e,n,r,i){var o=void 0!==o&&o;return ht(t),o=vt(t,n,e,o),n=r||new n,t=yt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.m)):(o.push(n),t.push(n.m)),n}function Xt(t,e){return null==(t=ft(t,e))?0:t}function Wt(t,e){return null==(t=ft(t,e))?"":t}function Vt(t){var e=It;return xt(t,e=void 0===e?wt:e)}function Rt(t,e){if(null!=t){if(Array.isArray(t))t=xt(t,e);else if(ut(t)){var n,r={};for(n in t)r[n]=Rt(t[n],e);t=r}else t=e(t);return t}}function xt(t,e){for(var n=t.slice(),r=0;r<n.length;r++)n[r]=Rt(n[r],e);return Array.isArray(t)&&1&at(t)&<(n),n}function It(t){return t&&"object"==typeof t&&t.toJSON?t.toJSON():(t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(t&&!Array.isArray(t)){if(K(t))return C(t);if(t instanceof B){var e=t.L;return e=null==e||"string"==typeof e?e:N&&e instanceof Uint8Array?C(e):null,(t.L=e)||""}}}return t}(t),Array.isArray(t)?Vt(t):t)}function wt(t){return K(t)?new Uint8Array(t):t}function St(t,e,n){t||(t=mt),mt=null;var r=this.constructor.h;if(t||(t=r?[r]:[]),this.h=(r?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=t,t=(r=this.m.length)-1,r&&ut(r=this.m[t])?(this.i=t-this.h,this.g=r):void 0!==e&&-1<e?(this.i=Math.max(e,t+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)if((t=n[e])<this.i)t+=this.h,(r=this.m[t])?Array.isArray(r)&<(r):this.m[t]=dt;else{var i=(r=this.g||(this.g=this.m[this.i+this.h]={}))[t];i?Array.isArray(i)&<(i):r[t]=dt}}function Yt(){St.apply(this,arguments)}if(St.prototype.toJSON=function(){return Vt(this.m)},St.prototype.toString=function(){return this.m.toString()},m(Yt,St),bt){var Lt={};Object.defineProperties(Yt,(Lt[Symbol.hasInstance]=pt((function(){throw Error("Cannot perform instanceof checks for MutableMessage")})),Lt))}function Ht(t,e,n){if(n){var r,i={};for(r in n){var o=n[r],a=o.ha;a||(i.F=o.la||o.fa.P,o.aa?(i.U=Kt(o.aa),a=function(t){return function(e,n,r){return t.F(e,n,r,t.U)}}(i)):o.ca?(i.T=Bt(o.X.g,o.ca),a=function(t){return function(e,n,r){return t.F(e,n,r,t.T)}}(i)):a=i.F,o.ha=a),a(e,t,o.X),i={F:i.F,U:i.U,T:i.T}}}!function(t,e){if(e=e.ba){rt(t,t.g.end());for(var n=0;n<e.length;n++)rt(t,e[n])}}(e,t)}var Ft=Symbol();function Ct(t,e,n){return t[Ft]||(t[Ft]=function(t,r){return e(t,r,n)})}function Tt(t){var e=t[Ft];if(!e){var n=$t(t);e=function(t,e){return qt(t,e,n)},t[Ft]=e}return e}function kt(t){var e=function(t){var e=t.aa;return e?Tt(e):(e=t.ka)?Ct(t.X.g,e,t.ca):void 0}(t),n=t.X,r=t.fa.O;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function Jt(t,e,n,r,i,o){var a=0;for((t=t()).length&&"number"!=typeof t[0]&&(n(e,t[0]),a++);a<t.length;){n=t[a++];for(var l=a+1;l<t.length&&"number"!=typeof t[l];)l++;var s=t[a++];switch(l-=a){case 0:r(e,n,s);break;case 1:r(e,n,s,t[a++]);break;case 2:i(e,n,s,t[a++],t[a++]);break;case 3:l=t[a++];var c=t[a++],u=t[a++];Array.isArray(u)?i(e,n,s,l,c,u):o(e,n,s,l,c,u);break;case 4:o(e,n,s,t[a++],t[a++],t[a++],t[a++]);break;default:throw Error("unexpected number of binary field arguments: "+l)}}return e}var Nt=Symbol();function Kt(t){var e=t[Nt];if(!e){var n=At(t);e=function(t,e){return ee(t,e,n)},t[Nt]=e}return e}function Bt(t,e){var n=t[Nt];return n||(n=function(t,n){return Ht(t,n,e)},t[Nt]=n),n}var zt=Symbol();function Ut(t,e){t.push(e)}function jt(t,e,n){t.push(e,n.P)}function Mt(t,e,n,r,i){var o=Kt(i),a=n.P;t.push(e,(function(t,e,n){return a(t,e,n,r,o)}))}function Et(t,e,n,r,i,o){var a=Bt(r,o),l=n.P;t.push(e,(function(t,e,n){return l(t,e,n,r,a)}))}function At(t){return t[zt]||Jt(t,t[zt]=[],Ut,jt,Mt,Et)}var Ot=Symbol();function Pt(t,e){t[0]=e}function Qt(t,e,n,r){var i=n.O;t[e]=r?function(t,e,n){return i(t,e,n,r)}:i}function _t(t,e,n,r,i,o){var a=n.O,l=Tt(i);t[e]=function(t,e,n){return a(t,e,n,r,l,o)}}function Dt(t,e,n,r,i,o,a){var l=n.O,s=Ct(r,i,o);t[e]=function(t,e,n){return l(t,e,n,r,s,a)}}function $t(t){return t[Ot]||Jt(t,t[Ot]={},Pt,Qt,_t,Dt)}function qt(t,e,n){for(;q(e)&&4!=e.h;){var r=e.i,i=n[r];if(!i){var o=n[0];o&&(o=o[r])&&(i=n[r]=kt(o))}if(!(i&&i(e,t,r)||(i=e,r=t,o=i.j,tt(i),i.W))){var a=i.g.h;i=o===(i=i.g.g)?J||(J=new Uint8Array(0)):z?a.slice(o,i):new Uint8Array(a.subarray(o,i)),(o=r.ba)?o.push(i):r.ba=[i]}}return t}function te(t,e,n){if(et.length){var r=et.pop();t&&(A(r.g,t),r.i=-1,r.h=-1),t=r}else t=new $(t);try{return qt(new e,t,$t(n))}finally{(e=t.g).h=null,e.j=0,e.i=0,e.g=0,e.v=!1,t.i=-1,t.h=-1,100>et.length&&et.push(t)}}function ee(t,e,n){for(var r=n.length,i=r%2==1,o=i?1:0;o<r;o+=2)(0,n[o+1])(e,t,n[o]);Ht(t,e,i?n[0]:void 0)}function ne(t,e){var n=new nt;ee(t,n,At(e)),rt(n,n.g.end()),t=new Uint8Array(n.h);for(var r=(e=n.i).length,i=0,o=0;o<r;o++){var a=e[o];t.set(a,i),i+=a.length}return n.i=[t],t}function re(t,e){return{O:t,P:e}}var ie=re((function(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,O(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,gt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){D(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?U=0:(0,U=2147483648):isNaN(r)?(0,U=2147483647):34028234663852886e22<r?(0,U=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,U=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,U=(n<<31|e+127<<23|8388607&r)>>>0),n=U,t.g.push(n>>>0&255),t.g.push(n>>>8&255),t.g.push(n>>>16&255),t.g.push(n>>>24&255)}})),oe=re((function(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)i=r.h[r.g++],O(r),o|=(127&i)<<7*a;if(128<=i&&(i=r.h[r.g++],O(r),o|=(127&i)<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)i=r.h[r.g++],O(r),t|=(127&i)<<7*a+3;if(!(128>i))throw M();return r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),gt(e,n,t?-r:r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e){D(t.g,8*n),t=t.g;var r=e;for(n=0>r,e=(r=Math.abs(r))>>>0,r=Math.floor((r-e)/4294967296),r>>>=0,n&&(r=~r>>>0,4294967295<(e=1+(~e>>>0))&&(e=0,4294967295<++r&&(r=0))),n=U=e,e=r;0<e||127<n;)t.g.push(127&n|128),n=(n>>>7|e<<25)>>>0,e>>>=7;t.g.push(n)}})),ae=re((function(t,e,n){return 0===t.h&&(gt(e,n,P(t.g)),!0)}),(function(t,e,n){if(null!=(e=ft(e,n))&&null!=e)if(D(t.g,8*n),t=t.g,0<=(n=e))D(t,n);else{for(e=0;9>e;e++)t.g.push(127&n|128),n>>=7;t.g.push(1)}})),le=re((function(t,e,n){if(2!==t.h)return!1;var r,i=P(t.g)>>>0,o=(t=t.g).g;if(t.g+=i,O(t),t=t.h,Y)(r=w)||(r=w=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?x():(l=t[o++],194>a||128!=(192&l)?(o--,x()):c.push((31&a)<<6|63&l)):240>a?o>=i-1?x():128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,x()):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?x():128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,x()):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):x(),8192<=c.length&&(u=I(u,c),c.length=0);r=I(u,c)}return gt(e,n,r),!0}),(function(t,e,n){if(null!=(e=ft(e,n))){var r=!1;if(r=void 0!==r&&r,L){if(r&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(e))throw Error("Found an unpaired surrogate");e=(S||(S=new TextEncoder)).encode(e)}else{for(var i=0,o=new Uint8Array(3*e.length),a=0;a<e.length;a++){var l=e.charCodeAt(a);if(128>l)o[i++]=l;else{if(2048>l)o[i++]=l>>6|192;else{if(55296<=l&&57343>=l){if(56319>=l&&a<e.length){var s=e.charCodeAt(++a);if(56320<=s&&57343>=s){l=1024*(l-55296)+s-56320+65536,o[i++]=l>>18|240,o[i++]=l>>12&63|128,o[i++]=l>>6&63|128,o[i++]=63&l|128;continue}a--}if(r)throw Error("Found an unpaired surrogate");l=65533}o[i++]=l>>12|224,o[i++]=l>>6&63|128}o[i++]=63&l|128}}e=o.subarray(0,i)}D(t.g,8*n+2),D(t.g,e.length),rt(t,t.g.end()),rt(t,e)}})),se=re((function(t,e,n,r,i){if(2!==t.h)return!1;e=Gt(e,n,r),n=t.g.i,r=P(t.g)>>>0;var o=t.g.g+r,a=o-n;if(0>=a&&(t.g.i=o,i(e,t),a=o-t.g.g),a)throw Error("Message parsing ended unexpectedly. Expected to read "+r+" bytes, instead read "+(r-a)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=n,!0}),(function(t,e,n,r,i){if(null!=(e=vt(e,r,n)))for(r=0;r<e.length;r++){var o=t;D(o.g,8*n+2);var a=o.g.end();rt(o,a),a.push(o.h),o=a,i(e[r],t),a=t;var l=o.pop();for(l=a.h+a.g.length()-l;127<l;)o.push(127&l|128),l>>>=7,a.h++;o.push(l),a.h++}}));function ce(){Yt.apply(this,arguments)}if(m(ce,Yt),bt){var ue={};Object.defineProperties(ce,(ue[Symbol.hasInstance]=pt(Object[Symbol.hasInstance]),ue))}function de(t){ce.call(this,t)}function he(){return[1,ae,2,ie,3,le,4,le]}function me(t){ce.call(this,t,-1,pe)}function be(){return[1,se,de,he]}m(de,ce),m(me,ce),me.prototype.addClassification=function(t,e){return Gt(this,1,de,t,e),this};var pe=[1];function fe(t){ce.call(this,t)}function ge(){return[1,ie,2,ie,3,ie,4,ie,5,ie]}function ye(t){ce.call(this,t,-1,ve)}function Ze(){return[1,se,fe,ge]}m(fe,ce),m(ye,ce);var ve=[1];function Ge(t){ce.call(this,t)}function Xe(){return[1,ie,2,ie,3,ie,4,ie,5,ie,6,oe]}m(Ge,ce);var We=[[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]],Ve=[[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]],Re=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],xe=[[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]],Ie=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],we=[[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]],Se=[].concat(l(We),l(Ve),l(Re),l(xe),l(Ie),l(we));function Ye(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Le(t){return vt(t,de,1).map((function(t){return{index:Xt(t,1),ga:Zt(t,2),label:null!=ft(t,3)?Wt(t,3):void 0,displayName:null!=ft(t,4)?Wt(t,4):void 0}}))}function He(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=ft(t,4)?Zt(t,4):void 0}}function Fe(t,e){this.h=t,this.g=e,this.l=0}function Ce(t,e,n){return function(t,e){var n=t.g;if(void 0===t.o){var r=Ye(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=Ye(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.o=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={K:n.getAttribLocation(r,"aVertex"),J:n.getAttribLocation(r,"aTex"),ma:i},t.u=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.enableVertexAttribArray(t.j.K),n.vertexAttribPointer(t.j.K,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.o),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.K),n.bindBuffer(n.ARRAY_BUFFER,t.u),n.vertexAttribPointer(r.K,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.K),n.disableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Te(t){this.g=t}var ke=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(t,e){return e+t}function Ne(t,e){window[t]=e}function Ke(t){if(this.g=t,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=t&&t.locateFile||Je,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.$=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Be(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.Z?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.o=2,g(t,WebAssembly.instantiate(ke),4);case 4:t.g=3,t.o=0;break;case 2:return t.o=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Ne("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Ne("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.$)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.$)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.G=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.Z=!1,m.g=0}}))}function ze(t,e){var n,r;return X((function(i){return e in t.H?i.return(t.H[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.H[e]=r,i.return(r))}))}function Ue(t,e,n){var r,i,o,l,s,c,u,d,h,m,b,p,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.I=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.u[e])||(r=new Fe(t.h,t.G),t.u[e]=r),i.return(Ce(r,n,t.I))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=te(v.get(R),Ge,Xe);x={boundingBox:{xCenter:Zt(x,1),yCenter:Zt(x,2),height:Zt(x,3),width:Zt(x,4),rotation:Zt(x,5,0),rectId:Xt(x,6)},landmarks:vt(te(G.get(R),ye,Ze),fe,1).map(He),V:Le(te(W.get(R),me,be))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(b=t.u[d])||(b=new Fe(t.h,t.G),t.u[d]=b),g(Z,Ce(b,m,t.I),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function je(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Ue(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Me(t){var e=this;t=t||{};var n={url:"face_detection_short.binarypb"},r={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Ke({locateFile:t.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:n,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:"object"==typeof window&&void 0!==window.navigator&&("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(t){var i,o,l,s,c;return X((function(u){switch(u.g){case 1:i=a("short"===t?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"]),o=i.next();case 2:if(o.done){u.g=4;break}return l=o.value,s="third_party/mediapipe/modules/face_detection/"+l,g(u,ze(e.g,l),5);case 5:c=u.h,e.g.overrideFile(s,c),o=i.next(),u.g=2;break;case 4:return n.url="short"===t?"face_detection_short.binarypb":"face_detection_full.binarypb",r.graphOptionXref.calculatorName="short"===t?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",u.return(!0)}}))}},minDetectionConfidence:r}})}(t=Ke.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.o={},t.u={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={R:o.R,S:o.S},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.R=s.onChange,o.S=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.R(t.S),2);!0===e.h&&(n.s=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Be(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.Y===t.g.graph.url?u.return():(t.s=!0,t.g.graph&&t.g.graph.url?(t.Y=t.g.graph.url,g(u,ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,je(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.s)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.s=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var b=t[l];switch(s.type){case"video":var p=h.o[s.stream];if(p||(p=new Fe(h.h,h.G),h.o[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&b instanceof HTMLVideoElement)var f=b.videoWidth,y=b.videoHeight;else typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(f=b.naturalWidth,y=b.naturalHeight):(f=b.width,y=b.height);y={glName:p.l,width:f,height:y},(f=p.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),p.h.bindTexture2d(p.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,b),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.o[s.stream])||(p=new Te(h.h),h.o[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(b.length),y=0;y<b.length;++y){f=b[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=f.boundingBox,W=new Ge;if(gt(W,1,X.xCenter),gt(W,2,X.yCenter),gt(W,3,X.height),gt(W,4,X.width),gt(W,5,X.rotation),gt(W,6,X.rectId),X=ne(W,Xe),v.call(Z,G,X),f.landmarks)for(Z=0;Z<f.landmarks.length;++Z){var V=!!(W=f.landmarks[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),gt(V=new fe,1,W.x),gt(V,2,W.y),gt(V,3,W.z),W.visibility&>(V,4,W.visibility),W=ne(V,ge),G.call(v,X,W)}if(f.V)for(Z=0;Z<f.V.length;++Z)G=(v=p.data).addClassification,X=y,W=f.V[Z],gt(V=new de,2,W.ga),W.index&>(V,1,W.index),W.label&>(V,3,W.label),W.displayName&>(V,4,W.displayName),W=ne(V,he),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",Ke),R("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=Me.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("FaceDetection",Me),R("FACEDETECTION_LIPS",We),R("FACEDETECTION_LEFT_EYE",Ve),R("FACEDETECTION_LEFT_EYEBROW",Re),R("FACEDETECTION_RIGHT_EYE",xe),R("FACEDETECTION_RIGHT_EYEBROW",Ie),R("FACEDETECTION_FACE_OVAL",we),R("FACEDETECTION_CONTOURS",Se),R("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]]),R("VERSION","0.4.1646425229")}).call(Yi);const wi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function b(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new b,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t,e){return e=new G(new y(e)),h&&t.prototype&&h(e,t.prototype),e}b.prototype.o=function(t){this.h=t},b.prototype.return=function(t){this.j={return:t},this.g=this.s};var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.u(t):this.m(t)}},e.prototype.u=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var I,w,S=typeof TextDecoder<"u",Y=typeof TextEncoder<"u";function L(t){if(Y)t=(w||(w=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var H={},F=null;function C(t,e){void 0===e&&(e=0),k(),e=H[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function T(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=F[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}k();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function k(){if(!F){F={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));H[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===F[o]&&(F[o]=i)}}}}var J,N="function"==typeof Uint8Array.prototype.slice;function K(t,e,n){return e===n?J||(J=new Uint8Array(0)):N?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var B=0;function z(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=e,t&&U(this,t)}function U(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?T(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.l=0,t.j=t.h.length,t.g=t.l}function j(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.m=!0}z.prototype.reset=function(){this.g=this.l},z.prototype.i=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&this.g++,n)))))},z.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],r=this.h[this.g+3];return this.g+=4,t=2*((n=(t<<0|e<<8|n<<16|r<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var M=[];function E(){this.g=new Uint8Array(64),this.h=0}function A(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function O(t){var e={},n=void 0!==e.N&&e.N;this.o={v:void 0!==e.v&&e.v},this.N=n,e=this.o,M.length?(n=M.pop(),e&&(n.v=e.v),t&&U(n,t),t=n):t=new z(t,e),this.g=t,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}function P(t){var e=t.g;if((e=e.g==e.j)||(e=t.j)||(e=(e=t.g).m||0>e.g||e.g>e.j),e)return!1;t.m=t.g.g;var n=7&(e=t.g.i());return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function Q(t){switch(t.h){case 0:if(0!=t.h)Q(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?Q(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)Q(t);else{var e=t.g.i();(t=t.g).g+=e}break;case 5:5!=t.h?Q(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!P(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}Q(t)}break;default:t.j=!0}}function _(t,e,n){var r=t.g.j,i=t.g.i(),o=t.g.g+i;if(t.g.j=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.j=r,e}function D(t){return t.g.o()}function $(t){var e,n=t.g.i(),r=(t=t.g).g;if(t.g+=n,t=t.h,S)(e=I)||(e=I=new TextDecoder("utf-8",{fatal:!1})),e=e.decode(t.subarray(r,r+n));else{n=r+n;for(var i,o,a,l=[],s=null;r<n;)128>(i=t[r++])?l.push(i):224>i?r>=n?l.push(65533):(o=t[r++],194>i||128!=(192&o)?(r--,l.push(65533)):l.push((31&i)<<6|63&o)):240>i?r>=n-1?l.push(65533):128!=(192&(o=t[r++]))||224===i&&160>o||237===i&&160<=o||128!=(192&(e=t[r++]))?(r--,l.push(65533)):l.push((15&i)<<12|(63&o)<<6|63&e):244>=i?r>=n-2?l.push(65533):128!=(192&(o=t[r++]))||o-144+(i<<28)>>30!=0||128!=(192&(e=t[r++]))||128!=(192&(a=t[r++]))?(r--,l.push(65533)):(i=(7&i)<<18|(63&o)<<12|(63&e)<<6|63&a,i-=65536,l.push(55296+(i>>10&1023),56320+(1023&i))):l.push(65533),8192<=l.length&&(s=x(s,l),l.length=0);e=x(s,l)}return e}function q(t,e,n){var r=t.g.i();for(r=t.g.g+r;t.g.g<r;)n.push(e.call(t.g))}function tt(t,e){2==t.h?q(t,z.prototype.o,e):e.push(D(t))}function et(){this.h=[],this.i=0,this.g=new E}function nt(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function rt(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,r=n.length,i=0,o=0;o<r;o++){var a=n[o];0!==a.length&&(e.set(a,i),i+=a.length)}return 0!==(r=(n=t.g).h)&&(e.set(n.g.subarray(0,r),i),n.h=0),t.h=[e],e}function it(t,e,n){if(null!=n){A(t.g,8*e+5),t=t.g;var r=n;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?B=0:(0,B=2147483648):isNaN(r)?(0,B=2147483647):34028234663852886e22<r?(0,B=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,B=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,B=(n<<31|e+127<<23|8388607&r)>>>0),n=B,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}E.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},E.prototype.length=function(){return this.h},E.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,K(t,0,e)},O.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var ot="function"==typeof Uint8Array;function at(t,e,n){if(null!=t)return"object"==typeof t?ot&&t instanceof Uint8Array?n(t):lt(t,e,n):e(t)}function lt(t,e,n){if(Array.isArray(t)){for(var r=Array(t.length),i=0;i<t.length;i++)r[i]=at(t[i],e,n);return Array.isArray(t)&&t.W&&dt(r),r}for(i in r={},t)r[i]=at(t[i],e,n);return r}function st(t){return"number"==typeof t?isFinite(t)?t:String(t):t}var ct,ut={W:{value:!0,configurable:!0}};function dt(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,ut),t}function ht(t,e,n){var r=ct;if(ct=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=r?0:-1,this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,!r||(null===(r=this.h[t])||"object"!=typeof r||Array.isArray(r)||ot&&r instanceof Uint8Array)?void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE:(this.l=t-this.j,this.i=r),n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?dt(r):this.h[t]=mt):(bt(this),(r=this.i[t])?dt(r):this.i[t]=mt)}var mt=Object.freeze(dt([]));function bt(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function pt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.i?t.i[e]:void 0:t.h[e+t.j]}function ft(t,e){var n=void 0!==n&&n,r=pt(t,e,n);return null==r&&(r=mt),r===mt&&vt(t,e,r=dt([]),n),r}function gt(t){var e=ft(t,3);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function yt(t,e,n){return null==(t=pt(t,e))?n:t}function Zt(t,e,n){return null==(t=null==(t=pt(t,e))?t:+t)?void 0===n?0:n:t}function vt(t,e,n,r){void 0!==r&&r||e>=t.l?(bt(t),t.i[e]=n):t.h[e+t.j]=n}function Gt(t,e,n){if(-1===n)return null;if(t.g||(t.g={}),!t.g[n]){var r=pt(t,n,!1);r&&(t.g[n]=new e(r))}return t.g[n]}function Xt(t,e){t.g||(t.g={});var n=t.g[1];if(!n){var r=ft(t,1);n=[];for(var i=0;i<r.length;i++)n[i]=new e(r[i]);t.g[1]=n}return n}function Wt(t,e,n){var r=void 0!==r&&r;t.g||(t.g={});var i=n&&Rt(n);t.g[e]=n,vt(t,e,i,r)}function Vt(t,e,n,r){var i=Xt(t,n);e=e||new n,t=ft(t,1),null!=r?(i.splice(r,0,e),t.splice(r,0,Rt(e))):(i.push(e),t.push(Rt(e)))}function Rt(t,e){if(t.g)for(var n in t.g){var r=t.g[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)r[i]&&Rt(r[i]);else r&&Rt(r)}return t.h}function xt(t,e){if(t=t.o){nt(e,e.g.end());for(var n=0;n<t.length;n++)nt(e,t[n])}}function It(t,e){if(4==e.h)return!1;var n=e.m;return Q(e),e.N||(e=K(e.g.h,n,e.g.g),(n=t.o)?n.push(e):t.o=[e]),!0}function wt(t){ht.call(this,t,-1,Yt)}function St(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 16:vt(t,2,n=e.g.i());break;case 29:case 26:tt(e,t.getPackedDataList());break;case 32:vt(t,4,n=j(e.g));break;default:if(!It(t,e))return t}return t}ht.prototype.toJSON=function(){return lt(Rt(this),st,C)},ht.prototype.toString=function(){return Rt(this).toString()},m(wt,ht),wt.prototype.getRows=function(){return pt(this,1)},wt.prototype.getCols=function(){return pt(this,2)},wt.prototype.getPackedDataList=function(){return gt(this)},wt.prototype.getLayout=function(){return yt(this,4,0)};var Yt=[3];function Lt(t,e){var n=void 0;return new(n||(n=Promise))((function(r,i){function o(t){try{l(e.next(t))}catch(t){i(t)}}function a(t){try{l(e.throw(t))}catch(t){i(t)}}function l(t){t.done?r(t.value):new n((function(e){e(t.value)})).then(o,a)}l((e=e.apply(t,void 0)).next())}))}function Ht(t){ht.call(this,t)}function Ft(t,e){for(;P(e);)switch(e.i){case 8:var n=e.g.i();vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 26:vt(t,3,n=$(e));break;case 34:vt(t,4,n=$(e));break;default:if(!It(t,e))return t}return t}function Ct(t){ht.call(this,t,-1,Tt)}m(Ht,ht),m(Ct,ht),Ct.prototype.addClassification=function(t,e){return Vt(this,t,Ht,e),this};var Tt=[1];function kt(t){ht.call(this,t)}function Jt(t,e){for(;P(e);)switch(e.i){case 13:var n=D(e);vt(t,1,n);break;case 21:vt(t,2,n=D(e));break;case 29:vt(t,3,n=D(e));break;case 37:vt(t,4,n=D(e));break;case 45:vt(t,5,n=D(e));break;default:if(!It(t,e))return t}return t}function Nt(t){ht.call(this,t,-1,Bt)}function Kt(t){t:{var e=new Nt;for(t=new O(t);P(t);)if(10===t.i){Vt(e,_(t,new kt,Jt),kt,void 0)}else if(!It(e,t))break t}return e}m(kt,ht),m(Nt,ht);var Bt=[1];function zt(t){ht.call(this,t)}function Ut(t){ht.call(this,t,-1,Mt)}function jt(t,e){for(;P(e);)switch(e.i){case 8:var n=j(e.g);vt(t,1,n);break;case 16:vt(t,2,n=j(e.g));break;case 29:case 26:tt(e,t.getVertexBufferList());break;case 32:case 34:n=e;var r=t.getIndexBufferList();2==n.h?q(n,z.prototype.i,r):r.push(n.g.i());break;default:if(!It(t,e))return t}return t}m(zt,ht),m(Ut,ht),Ut.prototype.getVertexType=function(){return yt(this,1,0)},Ut.prototype.getPrimitiveType=function(){return yt(this,2,0)},Ut.prototype.getVertexBufferList=function(){return gt(this)},Ut.prototype.getIndexBufferList=function(){return ft(this,4)};var Mt=[3,4];function Et(t){ht.call(this,t)}function At(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Ot(t){return Xt(t,Ht).map((function(t){return{index:yt(t,1,0),Y:Zt(t,2),label:null!=pt(t,3)?yt(t,3,""):void 0,displayName:null!=pt(t,4)?yt(t,4,""):void 0}}))}function Pt(t){return{x:Zt(t,1),y:Zt(t,2),z:Zt(t,3),visibility:null!=pt(t,4)?Zt(t,4):void 0}}function Qt(t,e){this.h=t,this.g=e,this.l=0}function _t(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=At(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=At(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Dt(t){this.g=t}m(Et,ht),Et.prototype.getMesh=function(){return Gt(this,Ut,1)},Et.prototype.getPoseTransformMatrix=function(){return Gt(this,wt,2)};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 qt(t,e){return e+t}function te(t,e){window[t]=e}function ee(t){if(this.g=t,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=t&&t.locateFile||qt,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ne(t){return Lt(t,(function t(){var e,n,r,i,o,a,s,c,u,d,h,m=this;return X(t,(function(t){switch(t.g){case 1:return e=m,m.R?(n=function(t,e){return void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(e):t.g.files}(m,m.j),g(t,function(){return Lt(this,(function t(){return X(t,(function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate($t),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)}}))}))}(),2)):t.return();case 2:if(r=t.h,"object"==typeof window)return te("createMediapipeSolutionsWasm",{locateFile:m.locateFile}),te("createMediapipeSolutionsPackedAssets",{locateFile:m.locateFile}),a=n.filter((function(t){return void 0!==t.data})),s=n.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(t){var n=re(e,t.url);if(void 0!==t.path){var r=t.path;n=n.then((function(t){return e.overrideFile(r,t),Promise.resolve(t)}))}return n}))),u=Promise.all(s.map((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.S)):Promise.resolve()}))).then((function(){return Lt(e,(function t(){var e,n,r=this;return X(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,g(t,e(n),2);r.h=t.h,t.g=0}))}))})),d=Lt(e,(function t(){var e=this;return X(t,(function(t){return e.g.graph&&e.g.graph.url?t=g(t,re(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),g(t,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return i=n.filter((function(t){return void 0===t.simd||t.simd&&r||!t.simd&&!r})).map((function(t){return e.locateFile(t.url,e.S)})),importScripts.apply(null,l(i)),g(t,createMediapipeSolutionsWasm(Module),6);case 6:m.h=t.h,m.l=new OffscreenCanvas(1,1),m.h.canvas=m.l,o=m.h.GL.createContext(m.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),m.h.GL.makeContextCurrent(o),t.g=4;break;case 7:if(m.l=document.createElement("canvas"),!(h=m.l.getContext("webgl2",{}))&&!(h=m.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();m.D=h,m.h.canvas=m.l,m.h.createContext(m.l,!0,!0,{});case 4:m.i=new m.h.SolutionWasm,m.R=!1,t.g=0}}))}))}function re(t,e){return Lt(t,(function t(){var n,r,i=this;return X(t,(function(t){return e in i.F?t.return(i.F[e]):(n=i.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),i.F[e]=r,t.return(r))}))}))}function ie(t,e,n){return Lt(t,(function t(){var r,i,o,l,s,c,u,d,h,m,b,p,f,y,Z=this;return X(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(Z.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){t.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(t,function(t,e,n){return Lt(t,(function t(){var r,i=this;return X(t,(function(t){return"number"==typeof n||n instanceof Uint8Array||n instanceof i.h.Uint8BlobList?t.return(n):n instanceof i.h.Texture2dDataOut?((r=i.s[e])||(r=new Qt(i.h,i.D),i.s[e]=r),t.return(_t(r,n,i.G))):t.return(void 0)}))}))}(Z,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=v.get(R);t:{var I=new zt;for(x=new O(x);P(x);)switch(x.i){case 13:var w=D(x);vt(I,1,w);break;case 21:vt(I,2,w=D(x));break;case 29:vt(I,3,w=D(x));break;case 37:vt(I,4,w=D(x));break;case 45:vt(I,5,w=D(x));break;case 48:vt(I,6,w=j(x.g));break;default:if(!It(I,x))break t}}I={Z:Zt(I,1),$:Zt(I,2),height:Zt(I,3),width:Zt(I,4),rotation:Zt(I,5,0),X:yt(I,6,0)},x=Xt(Kt(G.get(R)),kt).map(Pt);var S=W.get(R);t:for(w=new Ct,S=new O(S);P(S);)if(10===S.i)w.addClassification(_(S,new Ht,Ft));else if(!It(w,S))break t;I={T:I,O:x,M:Ot(w)},V.push(I)}v=V}else v=[];r[d]=v,t.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,t.g=7;break}if(void 0===m){t.g=3;break}if("float_list"===h.type){r[d]=m,t.g=7;break}if("proto"===h.type){r[d]=m,t.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(b=Z.s[d])||(b=new Qt(Z.h,Z.D),Z.s[d]=b),g(t,_t(b,m,Z.G),13);case 13:p=t.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),t.g=3;break;case 14:f[y]=t.h;case 3:l=u.next(),t.g=2;break;case 4:return t.return(r)}}))}))}function oe(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ie(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function ae(t){t=function(t){t:{var e=new Et;for(t=new O(t);P(t);)switch(t.i){case 10:var n=_(t,new Ut,jt);Wt(e,1,n);break;case 18:Wt(e,2,n=_(t,new wt,St));break;default:if(!It(e,t))break t}}return e}(t);var e=t.getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var r=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return r},t}(t=ee.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){return Lt(this,(function t(){var e=this;return X(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return Lt(n,(function e(){var n=this;return X(e,(function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.u=(void 0===this.u?[]:this.u).concat(r))}},t.initialize=function(){return Lt(this,(function t(){var e=this;return X(t,(function(t){return 1==t.g?g(t,ne(e),2):3!=t.g?g(t,function(t){return Lt(t,(function t(){var e,n,r,i,o,l,s,c,u=this;return X(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.P===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.P=u.g.graph.url,g(t,re(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.B)),r=n.next();!r.done;r=n.next())i=r.value,u.i.overrideFile(i,u.B[i]);if(u.B={},u.g.listeners)for(o=a(u.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,oe(u,s);c=u.j,u.j={},u.setOptions(c),t.g=0}))}))}(e),3):g(t,function(t){return Lt(t,(function t(){var e,n,r,i,o,l,s=this;return X(t,(function(t){switch(t.g){case 1:if(!s.o)return t.return();if(!s.u){t.g=2;break}e=a(s.u),n=e.next();case 3:if(n.done){t.g=5;break}return g(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:s.u=void 0;case 2:if(s.A){for(r=new s.h.GraphOptionChangeRequestList,i=a(s.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);s.i.changeOptions(r),r.delete(),s.A=void 0}s.o=!1,t.g=0}}))}))}(e),0)}))}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){return Lt(this,(function n(){var r,i,o,l,s,c,u,d,h,m=this;return X(n,(function(n){switch(n.g){case 1:return m.g.inputs?(r=1e3*(null==e?performance.now():e),g(n,m.C,2)):n.return();case 2:return g(n,m.initialize(),3);case 3:for(i=new m.h.PacketDataList,o=a(Object.keys(t)),l=o.next();!l.done;l=o.next())if(s=l.value,c=m.g.inputs[s]){t:{var b=m,p=t[s];switch(c.type){case"video":var f=b.m[c.stream];if(f||(f=new Qt(b.h,b.D),b.m[c.stream]=f),0===(b=f).l&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&p instanceof HTMLVideoElement){var y=p.videoWidth;f=p.videoHeight}else typeof HTMLImageElement<"u"&&p instanceof HTMLImageElement?(y=p.naturalWidth,f=p.naturalHeight):(y=p.width,f=p.height);f={glName:b.l,width:y,height:f},(y=b.g).canvas.width=f.width,y.canvas.height=f.height,y.activeTexture(y.TEXTURE0),b.h.bindTexture2d(b.l),y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,p),b.h.bindTexture2d(0),b=f;break t;case"detections":for((f=b.m[c.stream])||(f=new Dt(b.h),b.m[c.stream]=f),(b=f).data||(b.data=new b.g.DetectionListData),b.data.reset(p.length),f=0;f<p.length;++f){y=p[f];var Z=b.data,v=Z.setBoundingBox,G=f,X=y.T,W=new zt;vt(W,1,X.Z),vt(W,2,X.$),vt(W,3,X.height),vt(W,4,X.width),vt(W,5,X.rotation),vt(W,6,X.X);var V=X=new et;it(V,1,pt(W,1)),it(V,2,pt(W,2)),it(V,3,pt(W,3)),it(V,4,pt(W,4)),it(V,5,pt(W,5));var R=pt(W,6);if(null!=R&&null!=R){A(V.g,48);var x=V.g,I=R;R=0>I;var w=(I=Math.abs(I))>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,R&&(I=~I>>>0,4294967295<(w=1+(~w>>>0))&&(w=0,4294967295<++I&&(I=0))),R=B=w,w=I;0<w||127<R;)x.push(127&R|128),R=(R>>>7|w<<25)>>>0,w>>>=7;x.push(R)}if(xt(W,V),X=rt(X),v.call(Z,G,X),y.O)for(Z=0;Z<y.O.length;++Z)V=!!(W=y.O[Z]).visibility,G=(v=b.data).addNormalizedLandmark,X=f,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),vt(V=new kt,1,W.x),vt(V,2,W.y),vt(V,3,W.z),W.visibility&&vt(V,4,W.visibility),it(x=W=new et,1,pt(V,1)),it(x,2,pt(V,2)),it(x,3,pt(V,3)),it(x,4,pt(V,4)),it(x,5,pt(V,5)),xt(V,x),W=rt(W),G.call(v,X,W);if(y.M)for(Z=0;Z<y.M.length;++Z){if(G=(v=b.data).addClassification,X=f,W=y.M[Z],vt(V=new Ht,2,W.Y),W.index&&vt(V,1,W.index),W.label&&vt(V,3,W.label),W.displayName&&vt(V,4,W.displayName),x=W=new et,null!=(w=pt(V,1))&&null!=w)if(A(x.g,8),R=x.g,0<=w)A(R,w);else{for(I=0;9>I;I++)R.push(127&w|128),w>>=7;R.push(1)}it(x,2,pt(V,2)),null!=(R=pt(V,3))&&(R=L(R),A(x.g,26),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),null!=(R=pt(V,4))&&(R=L(R),A(x.g,34),A(x.g,R.length),nt(x,x.g.end()),nt(x,R)),xt(V,x),W=rt(W),G.call(v,X,W)}}b=b.data;break t;default:b={}}}switch(u=b,d=c.stream,c.type){case"video":i.pushTexture2d(Object.assign(Object.assign({},u),{stream:d,timestamp:r}));break;case"detections":(h=u).stream=d,h.timestamp=r,i.pushDetectionList(h);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return m.i.send(i),g(n,m.C,4);case 4:i.delete(),n.g=0}}))}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ee),R("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});var le={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(t){return t.map(ae)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(t){return t.map((function(t){return Xt(Kt(t),kt).map(Pt)}))}}}}],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"}}}},se=[[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]],ce=[[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]],ue=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],de=[[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]],he=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],me=[[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]],be=[].concat(l(se),l(ce),l(ue),l(de),l(he),l(me));function pe(t){t=t||{},t=Object.assign(Object.assign({},le),t),this.g=new ee(t)}(t=pe.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){return Lt(this,(function t(){var e=this;return X(t,(function(t){return g(t,e.g.initialize(),0)}))}))},t.reset=function(){this.g.reset()},t.send=function(t){return Lt(this,(function e(){var n=this;return X(e,(function(e){return g(e,n.g.send(t),0)}))}))},t.setOptions=function(t){this.g.setOptions(t)},R("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}}),R("FaceMesh",pe),R("FACEMESH_LIPS",se),R("FACEMESH_LEFT_EYE",ce),R("FACEMESH_LEFT_EYEBROW",ue),R("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),R("FACEMESH_RIGHT_EYE",de),R("FACEMESH_RIGHT_EYEBROW",he),R("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),R("FACEMESH_FACE_OVAL",me),R("FACEMESH_CONTOURS",be),R("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]]),R("matrixDataToMatrix",(function(t){for(var e=t.getCols(),n=t.getRows(),r=t.getPackedDataList(),i=[],o=0;o<n;o++)i.push(Array(e));for(o=0;o<n;o++)for(var a=0;a<e;a++){var l=1===t.getLayout()?o*e+a:a*n+o;i[o][a]=r[l]}return i})),R("VERSION","0.4.1633559619")}).call(wi);const Li={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ka=e.prototype}function b(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={V:e,X:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new b,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.X)throw e.V;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}b.prototype.o=function(t){this.h=t},b.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.D),reject:t(this.l)}},e.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.G(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.A(t):this.m(t)}},e.prototype.A=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.H(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.F(),this.B()},e.prototype.F=function(){var t=this;o((function(){if(t.C()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.C=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.B=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.G=function(t){var e=this.j();t.K(e.resolve,e.reject)},e.prototype.H=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.K(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.K=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).K(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).K(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){throw t}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){x(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,L,H=typeof TextDecoder<"u",F=typeof TextEncoder<"u";function C(t){if(F)t=(L||(L=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var B,z="function"==typeof Uint8Array;function U(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}var j="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?B||(B=new Uint8Array(0)):j?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).v&&e.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===U){if(null==t.g)var e=B||(B=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||z&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){for(var e=128,n=0,r=0,i=0;4>i&&128<=e;i++)n|=(127&(e=t.h[t.g++]))<<7*i;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,r|=(127&e)>>4),128<=e)for(i=0;5>i&&128<=e;i++)r|=(127&(e=t.h[t.g++]))<<7*i+3;if(128>e)return t=n>>>0,(r=2147483648&(e=r>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),r?-t:t;t.j=!0,w()}function Q(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function _(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,Q(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,Q(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,Q(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,Q(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,Q(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(Q(t),r))))))}function D(t){var e=t.h[t.g],n=t.h[t.g+1],r=t.h[t.g+2],i=t.h[t.g+3];return t.g+=4,Q(t),(e<<0|n<<8|r<<16|i<<24)>>>0}A.prototype.reset=function(){this.g=this.l},A.prototype.m=function(){var t=D(this),e=2*(t>>31)+1,n=t>>>23&255;return t&=8388607,255==n?t?NaN:1/0*e:0==n?e*Math.pow(2,-149)*t:e*Math.pow(2,n-150)*(t+Math.pow(2,23))};var $=[];function q(){this.g=new Uint8Array(64),this.h=0}function tt(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function et(t,e){for(;127<e;)tt(t,127&e|128),e>>>=7;tt(t,e)}function nt(t){var e={},n=void 0!==e.O&&e.O;this.m={v:void 0!==e.v&&e.v},this.O=n,e=this.m,$.length?(n=$.pop(),e&&(n.v=e.v),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function rt(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=_(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function it(t){switch(t.h){case 0:if(0!=t.h)it(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,Q(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,Q(t);break;case 2:2!=t.h?it(t):(e=_(t.g),(t=t.g).g+=e,Q(t));break;case 5:(t=t.g).g+=4,Q(t);break;case 3:for(e=t.i;;){if(!rt(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}it(t)}break;default:t.j=!0,I(t.h,t.l)}}function ot(t,e,n){var r=t.g.i,i=_(t.g),o=t.g.g+i;if(t.g.i=o,n(e,t),0!==(n=o-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=o,t.g.i=r,e}q.prototype.length=function(){return this.h},q.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},nt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var at=[];function lt(){this.h=[],this.i=0,this.g=new q}function st(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function ct(t,e,n){et(t.g,8*e+2),et(t.g,n.length),st(t,t.g.end()),st(t,n)}var ut,dt="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ht(t){return Object.isFrozen(t)||(dt?t[dt]|=1:void 0!==t.g?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function mt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function bt(t,e){if(null!=t)return Array.isArray(t)||mt(t)?pt(t,e):e(t)}function pt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=bt(t[r],e);var i;if(e=Array.isArray(t))e=1&(null==(i=dt?t[dt]:t.g)?0:i);return e&&ht(n),n}for(n in i={},t)i[n]=bt(t[n],e);return i}function ft(t){return t=function(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(z&&null!=t&&t instanceof Uint8Array)return J(t);if(t instanceof U){if(null==t.g)t="";else{var e=t.g;e=null==e||"string"==typeof e?e:z&&e instanceof Uint8Array?J(e):null,t=t.g=e}return t}}return t}(t),Array.isArray(t)?pt(t,ft):t}function gt(t,e,n){var r=ut;if(ut=null,t||(t=r),r=this.constructor.ha,t||(t=r?[r]:[]),this.i=(r?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t,t=(r=this.u.length)-1,r&&mt(r=this.u[t])?(this.j=t-this.i,this.h=r):void 0!==e&&-1<e?(this.j=Math.max(e,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.j?(t+=this.i,(r=this.u[t])?Array.isArray(r)&&ht(r):this.u[t]=yt):(Zt(this),(r=this.h[t])?Array.isArray(r)&&ht(r):this.h[t]=yt)}var yt=Object.freeze(ht([]));function Zt(t){var e=t.j+t.i;t.u[e]||(t.h=t.u[e]={})}function vt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.j?t.h?t.h[e]:void 0:t.u[e+t.i]}function Gt(t,e,n){var r=vt(t,e,n=void 0!==n&&n);return null==r&&(r=yt),r===yt&&Vt(t,e,r=ht(r.slice()),n),r}function Xt(t,e){var n=Gt(t,e);if(t.l||(t.l={}),!t.l[e]){for(var r=0;r<n.length;r++)n[r]=+n[r];t.l[e]=!0}return n}function Wt(t,e,n){return null==(t=null==(t=vt(t,e))?t:+t)?void 0===n?0:n:t}function Vt(t,e,n,r){void 0!==r&&r||e>=t.j?(Zt(t),t.h[e]=n):t.u[e+t.i]=n}function Rt(t,e,n,r){n!==r?Vt(t,e,n):Vt(t,e,void 0,!1)}function xt(t,e,n){if(-1===n)return null;t.g||(t.g={});var r=t.g[n];if(r)return r;var i=vt(t,n,!1);return null==i?r:(e=new e(i),t.g[n]=e)}function It(t,e,n){t.g||(t.g={});var r=t.g[n];if(!r){var i=Gt(t,n,!1);r=[];for(var o=0;o<i.length;o++)r[o]=new e(i[o]);t.g[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Gt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,n.u)):(o.push(n),t.push(n.u))}function St(t,e){return null==(t=vt(t,e))?0:t}function Yt(t,e){return null==(t=vt(t,e))?"":t}function Lt(t,e){if(t=t.m){st(e,e.g.end());for(var n=0;n<t.length;n++)st(e,t[n])}}gt.prototype.toJSON=function(){return pt(this.u,ft)},gt.prototype.toString=function(){return this.u.toString()};var Ht=Symbol();function Ft(t,e,n){return t[Ht]||(t[Ht]=function(t,r){return e(t,r,n)})}function Ct(t){var e=t[Ht];if(!e){var n=t[Jt]||(t[Jt]=t());e=function(t,e){return Nt(t,e,n)},t[Ht]=e}return e}function Tt(t){var e=function(t){var e=t.da;if(e)return Ct(e);if(e=t.ia){var n=t.Y;return delete t.Y,Ft(t.W.g,e,n)}}(t),n=t.W,r=t.ea;return e?function(t,i){return r(t,i,n,e)}:function(t,e){return r(t,e,n)}}function kt(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=Ct(t[2]);return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[3],l=Ct(t[2]);return function(t,n,r){return e(t,n,r,o,l,a)};case 5:var s=t[1],c=Ft(s,t[3],t[4]);return function(t,n,r){return e(t,n,r,s,c)};case 6:var u=t[1],d=t[5],h=Ft(u,t[3],t[4]);return function(t,n,r){return e(t,n,r,u,h,d)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var Jt=Symbol();function Nt(t,e,n){for(;rt(e)&&4!=e.h;){var r=e.i,i=n[r];if(i)Array.isArray(i)&&(i=n[r]=kt(i));else{var o=n[0];o&&(o=o[r])&&(i=n[r]=Tt(o))}i&&i(e,t,r)||(r=t,o=(i=e).l,it(i),i.O||(i=M(i.g.h,o,i.g.g),(o=r.m)?o.push(i):r.m=[i]))}return t}function Kt(t,e){var n=new lt;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function Bt(t,e,n){if(at.length){var r=at.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new nt(t);try{return Nt(new e,t,n[Jt]||(n[Jt]=n()))}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.v=!1,t.i=-1,t.h=-1,t.j=!1,100>at.length&&at.push(t)}}function zt(t,e,n){if(null!=(e=vt(e,n))){et(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),tt(t,(n=E)>>>0&255),tt(t,n>>>8&255),tt(t,n>>>16&255),tt(t,n>>>24&255)}}function Ut(t,e,n){if(1!==t.h)return!1;var r=t.g;t=D(r);var i=D(r);r=2*(i>>31)+1;var o=i>>>20&2047;return t=4294967296*(1048575&i)+t,Rt(e,n,2047==o?t?NaN:1/0*r:0==o?r*Math.pow(2,-1074)*t:r*Math.pow(2,o-1075)*(t+4503599627370496),0),!0}function jt(t,e,n){return 5===t.h&&(Vt(e,n,t.g.m()),!0)}function Mt(t,e,n){if(5!==t.h&&2!==t.h)return!1;if(e=Gt(e,n),2==t.h){n=A.prototype.m;var r=_(t.g);for(r=t.g.g+r;t.g.g<r;)e.push(n.call(t.g))}else e.push(t.g.m());return!0}function Et(t,e,n){return 5===t.h&&(Rt(e,n,t=t.g.m(),0),!0)}function At(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function Ot(t,e,n){return 0===t.h&&(Vt(e,n,_(t.g)),!0)}function Pt(t,e,n){return 0===t.h&&(Rt(e,n,t=_(t.g),0),!0)}function Qt(t,e,n){return 0===t.h&&(Rt(e,n,t=!!_(t.g),!1),!0)}function _t(t,e,n){if(2!==t.h)return!1;var r,i=_(t.g),o=(t=t.g).g;if(t.g+=i,Q(t),t=t.h,H)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return Vt(e,n,r),!0}function Dt(t,e,n,r,i){return 2===t.h&&(t=ot(t,new r,i),e.g||(e.g={}),r=t&&t.u,e.g[n]=t,Vt(e,n,r,!1),!0)}function $t(t,e,n,r,i){return 2===t.h&&(wt(e,n,t=ot(t,new r,i),r,void 0),!0)}function qt(t,e,n){return 0===t.h&&(Vt(e,n,P(t.g)),!0)}function te(t){gt.call(this,t)}function ee(){return{1:Ot,2:jt,3:_t,4:_t}}function ne(t,e){var n=vt(t,1);if(null!=n&&null!=n){et(e.g,8);var r=e.g;if(0<=n)et(r,n);else{for(var i=0;9>i;i++)tt(r,127&n|128),n>>=7;tt(r,1)}}zt(e,t,2),null!=(r=vt(t,3))&&ct(e,3,C(r)),null!=(r=vt(t,4))&&ct(e,4,C(r)),Lt(t,e)}function re(t){gt.call(this,t,-1,oe)}function ie(){return{1:[$t,te,ee]}}m(te,gt),m(re,gt),re.prototype.addClassification=function(t,e){return wt(this,1,t,te,e),this};var oe=[1];function ae(t){gt.call(this,t)}function le(){return{1:jt,2:jt,3:jt,4:jt,5:jt}}function se(t,e){zt(e,t,1),zt(e,t,2),zt(e,t,3),zt(e,t,4),zt(e,t,5),Lt(t,e)}function ce(t){gt.call(this,t,-1,de)}function ue(){return{1:[$t,ae,le]}}m(ae,gt),m(ce,gt);var de=[1];function he(t){gt.call(this,t)}function me(){return{1:jt,2:jt,3:jt,4:jt,5:jt,6:At}}function be(t,e){zt(e,t,1),zt(e,t,2),zt(e,t,3),zt(e,t,4),zt(e,t,5);var n=vt(t,6);if(null!=n&&null!=n){et(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)tt(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;tt(r,n)}Lt(t,e)}function pe(t){gt.call(this,t,-1,Ze)}function fe(){return{1:qt,2:qt,3:Mt,4:[Dt,ge,ye],5:Ot,6:Ot,7:Mt,8:Mt,9:Mt}}function ge(t){gt.call(this,t)}function ye(){return{1:jt,2:jt,3:jt}}m(he,gt),m(pe,gt),m(ge,gt);var Ze=[3,7,8,9];function ve(t){gt.call(this,t)}function Ge(){return{1:Et,2:Et,3:Et}}function Xe(t){gt.call(this,t)}function We(){return{1:Et,2:Et,3:Et}}function Ve(t){gt.call(this,t)}function Re(){return{1:Pt,2:[Dt,Xe,We],3:[Dt,ve,Ge],4:Qt}}function xe(t){gt.call(this,t,-1,we)}function Ie(){return{1:Pt,2:[$t,Ve,Re],3:Et,4:Mt,5:Mt,6:Mt}}m(ve,gt),m(Xe,gt),m(Ve,gt),m(xe,gt);var we=[2,4,5,6];function Se(t){gt.call(this,t,-1,Le)}function Ye(){return{1:Pt,2:[$t,xe,Ie],3:[Dt,pe,fe],4:Ut,5:Mt,6:Mt}}m(Se,gt);var Le=[2,5,6];function He(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function Fe(t){return It(t,te,1).map((function(t){return{index:St(t,1),$:Wt(t,2),label:null!=vt(t,3)?Yt(t,3):void 0,displayName:null!=vt(t,4)?Yt(t,4):void 0}}))}function Ce(t){return{x:Wt(t,1),y:Wt(t,2),z:Wt(t,3),visibility:null!=vt(t,4)?Wt(t,4):void 0}}function Te(t,e){this.h=t,this.g=e,this.l=0}function ke(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=He(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=He(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={J:n.getAttribLocation(r,"aVertex"),I:n.getAttribLocation(r,"aTex"),ja:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.J),n.vertexAttribPointer(t.j.J,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.J),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.J,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.J),n.disableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function Je(t){this.g=t}var Ne=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 Ke(t,e){return e+t}function Be(t,e){window[t]=e}function ze(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||Ke,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.T=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function Ue(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.S?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(Ne),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return Be("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),Be("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=je(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.T)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,je(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.T)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.F=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,m.g=0}}))}function je(t,e){var n,r;return X((function(i){return e in t.G?i.return(t.G[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.G[e]=r,i.return(r))}))}function Me(t,e,n){var r,i,o,l,s,c,u,d,h,m,b,p,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.H=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new Te(t.h,t.F),t.s[e]=r),i.return(ke(r,n,t.H))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=Bt(v.get(R),he,me);x={U:{aa:Wt(x,1),ba:Wt(x,2),height:Wt(x,3),width:Wt(x,4),rotation:Wt(x,5,0),Z:St(x,6)},P:It(Bt(G.get(R),ce,ue),ae,1).map(Ce),N:Fe(Bt(W.get(R),re,ie))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(b=t.s[d])||(b=new Te(t.h,t.F),t.s[d]=b),g(Z,ke(b,m,t.H),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ee(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.D=Me(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.D=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Ae(t){var e=St(t,1),n=xt(t,ve,3);return{id:e,point2d:n={x:Wt(n,1),y:Wt(n,2),depth:Wt(n,3)},point3d:{x:Wt(t=xt(t,Xe,2),1),y:Wt(t,2),z:Wt(t,3)}}}function Oe(t){var e=Bt(t,Se,Ye);t=[],e=It(e,xe,2);for(var n=0;n<e.length;n++)t.push({id:St(e[n],1),keypoints:It(e[n],Ve,2).map(Ae),visibility:Wt(e[n],3),scale:Xt(e[n],6),translation:Xt(e[n],5),rotation:Xt(e[n],4)});return t}function Pe(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}(t=ze.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={L:o.L,M:o.M},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.L=s.onChange,o.M=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.L(t.M),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.B=(void 0===this.B?[]:this.B).concat(i),this.A=(void 0===this.A?[]:this.A).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,Ue(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.R=t.g.graph.url,g(u,je(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.C)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.C[i]);if(t.C={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ee(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.A){s.g=2;break}e=a(t.A),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.B),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.B=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.C[t]=e},t.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.D,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var b=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new Te(h.h,h.F),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&b instanceof HTMLVideoElement)var f=b.videoWidth,y=b.videoHeight;else typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(f=b.naturalWidth,y=b.naturalHeight):(f=b.width,y=b.height);y={glName:p.l,width:f,height:y},(f=p.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),p.h.bindTexture2d(p.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,b),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new Je(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(b.length),y=0;y<b.length;++y){f=b[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=f.U,W=new he;if(Vt(W,1,X.aa),Vt(W,2,X.ba),Vt(W,3,X.height),Vt(W,4,X.width),Vt(W,5,X.rotation),Vt(W,6,X.Z),X=Kt(W,be),v.call(Z,G,X),f.P)for(Z=0;Z<f.P.length;++Z){var V=!!(W=f.P[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),Vt(V=new ae,1,W.x),Vt(V,2,W.y),Vt(V,3,W.z),W.visibility&&Vt(V,4,W.visibility),W=Kt(V,se),G.call(v,X,W)}if(f.N)for(Z=0;Z<f.N.length;++Z)G=(v=p.data).addClassification,X=y,W=f.N[Z],Vt(V=new te,2,W.$),W.index&&Vt(V,1,W.index),W.label&&Vt(V,3,W.label),W.displayName&&Vt(V,4,W.displayName),W=Kt(V,ne),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.D,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ze),R("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});var Qe={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 _e(t){var e=this;t=t||{},this.g=new ze({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:Oe}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("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(t){var n,r,i,o;return X((function(a){return 1==a.g?(n=t,e.g.setOptions({allowedLabels:Pe(n)},Qe),r=function(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"}}(n),i="object_detection_3d.tflite",g(a,je(e.g,r),2)):(o=a.h,e.g.overrideFile(i,o),a.return(!0))}))}},focalLength:{default:[1,1],onChange:function(t){var n;return X((function(r){return n=t,e.h=n,e.g.setOptions({focalX:n[0],focalY:n[1]},Qe),r.return(!0)}))}},principalPoint:{default:[0,0],onChange:function(t){var n;return X((function(r){return n=t,e.i=n,e.g.setOptions({principalX:n[0],principalY:n[1]},Qe),r.return(!0)}))}},imageSize:{onChange:function(t){var n,r,i,o;return X((function(a){if(void 0===e.h||void 0===e.i)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),a.return();r=[(n=t)[0]/2,n[1]/2],i=[e.h[0]/r[0],e.h[1]/r[1]],o=[e.i[0]/r[0],e.i[1]/r[1]],e.setOptions({focalLength:i,principalPoint:o}),a.g=0}))}}}})}(t=_e.prototype).close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.reset=function(){this.g.reset()},t.send=function(t){var e=this;return X((function(n){return g(n,e.g.send(t),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Objectron",_e),R("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]]),R("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}),R("VERSION","0.4.1636596145")}).call(Li);const Fi={};(function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var i=r;t=t.split(".");for(var o=0;o<t.length-1;o++){var a=t[o];if(!(a in i))break t;i=i[a]}(e=e(o=i[t=t[t.length-1]]))!=o&&null!=e&&n(i,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var n=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}i("Symbol",(function(t){function e(t,e){this.g=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",i=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+i++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var i="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<i.length;a++){var l=r[i[a]];"function"==typeof l&&"function"!=typeof l.prototype[t]&&n(l.prototype,t,{configurable:!0,writable:!0,value:function(){return o(e(this))}})}return t}));var s,c="function"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if("function"==typeof Object.setPrototypeOf)s=Object.setPrototypeOf;else{var u;t:{var d={};try{d.__proto__={a:!0},u=d.a;break t}catch{}u=!1}s=u?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var h=s;function m(t,e){if(t.prototype=c(e.prototype),t.prototype.constructor=t,h)h(t,e);else for(var n in e)if("prototype"!=n)if(Object.defineProperties){var r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}else t[n]=e[n];t.ea=e.prototype}function b(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function p(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}function f(t,e){t.j={U:e,V:!0},t.g=t.m||t.s}function g(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new b,this.h=t}function Z(t,e,n,r){try{var i=e.call(t.g.i,n);if(!(i instanceof Object))throw new TypeError("Iterator result "+i+" is not an object");if(!i.done)return t.g.l=!1,i;var o=i.value}catch(e){return t.g.i=null,f(t.g,e),v(t)}return t.g.i=null,r.call(t.g,o),v(t)}function v(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,f(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.V)throw e.U;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function G(t){this.next=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=v(t)),e},this.throw=function(e){return p(t.g),t.g.i?e=Z(t,t.g.i.throw,e,t.g.o):(f(t.g,e),e=v(t)),e},this.return=function(e){return function(t,e){p(t.g);var n=t.g.i;return n?Z(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),v(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function X(t){return function(t){function e(e){return t.next(e)}function n(e){return t.throw(e)}return new Promise((function(r,i){!function t(o){o.done?r(o.value):Promise.resolve(o.value).then(e,n).then(t,i)}(t.next())}))}(new G(new y(t)))}b.prototype.o=function(t){this.h=t},b.prototype.return=function(t){this.j={return:t},this.g=this.s},i("Promise",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var o=r.setTimeout;n.prototype.i=function(t){o(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(r){n||(n=!0,t.call(e,r))}}var e=this,n=!1;return{resolve:t(this.C),reject:t(this.l)}},e.prototype.C=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof e)this.F(t);else{t:switch(typeof t){case"object":var n=null!=t;break t;case"function":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}"function"==typeof e?this.G(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error("Cannot settle("+t+", "+e+"): Promise already settled in state"+this.h);this.h=t,this.i=e,2===this.h&&this.D(),this.A()},e.prototype.D=function(){var t=this;o((function(){if(t.B()){var e=r.console;typeof e<"u"&&e.error(t.i)}}),1)},e.prototype.B=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return typeof n>"u"||("function"==typeof t?t=new t("unhandledrejection",{cancelable:!0}):"function"==typeof e?t=new e("unhandledrejection",{cancelable:!0}):(t=r.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.A=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)l.h(this.g[t]);this.g=null}};var l=new n;return e.prototype.F=function(t){var e=this.j();t.J(e.resolve,e.reject)},e.prototype.G=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function r(t,e){return"function"==typeof t?function(e){try{i(t(e))}catch(t){o(t)}}:e}var i,o,a=new e((function(t,e){i=t,o=e}));return this.J(r(t,i),r(n,o)),a},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.J=function(t,e){function n(){switch(r.h){case 1:t(r.i);break;case 2:e(r.i);break;default:throw Error("Unexpected state: "+r.h)}}var r=this;null==this.g?l.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),o=r.next();!o.done;o=r.next())i(o.value).J(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function o(e){return function(n){a[e]=n,0==--l&&t(a)}}var a=[],l=0;do{a.push(void 0),l++,i(r.value).J(o(a.length-1),e),r=n.next()}while(!r.done)}))},e}));var W="function"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var r=arguments[n];if(r)for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t};i("Object.assign",(function(t){return t||W})),i("Object.is",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),i("Array.prototype.includes",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var r=n.length;for(0>(e=e||0)&&(e=Math.max(e+r,0));e<r;e++){var i=n[e];if(i===t||Object.is(i,t))return!0}return!1}})),i("String.prototype.includes",(function(t){return t||function(t,e){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e||0)}})),i("Array.prototype.keys",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,i={next:function(){if(!r&&n<t.length){var i=n++;return{value:e(i,t[i]),done:!1}}return r=!0,{done:!0,value:void 0}}};return i[Symbol.iterator]=function(){return i},i}(this,(function(t){return t}))}}));var V=this||self;function R(t,e){t=t.split(".");var n,r=V;t[0]in r||typeof r.execScript>"u"||r.execScript("var "+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?r=r[n]&&r[n]!==Object.prototype[n]?r[n]:r[n]={}:r[n]=e}function x(t){!function(t){V.setTimeout((function(){throw t}),0)}(t)}function I(t,e){x(Error("Invalid wire type: "+t+" (at position "+e+")"))}function w(){x(Error("Failed to read varint, encoding is invalid."))}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var Y,L,H=typeof TextDecoder<"u",F=typeof TextEncoder<"u";function C(t){if(F)t=(L||(L=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,r=new Uint8Array(3*t.length),i=0;i<t.length;i++){var o=t.charCodeAt(i);if(128>o)r[n++]=o;else{if(2048>o)r[n++]=o>>6|192;else{if(55296<=o&&57343>=o){if(56319>=o&&i<t.length){var a=t.charCodeAt(++i);if(56320<=a&&57343>=a){o=1024*(o-55296)+a-56320+65536,r[n++]=o>>18|240,r[n++]=o>>12&63|128,r[n++]=o>>6&63|128,r[n++]=63&o|128;continue}i--}if(e)throw Error("Found an unpaired surrogate");o=65533}r[n++]=o>>12|224,r[n++]=o>>6&63|128}r[n++]=63&o|128}}t=r.subarray(0,n)}return t}var T={},k=null;function J(t){var e;void 0===e&&(e=0),K(),e=T[e];for(var n=Array(Math.floor(t.length/3)),r=e[64]||"",i=0,o=0;i<t.length-2;i+=3){var a=t[i],l=t[i+1],s=t[i+2],c=e[a>>2];a=e[(3&a)<<4|l>>4],l=e[(15&l)<<2|s>>6],s=e[63&s],n[o++]=c+a+l+s}switch(c=0,s=r,t.length-i){case 2:s=e[(15&(c=t[i+1]))<<2]||r;case 1:t=t[i],n[o]=e[t>>2]+e[(3&t)<<4|c>>4]+s+r}return n.join("")}function N(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!="=.".indexOf(t[e-1])&&(n=-1!="=.".indexOf(t[e-2])?n-2:n-1);var r=new Uint8Array(n),i=0;return function(t,e){function n(e){for(;r<t.length;){var n=t.charAt(r++),i=k[n];if(null!=i)return i;if(!/^[\s\xa0]*$/.test(n))throw Error("Unknown base64 encoding at char: "+n)}return e}K();for(var r=0;;){var i=n(-1),o=n(0),a=n(64),l=n(64);if(64===l&&-1===i)break;e(i<<2|o>>4),64!=a&&(e(o<<4&240|a>>2),64!=l&&e(a<<6&192|l))}}(t,(function(t){r[i++]=t})),r.subarray(0,i)}function K(){if(!k){k={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],n=0;5>n;n++){var r=t.concat(e[n].split(""));T[n]=r;for(var i=0;i<r.length;i++){var o=r[i];void 0===k[o]&&(k[o]=i)}}}}var B,z="function"==typeof Uint8Array;function U(t){if(this.g=t,null!==t&&0===t.length)throw Error("ByteString should be constructed with non-empty values")}U.prototype.toJSON=function(){if(null==this.g)var t="";else t=this.g,t=this.g=null==t||"string"==typeof t?t:z&&t instanceof Uint8Array?J(t):null;return t};var j="function"==typeof Uint8Array.prototype.slice;function M(t,e,n){return e===n?B||(B=new Uint8Array(0)):j?t.slice(e,n):new Uint8Array(t.subarray(e,n))}var E=0;function A(t,e){e=void 0!==(e=void 0===e?{}:e).u&&e.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=e,t&&O(this,t)}function O(t,e){t.h=function(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 N(t);if(t.constructor===U){if(null==t.g)var e=B||(B=new Uint8Array(0));else{e=Uint8Array;var n=t.g;n=null==n||z&&null!=n&&n instanceof Uint8Array?n:"string"==typeof n?N(n):null,e=new e(t=t.g=n)}return e}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")}(e),t.l=0,t.i=t.h.length,t.g=t.l}function P(t){t.g>t.i&&(t.j=!0,x(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function Q(t){var e=t.h,n=e[t.g],r=127&n;return 128>n?(t.g+=1,P(t),r):(r|=(127&(n=e[t.g+1]))<<7,128>n?(t.g+=2,P(t),r):(r|=(127&(n=e[t.g+2]))<<14,128>n?(t.g+=3,P(t),r):(r|=(127&(n=e[t.g+3]))<<21,128>n?(t.g+=4,P(t),r):(r|=(15&(n=e[t.g+4]))<<28,128>n?(t.g+=5,P(t),r>>>0):(t.g+=5,128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]&&128<=e[t.g++]?(t.j=!0,w(),r):(P(t),r))))))}A.prototype.reset=function(){this.g=this.l};var _=[];function D(){this.g=new Uint8Array(64),this.h=0}function $(t,e){if(!(t.h+1<t.g.length)){var n=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(n)}t.g[t.h++]=e}function q(t,e){for(;127<e;)$(t,127&e|128),e>>>=7;$(t,e)}function tt(t){var e={},n=void 0!==e.N&&e.N;this.m={u:void 0!==e.u&&e.u},this.N=n,e=this.m,_.length?(n=_.pop(),e&&(n.u=e.u),t&&O(n,t),t=n):t=new A(t,e),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}function et(t){var e=t.g;if((e=e.g==e.i)||(e=t.j)||(e=(e=t.g).j||0>e.g||e.g>e.i),e)return!1;t.l=t.g.g;var n=Q(t.g);return e=n>>>3,0<=(n&=7)&&5>=n?(t.i=e,t.h=n,!0):(t.j=!0,I(n,t.l),!1)}function nt(t){switch(t.h){case 0:if(0!=t.h)nt(t);else t:{for(var e=(t=t.g).g,n=0;10>n;n++){if(0==(128&t.h[e])){t.g=e+1,P(t);break t}e++}t.j=!0,w()}break;case 1:(t=t.g).g+=8,P(t);break;case 2:2!=t.h?nt(t):(e=Q(t.g),(t=t.g).g+=e,P(t));break;case 5:(t=t.g).g+=4,P(t);break;case 3:for(e=t.i;;){if(!et(t)){t.j=!0,x(Error("Unmatched start-group tag: stream EOF"));break}if(4==t.h){t.i!=e&&(t.j=!0,x(Error("Unmatched end-group tag")));break}nt(t)}break;default:t.j=!0,I(t.h,t.l)}}function rt(t,e,n){t.N||(t=M(t.g.h,n,t.g.g),(n=e.m)?n.push(t):e.m=[t])}D.prototype.length=function(){return this.h},D.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,M(t,0,e)},tt.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};var it=[];function ot(){this.h=[],this.i=0,this.g=new D}function at(t,e){0!==e.length&&(t.h.push(e),t.i+=e.length)}function lt(t,e,n){q(t.g,8*e+2),q(t.g,n.length),at(t,t.g.end()),at(t,n)}var st,ct="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol(void 0):void 0;function ut(t,e){Object.isFrozen(t)||(ct?t[ct]|=e:void 0!==t.g?t.g|=e:Object.defineProperties(t,{g:{value:e,configurable:!0,writable:!0,enumerable:!1}}))}function dt(t){return t?null==(e=ct?t[ct]:t.g)?0:e:0;var e}function ht(t){return Array.isArray(t)&&ut(t,1),t}function mt(t){if(!Array.isArray(t))throw Error("cannot mark non-array as immutable");ut(t,2)}function bt(t){return null!==t&&"object"==typeof t&&t.constructor===Object}function pt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":return z&&null!=t&&t instanceof Uint8Array?J(t):t;default:return t}}function ft(t,e){if(null!=t)return Array.isArray(t)||bt(t)?gt(t,e):e(t)}function gt(t,e){if(Array.isArray(t)){for(var n=Array(t.length),r=0;r<t.length;r++)n[r]=ft(t[r],e);return 1&dt(t)&&ht(n),n}for(r in n={},t)n[r]=ft(t[r],e);return n}function yt(t,e,n){var r=st;if(st=null,t||(t=r),r=this.constructor.ca,t||(t=r?[r]:[]),this.j=(r?0:-1)-(this.constructor.aa||0),this.i=null,this.g=t,t=(r=this.g.length)-1,r&&bt(r=this.g[t])?(this.l=t-this.j,this.h=r):void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.h=null):this.l=Number.MAX_VALUE,n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.g[t])?ht(r):this.g[t]=Gt):(Xt(this),(r=this.h[t])?ht(r):this.h[t]=Gt)}var Zt,vt,Gt=Object.freeze(ht([]));function Xt(t){var e=t.l+t.j;t.g[e]||(t.h=t.g[e]={})}function Wt(t,e,n){return-1===e?null:void 0!==n&&n||e>=t.l?t.h?t.h[e]:void 0:t.g[e+t.j]}function Vt(t,e,n){n=void 0===n||n;var r=void 0!==r&&r,i=Wt(t,e,r);return null==i&&(i=Gt),i===Gt?xt(t,e,i=ht([]),r):n&&Array.isArray(i)&&2&dt(i)&&xt(t,e,i=i.slice(),r),i}function Rt(t,e,n){return null==(t=null==(t=Wt(t,e))?t:+t)?void 0===n?0:n:t}function xt(t,e,n,r){void 0!==r&&r||e>=t.l?(Xt(t),t.h[e]=n):t.g[e+t.j]=n}function It(t,e,n){t.i||(t.i={});var r=t.i[n];if(!r){var i=Vt(t,n,!1);r=[];for(var o=!!Array.isArray(i)&&!!(2&dt(i)),a=0;a<i.length;a++)r[a]=new e(i[a]),o&&mt(r[a].g);o&&(mt(r),Object.freeze(r)),t.i[n]=r}return r}function wt(t,e,n,r,i){var o=It(t,r,e);n=n||new r,t=Vt(t,e),null!=i?(o.splice(i,0,n),t.splice(i,0,St(n))):(o.push(n),t.push(St(n)))}function St(t){if(t.i)for(var e in t.i){var n=t.i[e];if(Array.isArray(n))for(var r=0;r<n.length;r++)n[r]&&St(n[r]);else n&&St(n)}return t.g}function Yt(t,e){return null==(t=Wt(t,e))?0:t}function Lt(t,e){return null==(t=Wt(t,e))?"":t}function Ht(t,e){if(t=t.m){at(e,e.g.end());for(var n=0;n<t.length;n++)at(e,t[n])}}function Ft(t){var e=t[0];switch(t.length){case 2:var n=t[1];return function(t,r,i){return e(t,r,i,n)};case 3:var r=t[1],i=t[2];return function(t,n,o){return e(t,n,o,r,i)};case 4:var o=t[1],a=t[2],l=t[3];return function(t,n,r){return e(t,n,r,o,a,l)};default:throw Error("unsupported number of parameters, expected [2-4], got "+t.length)}}function Ct(t,e,n){for(;et(e)&&4!=e.h;){var r=e.i,i=n[r];if(i){if(Array.isArray(i)&&(i=n[r]=Ft(i)),!i(e,t,r)){i=t;var o=(r=e).l;nt(r),rt(r,i,o)}}else i=t,o=(r=e).l,nt(r),rt(r,i,o)}return t}function Tt(t,e){var n=new ot;if(e(t,n),0===(t=n.i+n.g.length()))n=new Uint8Array(0);else{t=new Uint8Array(t);for(var r=n.h,i=r.length,o=e=0;o<i;o++){var a=r[o];0!==a.length&&(t.set(a,e),e+=a.length)}0!==(i=(r=n.g).h)&&(t.set(r.g.subarray(0,i),e),r.h=0),n.h=[t],n=t}return n}function kt(t,e,n){if(it.length){var r=it.pop();t&&(O(r.g,t),r.i=-1,r.h=-1),t=r}else t=new tt(t);try{return n(new e,t)}finally{(e=t.g).h=null,e.l=0,e.i=0,e.g=0,e.j=!1,e.u=!1,t.i=-1,t.h=-1,t.j=!1,100>it.length&&it.push(t)}}function Jt(t,e,n){if(null!=(e=Wt(e,n))){q(t.g,8*n+5),t=t.g;var r=e;0===(r=(n=0>r?1:0)?-r:r)?0<1/r?E=0:(0,E=2147483648):isNaN(r)?(0,E=2147483647):34028234663852886e22<r?(0,E=(n<<31|2139095040)>>>0):11754943508222875e-54>r?(r=Math.round(r/Math.pow(2,-149)),0,E=(n<<31|r)>>>0):(e=Math.floor(Math.log(r)/Math.LN2),r*=Math.pow(2,-e),16777216<=(r=Math.round(8388608*r))&&++e,0,E=(n<<31|e+127<<23|8388607&r)>>>0),$(t,(n=E)>>>0&255),$(t,n>>>8&255),$(t,n>>>16&255),$(t,n>>>24&255)}}function Nt(t,e,n){if(5!==t.h)return!1;var r=(t=t.g).h[t.g],i=t.h[t.g+1],o=t.h[t.g+2],a=t.h[t.g+3];return t.g+=4,P(t),t=2*((i=(r<<0|i<<8|o<<16|a<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,xt(e,n,255==r?i?NaN:1/0*t:0==r?t*Math.pow(2,-149)*i:t*Math.pow(2,r-150)*(i+Math.pow(2,23))),!0}function Kt(t,e,n){if(0!==t.h)return!1;for(var r=t.g,i=128,o=0,a=t=0;4>a&&128<=i;a++)o|=(127&(i=r.h[r.g++]))<<7*a;if(128<=i&&(o|=(127&(i=r.h[r.g++]))<<28,t|=(127&i)>>4),128<=i)for(a=0;5>a&&128<=i;a++)t|=(127&(i=r.h[r.g++]))<<7*a+3;return 128>i?(r=o>>>0,(t=2147483648&(i=t>>>0))&&(i=~i>>>0,0==(r=1+~r>>>0)&&(i=i+1>>>0)),r=4294967296*i+(r>>>0),t=t?-r:r):(r.j=!0,w(),t=void 0),xt(e,n,t),!0}function Bt(t,e,n){return 0===t.h&&(xt(e,n,Q(t.g)),!0)}function zt(t,e,n){if(2!==t.h)return!1;var r,i=Q(t.g),o=(t=t.g).g;if(t.g+=i,P(t),t=t.h,H)(r=Y)||(r=Y=new TextDecoder("utf-8",{fatal:!1})),r=r.decode(t.subarray(o,o+i));else{i=o+i;for(var a,l,s,c=[],u=null;o<i;)128>(a=t[o++])?c.push(a):224>a?o>=i?c.push(65533):(l=t[o++],194>a||128!=(192&l)?(o--,c.push(65533)):c.push((31&a)<<6|63&l)):240>a?o>=i-1?c.push(65533):128!=(192&(l=t[o++]))||224===a&&160>l||237===a&&160<=l||128!=(192&(r=t[o++]))?(o--,c.push(65533)):c.push((15&a)<<12|(63&l)<<6|63&r):244>=a?o>=i-2?c.push(65533):128!=(192&(l=t[o++]))||l-144+(a<<28)>>30!=0||128!=(192&(r=t[o++]))||128!=(192&(s=t[o++]))?(o--,c.push(65533)):(a=(7&a)<<18|(63&l)<<12|(63&r)<<6|63&s,a-=65536,c.push(55296+(a>>10&1023),56320+(1023&a))):c.push(65533),8192<=c.length&&(u=S(u,c),c.length=0);r=S(u,c)}return xt(e,n,r),!0}function Ut(t,e,n,r,i){if(2!==t.h)return!1;var o=new r,a=t.g.i,l=Q(t.g),s=t.g.g+l;if(t.g.i=s,i(o,t),0!==(i=s-t.g.g))throw Error("Message parsing ended unexpectedly. Expected to read "+l+" bytes, instead read "+(l-i)+" bytes, either the data ended unexpectedly or the message misreported its own length");return t.g.g=s,t.g.i=a,wt(e,n,o,r,void 0),!0}function jt(t){yt.call(this,t)}function Mt(t,e){var n=Wt(t,1);if(null!=n&&null!=n){q(e.g,8);var r=e.g;if(0<=n)q(r,n);else{for(var i=0;9>i;i++)$(r,127&n|128),n>>=7;$(r,1)}}Jt(e,t,2),null!=(r=Wt(t,3))&<(e,3,C(r)),null!=(r=Wt(t,4))&<(e,4,C(r)),Ht(t,e)}function Et(t,e){return Ct(t,e,Zt||(Zt={1:Bt,2:Nt,3:zt,4:zt}))}function At(t){yt.call(this,t,-1,_t)}function Ot(t,e){return Ct(t,e,vt||(vt={1:[Ut,jt,Et]}))}yt.prototype.toJSON=function(){return gt(St(this),pt)},yt.prototype.toString=function(){return St(this).toString()},m(jt,yt),m(At,yt),At.prototype.addClassification=function(t,e){return wt(this,1,t,jt,e),this};var Pt,Qt,_t=[1];function Dt(t){yt.call(this,t)}function $t(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5),Ht(t,e)}function qt(t,e){return Ct(t,e,Pt||(Pt={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt}))}function te(t){yt.call(this,t,-1,re)}function ee(t,e){return Ct(t,e,Qt||(Qt={1:[Ut,Dt,qt]}))}m(Dt,yt),m(te,yt);var ne,re=[1];function ie(t){yt.call(this,t)}function oe(t,e){Jt(e,t,1),Jt(e,t,2),Jt(e,t,3),Jt(e,t,4),Jt(e,t,5);var n=Wt(t,6);if(null!=n&&null!=n){q(e.g,48);var r=e.g,i=n;n=0>i;var o=(i=Math.abs(i))>>>0;for(i=Math.floor((i-o)/4294967296),i>>>=0,n&&(i=~i>>>0,4294967295<(o=1+(~o>>>0))&&(o=0,4294967295<++i&&(i=0))),n=E=o,o=i;0<o||127<n;)$(r,127&n|128),n=(n>>>7|o<<25)>>>0,o>>>=7;$(r,n)}Ht(t,e)}function ae(t,e){return Ct(t,e,ne||(ne={1:Nt,2:Nt,3:Nt,4:Nt,5:Nt,6:Kt}))}function le(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+t.getShaderInfoLog(n));return n}function se(t){return It(t,jt,1).map((function(t){return{index:Yt(t,1),X:Rt(t,2),label:null!=Wt(t,3)?Lt(t,3):void 0,displayName:null!=Wt(t,4)?Lt(t,4):void 0}}))}function ce(t){return{x:Rt(t,1),y:Rt(t,2),z:Rt(t,3),visibility:null!=Wt(t,4)?Rt(t,4):void 0}}function ue(t){return It(kt(t,te,ee),Dt,1).map(ce)}function de(t,e){this.h=t,this.g=e,this.l=0}function he(t,e,n){return function(t,e){var n=t.g;if(void 0===t.m){var r=le(n,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),i=le(n,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),o=n.createProgram();if(n.attachShader(o,r),n.attachShader(o,i),n.linkProgram(o),!n.getProgramParameter(o,n.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+n.getProgramInfoLog(o));r=t.m=o,n.useProgram(r),i=n.getUniformLocation(r,"sampler0"),t.j={I:n.getAttribLocation(r,"aVertex"),H:n.getAttribLocation(r,"aTex"),da:i},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.j.I),n.vertexAttribPointer(t.j.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.j.H),n.vertexAttribPointer(t.j.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(i,0)}r=t.j,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(r.I),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(r.I,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(r.H,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(r.I),n.disableVertexAttribArray(r.H),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}(t,e),"function"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):n?Promise.resolve(t.g.canvas):"function"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.i&&(t.i=document.createElement("canvas")),new Promise((function(e){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),e(t.i)})))}function me(t){this.g=t}m(ie,yt);var be=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 pe(t,e){return e+t}function fe(t,e){window[t]=e}function ge(t){if(this.g=t,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=t&&t.locateFile||pe,"object"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else{if(!(typeof location<"u"))throw Error("solutions can only be loaded on a web page or in a web worker");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/"}if(this.S=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var r=t.options[n].default;void 0!==r&&(this.j[n]="function"==typeof r?r():r)}}function ye(t){var e,n,r,i,o,a,s,c,u,d,h;return X((function(m){switch(m.g){case 1:return t.R?(e=void 0===t.g.files?[]:"function"==typeof t.g.files?t.g.files(t.j):t.g.files,g(m,X((function(t){switch(t.g){case 1:return t.m=2,g(t,WebAssembly.instantiate(be),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)}})),2)):m.return();case 2:if(n=m.h,"object"==typeof window)return fe("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),fe("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),a=e.filter((function(t){return void 0!==t.data})),s=e.filter((function(t){return void 0===t.data})),c=Promise.all(a.map((function(e){var n=Ze(t,e.url);if(void 0!==e.path){var r=e.path;n=n.then((function(e){return t.overrideFile(r,e),Promise.resolve(e)}))}return n}))),u=Promise.all(s.map((function(e){return void 0===e.simd||e.simd&&n||!e.simd&&!n?function(t){var e=document.createElement("script");return e.setAttribute("src",t),e.setAttribute("crossorigin","anonymous"),new Promise((function(t){e.addEventListener("load",(function(){t()}),!1),e.addEventListener("error",(function(){t()}),!1),document.body.appendChild(e)}))}(t.locateFile(e.url,t.S)):Promise.resolve()}))).then((function(){var e,n,r;return X((function(i){if(1==i.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,r=t,g(i,e(n),2);r.h=i.h,i.g=0}))})),d=X((function(e){return t.g.graph&&t.g.graph.url?e=g(e,Ze(t,t.g.graph.url),0):(e.g=0,e=void 0),e})),g(m,Promise.all([u,c,d]),7);if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return r=e.filter((function(t){return void 0===t.simd||t.simd&&n||!t.simd&&!n})).map((function(e){return t.locateFile(e.url,t.S)})),importScripts.apply(null,l(r)),i=t,g(m,createMediapipeSolutionsWasm(Module),6);case 6:i.h=m.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,o=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(o),m.g=4;break;case 7:if(t.l=document.createElement("canvas"),!(h=t.l.getContext("webgl2",{}))&&!(h=t.l.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),m.return();t.D=h,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.R=!1,m.g=0}}))}function Ze(t,e){var n,r;return X((function(i){return e in t.F?i.return(t.F[e]):(n=t.locateFile(e,""),r=fetch(n).then((function(t){return t.arrayBuffer()})),t.F[e]=r,i.return(r))}))}function ve(t,e,n){var r,i,o,l,s,c,u,d,h,m,b,p,f,y;return X((function(Z){switch(Z.g){case 1:if(!n)return Z.return(e);for(r={},i=0,o=a(Object.keys(n)),l=o.next();!l.done;l=o.next())s=l.value,"string"!=typeof(c=n[s])&&"texture"===c.type&&void 0!==e[c.stream]&&++i;1<i&&(t.G=!1),u=a(Object.keys(n)),l=u.next();case 2:if(l.done){Z.g=4;break}if(d=l.value,"string"==typeof(h=n[d]))return f=r,y=d,g(Z,function(t,e,n){var r;return X((function(i){return"number"==typeof n||n instanceof Uint8Array||n instanceof t.h.Uint8BlobList?i.return(n):n instanceof t.h.Texture2dDataOut?((r=t.s[e])||(r=new de(t.h,t.D),t.s[e]=r),i.return(he(r,n,t.G))):i.return(void 0)}))}(t,d,e[h]),14);if(m=e[h.stream],"detection_list"===h.type){if(m){for(var v=m.getRectList(),G=m.getLandmarksList(),W=m.getClassificationsList(),V=[],R=0;R<v.size();++R){var x=kt(v.get(R),ie,ae);x={T:{Y:Rt(x,1),Z:Rt(x,2),height:Rt(x,3),width:Rt(x,4),rotation:Rt(x,5,0),W:Yt(x,6)},O:ue(G.get(R)),M:se(kt(W.get(R),At,Ot))},V.push(x)}v=V}else v=[];r[d]=v,Z.g=7;break}if("proto_list"===h.type){if(m){for(v=Array(m.size()),G=0;G<m.size();G++)v[G]=m.get(G);m.delete()}else v=[];r[d]=v,Z.g=7;break}if(void 0===m){Z.g=3;break}if("float_list"===h.type){r[d]=m,Z.g=7;break}if("proto"===h.type){r[d]=m,Z.g=7;break}if("texture"!==h.type)throw Error("Unknown output config type: '"+h.type+"'");return(b=t.s[d])||(b=new de(t.h,t.D),t.s[d]=b),g(Z,he(b,m,t.G),13);case 13:p=Z.h,r[d]=p;case 7:h.transform&&r[d]&&(r[d]=h.transform(r[d])),Z.g=3;break;case 14:f[y]=Z.h;case 3:l=u.next(),Z.g=2;break;case 4:return Z.return(r)}}))}function Ge(t,e){for(var n=e.name||"$",r=[].concat(l(e.wants)),i=new t.h.StringList,o=a(e.wants),s=o.next();!s.done;s=o.next())i.push_back(s.value);o=t.h.PacketListener.implement({onResults:function(i){for(var o={},a=0;a<e.wants.length;++a)o[r[a]]=i.get(a);var l=t.listeners[n];l&&(t.C=ve(t,o,e.outs).then((function(n){n=l(n);for(var i=0;i<e.wants.length;++i){var a=o[r[i]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}n&&(t.C=n)})))}}),t.i.attachMultiListener(i,o),i.delete()}function Xe(t){switch(void 0===t&&(t=0),t){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function We(t){var e=this;t=t||{},this.g=new ge({locateFile:t.locateFile,files:function(t){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:Xe(t.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:ue},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:ue},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(t){var n,r,i;return X((function(o){return 1==o.g?(n=Xe(t),r="third_party/mediapipe/modules/pose_landmark/"+n,g(o,Ze(e.g,n),2)):(i=o.h,e.g.overrideFile(r,i),o.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"}}}})}(t=ge.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},t.reset=function(){var t=this;return X((function(e){t.i&&(t.i.reset(),t.m={},t.s={}),e.g=0}))},t.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var r=[],i=[],o={},l=a(Object.keys(t)),s=l.next();!s.done;o={K:o.K,L:o.L},s=l.next()){var c=s.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(s=e[c])&&(s.onChange&&(o.K=s.onChange,o.L=t[c],r.push(function(t){return function(){return X((function(e){if(1==e.g)return g(e,t.K(t.L),2);!0===e.h&&(n.o=!0),e.g=0}))}}(o))),s.graphOptionXref&&(c={valueNumber:1===s.type?t[c]:0,valueBoolean:0===s.type&&t[c],valueString:2===s.type?t[c]:""},s=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),s.graphOptionXref),c),i.push(s))))}(0!==r.length||0!==i.length)&&(this.o=!0,this.A=(void 0===this.A?[]:this.A).concat(i),this.v=(void 0===this.v?[]:this.v).concat(r))}},t.initialize=function(){var t=this;return X((function(e){return 1==e.g?g(e,ye(t),2):3!=e.g?g(e,function(t){var e,n,r,i,o,l,s,c;return X((function(u){if(1==u.g)return t.g.graph&&t.g.graph.url&&t.P===t.g.graph.url?u.return():(t.o=!0,t.g.graph&&t.g.graph.url?(t.P=t.g.graph.url,g(u,Ze(t,t.g.graph.url),3)):void(u.g=2));for(2!=u.g&&(e=u.h,t.i.loadGraph(e)),n=a(Object.keys(t.B)),r=n.next();!r.done;r=n.next())i=r.value,t.i.overrideFile(i,t.B[i]);if(t.B={},t.g.listeners)for(o=a(t.g.listeners),l=o.next();!l.done;l=o.next())s=l.value,Ge(t,s);c=t.j,t.j={},t.setOptions(c),u.g=0}))}(t),3):g(e,function(t){var e,n,r,i,o,l;return X((function(s){switch(s.g){case 1:if(!t.o)return s.return();if(!t.v){s.g=2;break}e=a(t.v),n=e.next();case 3:if(n.done){s.g=5;break}return g(s,(0,n.value)(),4);case 4:n=e.next(),s.g=3;break;case 5:t.v=void 0;case 2:if(t.A){for(r=new t.h.GraphOptionChangeRequestList,i=a(t.A),o=i.next();!o.done;o=i.next())l=o.value,r.push_back(l);t.i.changeOptions(r),r.delete(),t.A=void 0}t.o=!1,s.g=0}}))}(t),0)}))},t.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.B[t]=e},t.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},t.send=function(t,e){var n,r,i,o,l,s,c,u,d,h=this;return X((function(m){switch(m.g){case 1:return h.g.inputs?(n=1e3*(null==e?performance.now():e),g(m,h.C,2)):m.return();case 2:return g(m,h.initialize(),3);case 3:for(r=new h.h.PacketDataList,i=a(Object.keys(t)),o=i.next();!o.done;o=i.next())if(l=o.value,s=h.g.inputs[l]){t:{var b=t[l];switch(s.type){case"video":var p=h.m[s.stream];if(p||(p=new de(h.h,h.D),h.m[s.stream]=p),0===p.l&&(p.l=p.h.createTexture()),typeof HTMLVideoElement<"u"&&b instanceof HTMLVideoElement)var f=b.videoWidth,y=b.videoHeight;else typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(f=b.naturalWidth,y=b.naturalHeight):(f=b.width,y=b.height);y={glName:p.l,width:f,height:y},(f=p.g).canvas.width=y.width,f.canvas.height=y.height,f.activeTexture(f.TEXTURE0),p.h.bindTexture2d(p.l),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,b),p.h.bindTexture2d(0),p=y;break t;case"detections":for((p=h.m[s.stream])||(p=new me(h.h),h.m[s.stream]=p),p.data||(p.data=new p.g.DetectionListData),p.data.reset(b.length),y=0;y<b.length;++y){f=b[y];var Z=p.data,v=Z.setBoundingBox,G=y,X=f.T,W=new ie;if(xt(W,1,X.Y),xt(W,2,X.Z),xt(W,3,X.height),xt(W,4,X.width),xt(W,5,X.rotation),xt(W,6,X.W),X=Tt(W,oe),v.call(Z,G,X),f.O)for(Z=0;Z<f.O.length;++Z){var V=!!(W=f.O[Z]).visibility;G=(v=p.data).addNormalizedLandmark,X=y,W=Object.assign(Object.assign({},W),{visibility:V?W.visibility:0}),xt(V=new Dt,1,W.x),xt(V,2,W.y),xt(V,3,W.z),W.visibility&&xt(V,4,W.visibility),W=Tt(V,$t),G.call(v,X,W)}if(f.M)for(Z=0;Z<f.M.length;++Z)G=(v=p.data).addClassification,X=y,W=f.M[Z],xt(V=new jt,2,W.X),W.index&&xt(V,1,W.index),W.label&&xt(V,3,W.label),W.displayName&&xt(V,4,W.displayName),W=Tt(V,Mt),G.call(v,X,W)}p=p.data;break t;default:p={}}}switch(c=p,u=s.stream,s.type){case"video":r.pushTexture2d(Object.assign(Object.assign({},c),{stream:u,timestamp:n}));break;case"detections":(d=c).stream=u,d.timestamp=n,r.pushDetectionList(d);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return h.i.send(r),g(m,h.C,4);case 4:r.delete(),m.g=0}}))},t.onResults=function(t,e){this.listeners[e||"$"]=t},R("Solution",ge),R("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(t=We.prototype).reset=function(){this.g.reset()},t.close=function(){return this.g.close(),Promise.resolve()},t.onResults=function(t){this.g.onResults(t)},t.initialize=function(){var t=this;return X((function(e){return g(e,t.g.initialize(),0)}))},t.send=function(t,e){var n=this;return X((function(r){return g(r,n.g.send(t,e),0)}))},t.setOptions=function(t){this.g.setOptions(t)},R("Pose",We),R("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]]),R("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}),R("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}),R("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}),R("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),R("VERSION","0.5.1635988162")}).call(Fi);const qn=class{constructor(){gt(this,"mediapipeMap_",new Map)}getVersion(t){switch(t){case"face_detection":return Yi.VERSION;case"face_mesh":return wi.VERSION;case"hands":return Si.VERSION;case"holistic":return Ti.VERSION;case"objectron":return Li.VERSION;case"selfie_segmentation":return Ii.VERSION;case"pose":return Fi.VERSION;default:return""}}initialize(t){return new Promise((async(e,n)=>{if(0!=t.mediaPipeModelConfigArray.length){for(let e=0;e<t.mediaPipeModelConfigArray.length;e++){const r=t.mediaPipeModelConfigArray[e];if(this.mediapipeMap_.has(r.modelType))return void n("setting same type is not supported");if("function"!=typeof r.listener)return void n(`[${r.modelType}] ResultsListener must be provided`);let i;switch(r.modelType){case"face_mesh":i=new wi.FaceMesh({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+t});break;case"face_detection":i=new Yi.FaceDetection({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+t});break;case"hands":i=new Si.Hands({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+t});break;case"holistic":i=new Ti.Holistic({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+t});break;case"objectron":i=new Li.Objectron({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+t});break;case"selfie_segmentation":i=new Ii.SelfieSegmentation({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+t});break;case"pose":i=new Fi.Pose({locateFile:(t,e)=>(r.assetsUri||qn.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+t});break;default:return void n("unknown model type")}i.onResults(r.listener),r.options&&i.setOptions(r.options);try{await i.initialize(),this.mediapipeMap_.set(r.modelType,i)}catch(t){return void n(t)}}e()}else n("no model was selected")}))}close(t){return new Promise(((e,n)=>{let r=[];if(t){let e=this.mediapipeMap_.get(t);if(!e)return void n("model not exit");this.mediapipeMap_.delete(t),r.push(e.close())}else{for(const[t,e]of this.mediapipeMap_.entries())r.push(e.close());this.mediapipeMap_.clear()}Promise.all(r).then((()=>{e()})).catch((t=>{n(t)}))}))}send(t,e){return new Promise(((n,r)=>{let i=[];if(e){let n=this.mediapipeMap_.get(e);if(!n)return void r("model not exit");i.push(n.send({image:t}))}else for(const[e,n]of this.mediapipeMap_.entries())i.push(n.send({image:t}));Promise.all(i).then((()=>{n()})).catch((t=>{r(t)}))}))}reset(t){if(t){let e=this.mediapipeMap_.get(t);e&&"function"==typeof e.reset&&e.reset()}else for(const[t,e]of this.mediapipeMap_.entries())e&&"function"==typeof e.reset&&e.reset()}};let ho=qn;gt(ho,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const or=new WeakMap,gr=new WeakMap,tr=new WeakMap,Ci=Symbol("anyProducer"),gs=Promise.resolve(),Hi=Symbol("listenerAdded"),Ji=Symbol("listenerRemoved");let Ni=!1,fo=!1;function Yr(t){if("string"!=typeof t&&"symbol"!=typeof t&&"number"!=typeof t)throw new TypeError("`eventName` must be a string, symbol, or number")}function li(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function wr(t,e){const n=gr.get(t);if(n.has(e))return n.get(e)}function Pr(t,e){const n="string"==typeof e||"symbol"==typeof e||"number"==typeof e?e:Ci,r=tr.get(t);if(r.has(n))return r.get(n)}function oc(t,e,n){const r=tr.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Ci)){const t=Promise.all([e,n]);for(const e of r.get(Ci))e.enqueue(t)}}function Zs(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e){let e=Pr(t,n);e||(e=new Set,tr.get(t).set(n,e)),e.add(o)}return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e){const e=Pr(t,n);e&&(e.delete(o),0===e.size&&tr.get(t).delete(n))}return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function vs(t){if(void 0===t)return Gs;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Gs.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const kr=t=>t===Hi||t===Ji;function ci(t,e,n){if(kr(e))try{Ni=!0,t.emit(e,n)}finally{Ni=!1}}class ar{static mixin(t,e){return e=vs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new ar}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){var t,e;if("object"!=typeof(null==(t=globalThis.process)?void 0:t.env))return fo;const{env:n}=null!=(e=globalThis.process)?e:{env:{}};return"emittery"===n.DEBUG||"*"===n.DEBUG||fo}static set isDebugEnabled(t){fo=t}constructor(t={}){var e;or.set(this,new Set),gr.set(this,new Map),tr.set(this,new Map),tr.get(this).set(Ci,new Set),this.debug=null!=(e=t.debug)?e:{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}("symbol"==typeof n||"number"==typeof n)&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(ar.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){li(e),t=Array.isArray(t)?t:[t];for(const n of t){Yr(n);let t=wr(this,n);t||(t=new Set,gr.get(this).set(n,t)),t.add(e),this.logIfDebugEnabled("subscribe",n,void 0),kr(n)||ci(this,Hi,{eventName:n,listener:e})}return this.off.bind(this,t,e)}off(t,e){li(e),t=Array.isArray(t)?t:[t];for(const n of t){Yr(n);const t=wr(this,n);t&&(t.delete(e),0===t.size&&gr.get(this).delete(n)),this.logIfDebugEnabled("unsubscribe",n,void 0),kr(n)||ci(this,Ji,{eventName:n,listener:e})}}once(t){let e;const n=new Promise((n=>{e=this.on(t,(t=>{e(),n(t)}))}));return n.off=e,n}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Yr(e);return Zs(this,t)}async emit(t,e){var n;if(Yr(t),kr(t)&&!Ni)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",t,e),oc(this,t,e);const r=null!=(n=wr(this,t))?n:new Set,i=or.get(this),o=[...r],a=kr(t)?[]:[...i];await gs,await Promise.all([...o.map((async t=>{if(r.has(t))return t(e)})),...a.map((async n=>{if(i.has(n))return n(t,e)}))])}async emitSerial(t,e){var n;if(Yr(t),kr(t)&&!Ni)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",t,e);const r=null!=(n=wr(this,t))?n:new Set,i=or.get(this),o=[...r],a=[...i];await gs;for(const t of o)r.has(t)&&await t(e);for(const n of a)i.has(n)&&await n(t,e)}onAny(t){return li(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(t),ci(this,Hi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Zs(this)}offAny(t){li(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),ci(this,Ji,{listener:t}),or.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e||"number"==typeof e){const t=wr(this,e);t&&t.clear();const n=Pr(this,e);if(n){for(const t of n)t.finish();n.clear()}}else{or.get(this).clear();for(const[t,e]of gr.get(this).entries())e.clear(),gr.get(this).delete(t);for(const[t,e]of tr.get(this).entries()){for(const t of e)t.finish();e.clear(),tr.get(this).delete(t)}}}listenerCount(t){var e,n,r,i,o,a;t=Array.isArray(t)?t:[t];let l=0;for(const s of t)if("string"!=typeof s){typeof s<"u"&&Yr(s),l+=or.get(this).size;for(const t of gr.get(this).values())l+=t.size;for(const t of tr.get(this).values())l+=t.size}else l+=or.get(this).size+(null!=(n=null==(e=wr(this,s))?void 0:e.size)?n:0)+(null!=(i=null==(r=Pr(this,s))?void 0:r.size)?i:0)+(null!=(a=null==(o=Pr(this))?void 0:o.size)?a:0);return l}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=vs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Gs=Object.getOwnPropertyNames(ar.prototype).filter((t=>"constructor"!==t));function Co(t,e){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let n=globalThis.vonage.workerizer;return n[t]||(n[t]=e),n[t]}Object.defineProperty(ar,"listenerAdded",{value:Hi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(ar,"listenerRemoved",{value:Ji,writable:!1,enumerable:!0,configurable:!1});const Br=Co("globals",{});var _n=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t.EVENT="EVENT",t))(_n||{});function _s(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let sc=0;function ki(t,e,n,r,i){const o=sc++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>_s(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function Kr(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>_s(t))))}const Ei=Co("workerized",{});function Ho(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function lc(){if(Ho())Kr({type:_n.GLOBALS_SYNC},Br);else{const t=[];for(const e in Ei){const{worker:n,resolvers:r}=Ei[e].workerContext;n&&t.push(ki(n,_n.GLOBALS_SYNC,"",[Br],r))}await Promise.all(t)}}function Qr(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Qr(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Qr(t[n],e[n])):e[n]=t[n]}async function cc(t,e,n,r){const i=new e;if(i.addEventListener("message",(async({data:t})=>{var e,i,o,a,l,s,c;switch(t.type){case _n.GLOBALS_SYNC:t.id?(null==(i=n.get(null!=(e=t.id)?e:-1))||i(t.result),n.delete(null!=(o=t.id)?o:-1)):(Qr(null!=(a=t.result)?a:{},Br),await lc());break;case _n.EVENT:const{result:u}=t,d=u;if(null==(null==d?void 0:d.name))throw"Missing event name";r(d.name,d.data);break;default:null==(s=n.get(null!=(l=t.id)?l:-1))||s(t.result),n.delete(null!=(c=t.id)?c:-1)}})),!await ki(i,_n.INIT,"",[t.workerId,Br],n))throw"Failed to instantiate workerized class";return i}const sr=new WeakMap,Zr=new WeakMap,er=new WeakMap,Ui=Symbol("anyProducer"),Xs=Promise.resolve(),Bi=Symbol("listenerAdded"),Ki=Symbol("listenerRemoved");let Mi=!1,mo=!1;function Lr(t){if("string"!=typeof t&&"symbol"!=typeof t&&"number"!=typeof t)throw new TypeError("`eventName` must be a string, symbol, or number")}function ui(t){if("function"!=typeof t)throw new TypeError("listener must be a function")}function Fr(t,e){const n=Zr.get(t);if(n.has(e))return n.get(e)}function _r(t,e){const n="string"==typeof e||"symbol"==typeof e||"number"==typeof e?e:Ui,r=er.get(t);if(r.has(n))return r.get(n)}function uc(t,e,n){const r=er.get(t);if(r.has(e))for(const t of r.get(e))t.enqueue(n);if(r.has(Ui)){const t=Promise.all([e,n]);for(const e of r.get(Ui))e.enqueue(t)}}function Ws(t,e){e=Array.isArray(e)?e:[e];let n=!1,r=()=>{},i=[];const o={enqueue(t){i.push(t),r()},finish(){n=!0,r()}};for(const n of e){let e=_r(t,n);e||(e=new Set,er.get(t).set(n,e)),e.add(o)}return{async next(){return i?0===i.length?n?(i=void 0,this.next()):(await new Promise((t=>{r=t})),this.next()):{done:!1,value:await i.shift()}:{done:!0}},async return(n){i=void 0;for(const n of e){const e=_r(t,n);e&&(e.delete(o),0===e.size&&er.get(t).delete(n))}return r(),arguments.length>0?{done:!0,value:await n}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Vs(t){if(void 0===t)return Rs;if(!Array.isArray(t))throw new TypeError("`methodNames` must be an array of strings");for(const e of t)if(!Rs.includes(e))throw"string"!=typeof e?new TypeError("`methodNames` element must be a string"):new Error(`${e} is not Emittery method`);return t}const Er=t=>t===Bi||t===Ki;function ai(t,e,n){if(Er(e))try{Mi=!0,t.emit(e,n)}finally{Mi=!1}}class Vr{static mixin(t,e){return e=Vs(e),n=>{if("function"!=typeof n)throw new TypeError("`target` must be function");for(const t of e)if(void 0!==n.prototype[t])throw new Error(`The property \`${t}\` already exists on \`target\``);Object.defineProperty(n.prototype,t,{enumerable:!1,get:function(){return Object.defineProperty(this,t,{enumerable:!1,value:new Vr}),this[t]}});const r=e=>function(...n){return this[t][e](...n)};for(const t of e)Object.defineProperty(n.prototype,t,{enumerable:!1,value:r(t)});return n}}static get isDebugEnabled(){var t,e;if("object"!=typeof(null==(t=globalThis.process)?void 0:t.env))return mo;const{env:n}=null!=(e=globalThis.process)?e:{env:{}};return"emittery"===n.DEBUG||"*"===n.DEBUG||mo}static set isDebugEnabled(t){mo=t}constructor(t={}){var e;sr.set(this,new Set),Zr.set(this,new Map),er.set(this,new Map),er.get(this).set(Ui,new Set),this.debug=null!=(e=t.debug)?e:{},void 0===this.debug.enabled&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(t,e,n,r)=>{try{r=JSON.stringify(r)}catch{r=`Object with the following keys failed to stringify: ${Object.keys(r).join(",")}`}("symbol"==typeof n||"number"==typeof n)&&(n=n.toString());const i=new Date,o=`${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}.${i.getMilliseconds()}`;console.log(`[${o}][emittery:${t}][${e}] Event Name: ${n}\n\tdata: ${r}`)})}logIfDebugEnabled(t,e,n){(Vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(t,this.debug.name,e,n)}on(t,e){ui(e),t=Array.isArray(t)?t:[t];for(const n of t){Lr(n);let t=Fr(this,n);t||(t=new Set,Zr.get(this).set(n,t)),t.add(e),this.logIfDebugEnabled("subscribe",n,void 0),Er(n)||ai(this,Bi,{eventName:n,listener:e})}return this.off.bind(this,t,e)}off(t,e){ui(e),t=Array.isArray(t)?t:[t];for(const n of t){Lr(n);const t=Fr(this,n);t&&(t.delete(e),0===t.size&&Zr.get(this).delete(n)),this.logIfDebugEnabled("unsubscribe",n,void 0),Er(n)||ai(this,Ki,{eventName:n,listener:e})}}once(t){let e;const n=new Promise((n=>{e=this.on(t,(t=>{e(),n(t)}))}));return n.off=e,n}events(t){t=Array.isArray(t)?t:[t];for(const e of t)Lr(e);return Ws(this,t)}async emit(t,e){var n;if(Lr(t),Er(t)&&!Mi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",t,e),uc(this,t,e);const r=null!=(n=Fr(this,t))?n:new Set,i=sr.get(this),o=[...r],a=Er(t)?[]:[...i];await Xs,await Promise.all([...o.map((async t=>{if(r.has(t))return t(e)})),...a.map((async n=>{if(i.has(n))return n(t,e)}))])}async emitSerial(t,e){var n;if(Lr(t),Er(t)&&!Mi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",t,e);const r=null!=(n=Fr(this,t))?n:new Set,i=sr.get(this),o=[...r],a=[...i];await Xs;for(const t of o)r.has(t)&&await t(e);for(const n of a)i.has(n)&&await n(t,e)}onAny(t){return ui(t),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(t),ai(this,Bi,{listener:t}),this.offAny.bind(this,t)}anyEvent(){return Ws(this)}offAny(t){ui(t),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),ai(this,Ki,{listener:t}),sr.get(this).delete(t)}clearListeners(t){t=Array.isArray(t)?t:[t];for(const e of t)if(this.logIfDebugEnabled("clear",e,void 0),"string"==typeof e||"symbol"==typeof e||"number"==typeof e){const t=Fr(this,e);t&&t.clear();const n=_r(this,e);if(n){for(const t of n)t.finish();n.clear()}}else{sr.get(this).clear();for(const[t,e]of Zr.get(this).entries())e.clear(),Zr.get(this).delete(t);for(const[t,e]of er.get(this).entries()){for(const t of e)t.finish();e.clear(),er.get(this).delete(t)}}}listenerCount(t){var e,n,r,i,o,a;t=Array.isArray(t)?t:[t];let l=0;for(const s of t)if("string"!=typeof s){typeof s<"u"&&Lr(s),l+=sr.get(this).size;for(const t of Zr.get(this).values())l+=t.size;for(const t of er.get(this).values())l+=t.size}else l+=sr.get(this).size+(null!=(n=null==(e=Fr(this,s))?void 0:e.size)?n:0)+(null!=(i=null==(r=_r(this,s))?void 0:r.size)?i:0)+(null!=(a=null==(o=_r(this))?void 0:o.size)?a:0);return l}bindMethods(t,e){if("object"!=typeof t||null===t)throw new TypeError("`target` must be an object");e=Vs(e);for(const n of e){if(void 0!==t[n])throw new Error(`The property \`${n}\` already exists on \`target\``);Object.defineProperty(t,n,{enumerable:!1,value:this[n].bind(this)})}}}const Rs=Object.getOwnPropertyNames(Vr.prototype).filter((t=>"constructor"!==t));function ac(t){return t.onAny&&t.emit}function dc(t){return t.prototype.onAny&&t.prototype.emit}Object.defineProperty(Vr,"listenerAdded",{value:Bi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Vr,"listenerRemoved",{value:Ki,writable:!1,enumerable:!0,configurable:!1});let hc=0;async function fc(t,e,n){const r=dc(t)?new Vr:{},i=hc++;return Object.getOwnPropertyNames(t.prototype).forEach((t=>{r[t]=(...r)=>ki(e,_n.FORWARD,t,r,n)})),r.terminate=async(...t)=>{const o=await ki(e,_n.TERMINATE,"",t,n);return delete Ei[i],e.terminate(),r.workerContext.worker=void 0,o},r.workerContext={id:i,worker:e,resolvers:n},Ei[i]=r,r}async function mc(t,e){const n=new Map;let r;const i=await cc(t,e,n,((t,e)=>{null!=r&&r.emit&&(null==r||r.emit(t,e))}));return r=await fc(t,i,n),r}async function pc(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;Kr(t,await e.instance[n](...null!=r?r:[]))}const Qs=Co("registeredWorkers",{});function bc(t,e){e.workerId=t,Ho()&&(Qs[e.workerId]=e)}function yc(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=Qs[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Qr(r,Br),ac(e.instance)&&e.instance.onAny(((t,e)=>{Kr({type:_n.EVENT},{name:t,data:e})})),Kr(t,void 0!==typeof e.instance)}async function gc(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),Kr(t,r)}function Zc(t){if(!t.args)throw"Missing globals while syncing";Qr(t.args[0],Br),Kr(t,{})}function vc(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case _n.INIT:yc(n,t);break;case _n.FORWARD:pc(n,t);break;case _n.TERMINATE:gc(n,t);break;case _n.GLOBALS_SYNC:Zc(n)}}}Ho()&&vc();class xs{static async createVideoReadable(t){return new Promise(((e,n)=>{const r=document.createElement("video");let i=new AbortController,o=new AbortController;r.addEventListener("canplay",(()=>{i.abort(),r.muted=!0,r.loop=!0,r.play().then((()=>{try{const t=r.captureStream(),n=new MediaStreamTrackProcessor(t.getVideoTracks()[0]);e(n.readable)}catch(t){n(t)}}))}),{once:!0,signal:o.signal}),r.addEventListener("error",(t=>{o.abort(),n("loading error:"+t)}),{once:!0,signal:i.signal}),r.crossOrigin="anonymous",r.src=t}))}static async createImageCanvas(t){const e=await(await fetch(t)).blob();return await createImageBitmap(e)}}var Gc=Object.defineProperty,Xc=(t,e,n)=>e in t?Gc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Wc=(t,e,n)=>(Xc(t,"symbol"!=typeof e?e+"":e,n),n);const Vc="hlg.tokbox.com/prod/logging/vcp_webrtc",Rc="https://",xc=1e4;let di;const Ic=new Uint8Array(16);function Sc(){if(!di&&(di=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!di))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return di(Ic)}const Bn=[];for(let t=0;t<256;++t)Bn.push((t+256).toString(16).slice(1));function Tc(t,e=0){return(Bn[t[e+0]]+Bn[t[e+1]]+Bn[t[e+2]]+Bn[t[e+3]]+"-"+Bn[t[e+4]]+Bn[t[e+5]]+"-"+Bn[t[e+6]]+Bn[t[e+7]]+"-"+Bn[t[e+8]]+Bn[t[e+9]]+"-"+Bn[t[e+10]]+Bn[t[e+11]]+Bn[t[e+12]]+Bn[t[e+13]]+Bn[t[e+14]]+Bn[t[e+15]]).toLowerCase()}const Yc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Is={randomUUID:Yc};function wc(t,e,n){if(Is.randomUUID&&!e&&!t)return Is.randomUUID();const r=(t=t||{}).random||(t.rng||Sc)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,e){n=n||0;for(let t=0;t<16;++t)e[n+t]=r[t];return e}return Tc(r)}function Jo(t,e){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let n=globalThis.vonage.workerizer;return n[t]||(n[t]=e),n[t]}const ur=Jo("globals",{});var Gr=(t=>(t.INIT="INIT",t.FORWARD="FORWARD",t.TERMINATE="TERMINATE",t.GLOBALS_SYNC="GLOBALS_SYNC",t))(Gr||{});function Ds(t){return[ImageBitmap,ReadableStream,WritableStream].some((e=>t instanceof e))}let Lc=0;function Fc(t,e,n,r,i){const o=Lc++;return t.postMessage({id:o,type:e,functionName:n,args:r},r.filter((t=>Ds(t)))),new Promise((t=>{null==i||i.set(o,t)}))}function ei(t,e){const{id:n,type:r}=t,i=Array.isArray(e)?e:[e];postMessage({id:n,type:r,result:e},i.filter((t=>Ds(t))))}const Ss=Jo("workerized",{});function $s(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Cc(){if($s())ei({type:Gr.GLOBALS_SYNC},ur);else{const t=[];for(const e in Ss){const{worker:n,resolvers:r}=Ss[e].workerContext;n&&t.push(Fc(n,Gr.GLOBALS_SYNC,"",[ur],r))}await Promise.all(t)}}function Ai(t,e){if(Array.isArray(e))e.splice(0,e.length);else if("object"==typeof e)for(const t in e)delete e[t];for(const n in t)Array.isArray(t[n])?(e[n]=[],Ai(t[n],e[n])):"object"==typeof t[n]?(e[n]={},Ai(t[n],e[n])):e[n]=t[n]}async function Hc(t,e){const{functionName:n,args:r}=t;if(!e.instance)throw"instance not initialized";if(!n)throw"missing function name to call";if(!e.instance[n])throw`undefined function [${n}] in class ${e.instance.constructor.workerId}`;ei(t,await e.instance[n](...null!=r?r:[]))}const Jc=Jo("registeredWorkers",{});function Nc(t,e){if(!t.args)throw"Missing className while initializing worker";const[n,r]=t.args,i=Jc[n];if(!i)throw`unknown worker class ${n}`;e.instance=new i(t.args.slice(1)),Ai(r,ur),ei(t,void 0!==typeof e.instance)}async function kc(t,e){const{args:n}=t;if(!e.instance)throw"instance not initialized";let r;e.instance.terminate&&(r=await e.instance.terminate(...null!=n?n:[])),ei(t,r)}function Ec(t){if(!t.args)throw"Missing globals while syncing";Ai(t.args[0],ur),ei(t,{})}function Uc(){const t={};onmessage=async e=>{const n=e.data;switch(n.type){case Gr.INIT:Nc(n,t);break;case Gr.FORWARD:Hc(n,t);break;case Gr.TERMINATE:kc(n,t);break;case Gr.GLOBALS_SYNC:Ec(n)}}}function Bc(t,e){return ur[t]||(ur[t]=e),[()=>ur[t],async e=>{ur[t]=e,await Cc()}]}function Kc(t,e){return Bc(t,e)}$s()&&Uc();const[Mc,M3]=Kc("metadata");function po(){return Mc()}class Ac{constructor(t){Wc(this,"uuid",wc()),this.config=t}async send(t){var e,n,r;const{appId:i,sourceType:o}=null!=(e=po())?e:{};if(!i||!o)return"metadata missing";const a=new AbortController,l=setTimeout((()=>a.abort()),xc);return await(null!=(r=null==(n=this.config)?void 0:n.fetch)?r:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(t)),signal:a.signal}),clearTimeout(l),"success"}getUrl(){var t;let e=null!=(t=po().proxyUrl)?t:Rc;return e+=("/"===e.at(-1)?"":"/")+Vc,e}getHeaders(){return{"Content-Type":"application/json"}}buildReport(t){const e=po();return{guid:this.uuid,...t,applicationId:e.appId,timestamp:Date.now(),proxyUrl:e.proxyUrl,source:e.sourceType}}}const zc="5.2.0-alpha.0";class No{constructor(){gt(this,"canvas"),gt(this,"context");const t=new OffscreenCanvas(0,0),e=t.getContext("2d");if(!e)throw"Fail to retrieve webgl2 context";this.canvas=t,this.context=e}setFlickeringOptions(t){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(t){return[]}async render(t,e){return this.canvas}resizeCanvas(t){const{width:e,height:n}=t;this.canvas.width=e,this.canvas.height=n}renderSilhouette(t,e,n="none"){const{width:r,height:i}=t;this.context.save(),this.context.drawImage(e,0,0,e.width,e.height,0,0,r,i),this.context.globalCompositeOperation="source-in",this.context.filter=n,this.context.drawImage(t,0,0,r,i,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class jc extends No{constructor(t){super(),this.radius=t}async render(t,e){return super.resizeCanvas(t),this.renderSilhouette(t,e),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(t,0,0,t.width,t.height),this.context.restore(),super.render(t,e)}}class Oc extends No{constructor(t){super(),this.radius=t}async render(t,e){return super.resizeCanvas(t),this.renderSilhouette(t,e,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(t,0,0,t.width,t.height),this.context.restore(),super.render(t,e)}}class Pc extends No{constructor(){super(...arguments),gt(this,"backgroundImage")}setBackgroundImage(t){this.backgroundImage=t}async render(t,e){return super.resizeCanvas(t),this.renderSilhouette(t,e),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,t.width,t.height),this.context.restore()),super.render(t,e)}}
|
|
2
2
|
/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
3
3
|
Available via the MIT license.
|
|
4
|
-
see: http://github.com/greggman/twgl.js for details */const ko=5120,Dr=5121,Eo=5122,Uo=5123,Bo=5124,Ko=5125,Mo=5126,_2=32819,Q2=32820,D2=33635,$2=5131,q2=33640,tu=35899,eu=35902,nu=36269,ru=34042,qs={};{const t=qs;t[ko]=Int8Array,t[Dr]=Uint8Array,t[Eo]=Int16Array,t[Uo]=Uint16Array,t[Bo]=Int32Array,t[Ko]=Uint32Array,t[Mo]=Float32Array,t[_2]=Uint16Array,t[Q2]=Uint16Array,t[D2]=Uint16Array,t[$2]=Uint16Array,t[q2]=Uint32Array,t[tu]=Uint32Array,t[eu]=Uint32Array,t[nu]=Uint32Array,t[ru]=Uint32Array}function Ao(t){if(t instanceof Int8Array)return ko;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return Dr;if(t instanceof Int16Array)return Eo;if(t instanceof Uint16Array)return Uo;if(t instanceof Int32Array)return Bo;if(t instanceof Uint32Array)return Ko;if(t instanceof Float32Array)return Mo;throw new Error("unsupported typed array type")}function tl(t){if(t===Int8Array)return ko;if(t===Uint8Array||t===Uint8ClampedArray)return Dr;if(t===Int16Array)return Eo;if(t===Uint16Array)return Uo;if(t===Int32Array)return Bo;if(t===Uint32Array)return Ko;if(t===Float32Array)return Mo;throw new Error("unsupported typed array type")}function el(t){const e=qs[t];if(!e)throw new Error("unknown gl type");return e}const ji=typeof SharedArrayBuffer<"u"?function(t){return t&&t.buffer&&(t.buffer instanceof ArrayBuffer||t.buffer instanceof SharedArrayBuffer)}:function(t){return t&&t.buffer&&t.buffer instanceof ArrayBuffer};function nl(...t){console.error(...t)}const Ys=new Map;function Di(t,e){if(!t||"object"!=typeof t)return!1;let n=Ys.get(e);n||(n=new WeakMap,Ys.set(e,n));let r=n.get(t);if(void 0===r){const i=Object.prototype.toString.call(t);r=i.substring(8,i.length-1)===e,n.set(t,r)}return r}function iu(t,e){return typeof WebGLBuffer<"u"&&Di(e,"WebGLBuffer")}function ou(t,e){return typeof WebGLRenderbuffer<"u"&&Di(e,"WebGLRenderbuffer")}function jo(t,e){return typeof WebGLTexture<"u"&&Di(e,"WebGLTexture")}function su(t,e){return typeof WebGLSampler<"u"&&Di(e,"WebGLSampler")}const rl=35044,Xr=34962,lu=34963,cu=34660,uu=5120,au=5121,du=5122,hu=5123,fu=5124,mu=5125,il=5126,ol={attribPrefix:""};function pu(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||rl)}function sl(t,e,n,r){if(iu(t,e))return e;n=n||Xr;const i=t.createBuffer();return pu(t,n,i,e,r),i}function ll(t){return"indices"===t}function bu(t){return t===Int8Array||t===Uint8Array}function yu(t){return t.length?t:t.data}const gu=/coord|texture/i,Zu=/color|colour/i;function vu(t,e){let n;if(n=gu.test(t)?2:Zu.test(t)?4:3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function Gu(t,e,n){return t.numComponents||t.size||vu(e,n||yu(t).length)}function cl(t,e){if(ji(t))return t;if(ji(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type?zo(t.type):void 0;return n||(n=ll(e)?Uint16Array:Float32Array),new n(t.data)}function Xu(t){return"number"==typeof t?t:t?tl(t):il}function zo(t){return"number"==typeof t?el(t):t||Float32Array}function Wu(t,e){return{buffer:e.buffer,numValues:24,type:Xu(e.type),arrayType:zo(e.type)}}function Vu(t,e){const n=e.data||e,r=zo(e.type),i=n*r.BYTES_PER_ELEMENT,o=t.createBuffer();return t.bindBuffer(Xr,o),t.bufferData(Xr,i,e.drawType||rl),{buffer:o,numValues:n,type:tl(r),arrayType:r}}function Ru(t,e,n){const r=cl(e,n);return{arrayType:r.constructor,buffer:sl(t,r,void 0,e.drawType),type:Ao(r),numValues:0}}function xu(t,e){const n={};return Object.keys(e).forEach((function(r){if(!ll(r)){const i=e[r],o=i.attrib||i.name||i.attribName||ol.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!ji(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let e;e=i.buffer&&i.buffer instanceof WebGLBuffer?Wu:"number"==typeof i||"number"==typeof i.data?Vu:Ru;const{buffer:a,type:l,numValues:s,arrayType:c}=e(t,i,r),u=void 0!==i.normalize?i.normalize:bu(c),d=Gu(i,r,s);n[o]={buffer:a,numComponents:d,type:l,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),t.bindBuffer(Xr,null),n}function Iu(t,e){return e===uu||e===au?1:e===du||e===hu?2:e===fu||e===mu||e===il?4:0}const bo=["position","positions","a_position"];function Su(t,e){let n,r;for(r=0;r<bo.length&&(n=bo[r],!(n in e)&&(n=ol.attribPrefix+n,!(n in e)));++r);r===bo.length&&(n=Object.keys(e)[0]);const i=e[n];if(!i.buffer)return 1;t.bindBuffer(Xr,i.buffer);const o=t.getBufferParameter(Xr,cu);t.bindBuffer(Xr,null);const a=o/Iu(t,i.type),l=i.numComponents||i.size,s=a/l;if(s%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return s}function Yu(t,e,n){const r=xu(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const e=cl(o,"indices");i.indices=sl(t,e,lu),i.numElements=e.length,i.elementType=Ao(e)}else i.numElements||(i.numElements=Su(t,i.attribs));return i}function ni(t){return!!t.texStorage2D}const ul=function(){const t={},e={};return function(n,r){return function(n){const r=n.constructor.name;if(!t[r]){for(const t in n)if("number"==typeof n[t]){const r=e[n[t]];e[n[t]]=r?`${r} | ${t}`:t}t[r]=!0}}(n),e[r]||("number"==typeof r?`0x${r.toString(16)}`:r)}}(),hr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},$r=ji,al=function(){let t;return function(){return t=t||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),ws=6406,$n=6407,Wn=6408,Ts=6409,Fs=6410,Ar=6402,Cs=34041,zi=33071,wu=9728,Tu=9729,fr=3553,dr=34067,Rr=32879,xr=35866,Oo=34069,Fu=34070,Cu=34071,Lu=34072,Hu=34073,Nu=34074,Xo=10241,Wo=10240,Oi=10242,Pi=10243,Ls=32882,Ju=33082,ku=33083,Eu=33084,Uu=33085,Bu=34892,Ku=34893,Po=3317,dl=3314,hl=32878,fl=3316,ml=3315,pl=32877,Mu=37443,Au=37441,ju=37440,zu=33321,Ou=36756,Pu=33325,_u=33326,Qu=33330,Du=33329,$u=33338,qu=33337,t1=33340,e1=33339,n1=33323,r1=36757,i1=33327,o1=33328,s1=33336,l1=33335,c1=33332,u1=33331,a1=33334,d1=33333,h1=32849,f1=35905,m1=36194,p1=36758,b1=35898,y1=35901,g1=34843,Z1=34837,v1=36221,G1=36239,X1=36215,W1=36233,V1=36209,R1=36227,x1=32856,I1=35907,S1=36759,Y1=32855,w1=32854,T1=32857,F1=34842,C1=34836,L1=36220,H1=36238,N1=36975,J1=36214,k1=36232,E1=36226,U1=36208,B1=33189,K1=33190,M1=36012,A1=36013,j1=35056,lr=5120,gn=5121,hi=5122,Lr=5123,fi=5124,br=5125,An=5126,Hs=32819,Ns=32820,Js=33635,Qn=5131,jr=36193,yo=33640,z1=35899,O1=35902,P1=36269,_1=34042,mi=33319,Hr=33320,pi=6403,Nr=36244,Jr=36248,yr=36249;let go;function $i(t){if(!go){const t={};t[ws]={textureFormat:ws,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,Qn,jr,An]},t[Ts]={textureFormat:Ts,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,Qn,jr,An]},t[Fs]={textureFormat:Fs,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,Qn,jr,An]},t[$n]={textureFormat:$n,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,Qn,jr,An,Js]},t[Wn]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,Qn,jr,An,Hs,Ns]},t[Ar]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[br,Lr]},t[zu]={textureFormat:pi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},t[Ou]={textureFormat:pi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[lr]},t[Pu]={textureFormat:pi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[An,Qn]},t[_u]={textureFormat:pi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[An]},t[Qu]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},t[Du]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[lr]},t[c1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Lr]},t[u1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[hi]},t[a1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[d1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[fi]},t[n1]={textureFormat:mi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},t[r1]={textureFormat:mi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[lr]},t[i1]={textureFormat:mi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[An,Qn]},t[o1]={textureFormat:mi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[An]},t[s1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},t[l1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[lr]},t[$u]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Lr]},t[qu]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[hi]},t[t1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[br]},t[e1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[fi]},t[h1]={textureFormat:$n,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},t[f1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},t[m1]={textureFormat:$n,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,Js]},t[p1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[lr]},t[b1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,Qn,z1]},t[y1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,Qn,O1]},t[g1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[An,Qn]},t[Z1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[An]},t[v1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},t[G1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[lr]},t[X1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Lr]},t[W1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[hi]},t[V1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[br]},t[R1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[fi]},t[x1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},t[I1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},t[S1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[lr]},t[Y1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Ns,yo]},t[w1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,Hs]},t[T1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yo]},t[F1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[An,Qn]},t[C1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[An]},t[L1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},t[H1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[lr]},t[N1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yo]},t[J1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Lr]},t[k1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[hi]},t[E1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[fi]},t[U1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[br]},t[B1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Lr,br]},t[K1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[M1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[An]},t[j1]={textureFormat:Cs,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_1]},t[A1]={textureFormat:Cs,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[P1]},Object.keys(t).forEach((function(e){const n=t[e];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(t,e){const r=n.type[e];n.bytesPerElementMap[r]=t}))})),go=t}return go[t]}function Q1(t,e){const n=$i(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(void 0===r)throw"unknown internal format";return r}function ri(t){const e=$i(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function ks(t){return 0==(t&t-1)}function D1(t,e,n,r){if(!ni(t))return ks(e)&&ks(n);const i=$i(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function $1(t){const e=$i(t);if(!e)throw"unknown internal format";return e.textureFilterable}function q1(t,e,n){return $r(e)?Ao(e):n||gn}function bi(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const t=Math.sqrt(i/(e===dr?6:1));t%1==0?(n=t,r=t):(n=i,r=1)}return{width:n,height:r}}function Mr(t,e){void 0!==e.colorspaceConversion&&t.pixelStorei(Mu,e.colorspaceConversion),void 0!==e.premultiplyAlpha&&t.pixelStorei(Au,e.premultiplyAlpha),void 0!==e.flipY&&t.pixelStorei(ju,e.flipY)}function bl(t){t.pixelStorei(Po,4),ni(t)&&(t.pixelStorei(dl,0),t.pixelStorei(hl,0),t.pixelStorei(fl,0),t.pixelStorei(ml,0),t.pixelStorei(pl,0))}function ta(t,e,n,r){r.minMag&&(n.call(t,e,Xo,r.minMag),n.call(t,e,Wo,r.minMag)),r.min&&n.call(t,e,Xo,r.min),r.mag&&n.call(t,e,Wo,r.mag),r.wrap&&(n.call(t,e,Oi,r.wrap),n.call(t,e,Pi,r.wrap),(e===Rr||su(t,e))&&n.call(t,e,Ls,r.wrap)),r.wrapR&&n.call(t,e,Ls,r.wrapR),r.wrapS&&n.call(t,e,Oi,r.wrapS),r.wrapT&&n.call(t,e,Pi,r.wrapT),void 0!==r.minLod&&n.call(t,e,Ju,r.minLod),void 0!==r.maxLod&&n.call(t,e,ku,r.maxLod),void 0!==r.baseLevel&&n.call(t,e,Eu,r.baseLevel),void 0!==r.maxLevel&&n.call(t,e,Uu,r.maxLevel),void 0!==r.compareFunc&&n.call(t,e,Ku,r.compareFunc),void 0!==r.compareMode&&n.call(t,e,Bu,r.compareMode)}function yl(t,e,n){const r=n.target||fr;t.bindTexture(r,e),ta(t,r,t.texParameteri,n)}function ea(t){return t=t||hr.textureColor,$r(t)?t:new Uint8Array([255*t[0],255*t[1],255*t[2],255*t[3]])}function Vo(t,e,n,r,i,o){n=n||hr.textureOptions,o=o||Wn;const a=n.target||fr;if(r=r||n.width,i=i||n.height,t.bindTexture(a,e),D1(t,r,i,o))t.generateMipmap(a);else{const e=$1(o)?Tu:wu;t.texParameteri(a,Xo,e),t.texParameteri(a,Wo,e),t.texParameteri(a,Oi,zi),t.texParameteri(a,Pi,zi)}}function qr(t){return!0===t.auto||void 0===t.auto&&void 0===t.level}function Ro(t,e){return(e=e||{}).cubeFaceOrder||[Oo,Fu,Cu,Lu,Hu,Nu]}function xo(t,e){const n=Ro(t,e).map((function(t,e){return{face:t,ndx:e}}));return n.sort((function(t,e){return t.face-e.face})),n}function gl(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr,o=r.level||0;let a=n.width,l=n.height;const s=r.internalFormat||r.format||Wn,c=ri(s),u=r.format||c.format,d=r.type||c.type;if(Mr(t,r),t.bindTexture(i,e),i===dr){const c=n.width,h=n.height;let m,p;if(c/6===h)m=h,p=[0,0,1,0,2,0,3,0,4,0,5,0];else if(h/6===c)m=c,p=[0,0,0,1,0,2,0,3,0,4,0,5];else if(c/3==h/2)m=c/3,p=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(c/2!=h/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);m=c/2,p=[0,0,1,0,0,1,1,1,0,2,1,2]}const b=al();b?(b.canvas.width=m,b.canvas.height=m,a=m,l=m,xo(t,r).forEach((function(e){const r=p[2*e.ndx+0]*m,i=p[2*e.ndx+1]*m;b.drawImage(n,r,i,m,m,0,0,m,m),t.texImage2D(e.face,o,s,u,d,b.canvas)})),b.canvas.width=1,b.canvas.height=1):typeof createImageBitmap<"u"&&(a=m,l=m,xo(t,r).forEach((function(c){const h=p[2*c.ndx+0]*m,b=p[2*c.ndx+1]*m;t.texImage2D(c.face,o,s,m,m,0,u,d,null),createImageBitmap(n,h,b,m,m,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Mr(t,r),t.bindTexture(i,e),t.texImage2D(c.face,o,s,u,d,n),qr(r)&&Vo(t,e,r,a,l,s)}))})))}else if(i===Rr||i===xr){const e=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/e;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,c=n.height===r?1:0;t.pixelStorei(Po,1),t.pixelStorei(dl,n.width),t.pixelStorei(hl,0),t.pixelStorei(pl,0),t.texImage3D(i,o,s,e,e,e,0,u,d,null);for(let r=0;r<a;++r){const a=r*e*l,s=r*e*c;t.pixelStorei(fl,a),t.pixelStorei(ml,s),t.texSubImage3D(i,o,0,0,r,e,e,1,u,d,n)}bl(t)}else t.texImage2D(i,o,s,u,d,n);qr(r)&&Vo(t,e,r,a,l,s),yl(t,e,r)}function ii(){}function na(t){if(typeof document<"u"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function ra(t,e){return void 0!==e||na(t)?e:"anonymous"}function ia(t,e,n){let r;if(n=n||ii,e=void 0!==e?e:hr.crossOrigin,e=ra(t,e),typeof Image<"u"){r=new Image,void 0!==e&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const e="couldn't load image: "+t;nl(e),n(e,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=t,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};e&&(l.mode="cors"),fetch(t,l).then((function(t){if(!t.ok)throw t;return t.blob()})).then((function(t){return createImageBitmap(t,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(t){o=t,setTimeout(a)})).catch((function(t){i=t,setTimeout(a)})),r=null}return r}function Zl(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof ImageData<"u"&&t instanceof ImageData||typeof HTMLElement<"u"&&t instanceof HTMLElement}function _o(t,e,n){return Zl(t)?(setTimeout((function(){n(null,t)})),t):ia(t,e,n)}function Qo(t,e,n){const r=(n=n||hr.textureOptions).target||fr;if(t.bindTexture(r,e),!1===n.color)return;const i=ea(n.color);if(r===dr)for(let e=0;e<6;++e)t.texImage2D(Oo+e,0,Wn,1,1,0,Wn,gn,i);else r===Rr||r===xr?t.texImage3D(r,0,Wn,1,1,1,0,Wn,gn,i):t.texImage2D(r,0,Wn,1,1,0,Wn,gn,i)}function oa(t,e,n,r){return r=r||ii,n=n||hr.textureOptions,Qo(t,e,n),_o((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,e,o):(gl(t,e,o,n),r(null,e,o))}))}function sa(t,e,n,r){r=r||ii;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Wn,l=ri(a),s=n.format||l.format,c=n.type||gn,u=n.target||fr;if(u!==dr)throw"target must be TEXTURE_CUBE_MAP";Qo(t,e,n),n=Object.assign({},n);let d=6;const h=[],m=Ro(t,n);let p;p=i.map((function(i,l){return _o(i,n.crossOrigin,function(i){return function(l,m){--d,l?h.push(l):m.width!==m.height?h.push("cubemap face img is not a square: "+m.src):(Mr(t,n),t.bindTexture(u,e),5===d?Ro().forEach((function(e){t.texImage2D(e,o,a,s,c,m)})):t.texImage2D(i,o,a,s,c,m),qr(n)&&t.generateMipmap(u)),0===d&&r(h.length?h:void 0,e,p)}}(m[l]))}))}function la(t,e,n,r){r=r||ii;const i=n.src,o=n.internalFormat||n.format||Wn,a=ri(o),l=n.format||a.format,s=n.type||gn,c=n.target||xr;if(c!==Rr&&c!==xr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Qo(t,e,n),n=Object.assign({},n);let u=i.length;const d=[];let h;const m=n.level||0;let p=n.width,b=n.height;const f=i.length;let g=!0;h=i.map((function(i,a){return _o(i,n.crossOrigin,function(i){return function(a,y){if(--u,a)d.push(a);else{if(Mr(t,n),t.bindTexture(c,e),g){g=!1,p=n.width||y.width,b=n.height||y.height,t.texImage3D(c,m,o,p,b,f,0,l,s,null);for(let e=0;e<f;++e)t.texSubImage3D(c,m,0,0,e,p,b,1,l,s,y)}else{let e,n=y;(y.width!==p||y.height!==b)&&(e=al(),n=e.canvas,e.canvas.width=p,e.canvas.height=b,e.drawImage(y,0,0,p,b)),t.texSubImage3D(c,m,0,0,i,p,b,1,l,s,n),e&&n===e.canvas&&(e.canvas.width=0,e.canvas.height=0)}qr(n)&&t.generateMipmap(c)}0===u&&r(d.length?d:void 0,e,h)}}(a))}))}function ca(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr;t.bindTexture(i,e);let o=r.width,a=r.height,l=r.depth;const s=r.level||0,c=r.internalFormat||r.format||Wn,u=ri(c),d=r.format||u.format,h=r.type||q1(t,n,u.type);if($r(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const t=el(h);n=new t(n)}const m=Q1(c,h),p=n.byteLength/m;if(p%1)throw"length wrong size for format: "+ul(t,d);let b;if(i===Rr||i===xr)if(o||a||l)!o||a&&l?!a||o&&l?(b=bi(t,i,o,a,p/l),o=b.width,a=b.height):(b=bi(t,i,o,l,p/a),o=b.width,l=b.height):(b=bi(t,i,a,l,p/o),a=b.width,l=b.height);else{const t=Math.cbrt(p);if(t%1!=0)throw"can't guess cube size of array of numElements: "+p;o=t,a=t,l=t}else b=bi(t,i,o,a,p),o=b.width,a=b.height;if(bl(t),t.pixelStorei(Po,r.unpackAlignment||1),Mr(t,r),i===dr){const e=p/6*(m/n.BYTES_PER_ELEMENT);xo(t,r).forEach((r=>{const i=e*r.ndx,l=n.subarray(i,i+e);t.texImage2D(r.face,s,c,o,a,0,d,h,l)}))}else i===Rr||i===xr?t.texImage3D(i,s,c,o,a,l,0,d,h,n):t.texImage2D(i,s,c,o,a,0,d,h,n);return{width:o,height:a,depth:l,type:h}}function ua(t,e,n){const r=n.target||fr;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||Wn,a=ri(o),l=n.format||a.format,s=n.type||a.type;if(Mr(t,n),r===dr)for(let e=0;e<6;++e)t.texImage2D(Oo+e,i,o,n.width,n.height,0,l,s,null);else r===Rr||r===xr?t.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,s,null):t.texImage2D(r,i,o,n.width,n.height,0,l,s,null)}function vl(t,e,n){n=n||ii,e=e||hr.textureOptions;const r=t.createTexture(),i=e.target||fr;let o=e.width||1,a=e.height||1;const l=e.internalFormat||Wn;t.bindTexture(i,r),i===dr&&(t.texParameteri(i,Oi,zi),t.texParameteri(i,Pi,zi));let s=e.src;if(s)if("function"==typeof s&&(s=s(t,e)),"string"==typeof s)oa(t,r,e,n);else if($r(s)||Array.isArray(s)&&("number"==typeof s[0]||Array.isArray(s[0])||$r(s[0]))){const n=ca(t,r,s,e);o=n.width,a=n.height}else Array.isArray(s)&&("string"==typeof s[0]||Zl(s[0]))?i===dr?sa(t,r,e,n):la(t,r,e,n):(gl(t,r,s,e),o=s.width,a=s.height);else ua(t,r,e);return qr(e)&&Vo(t,r,e,o,a,l),yl(t,r,e),r}const Do=nl;function Gl(t){return typeof document<"u"&&document.getElementById?document.getElementById(t):null}const _i=33984,qi=34962,aa=34963,da=35713,ha=35714,fa=35632,ma=35633,pa=35981,Xl=35718,ba=35721,ya=35971,ga=35382,Za=35396,va=35398,Ga=35392,Xa=35395,to=5126,Wl=35664,Vl=35665,Rl=35666,$o=5124,xl=35667,Il=35668,Sl=35669,Yl=35670,wl=35671,Tl=35672,Fl=35673,Cl=35674,Ll=35675,Hl=35676,Wa=35678,Va=35680,Ra=35679,xa=35682,Ia=35685,Sa=35686,Ya=35687,wa=35688,Ta=35689,Fa=35690,Ca=36289,La=36292,Ha=36293,qo=5125,Nl=36294,Jl=36295,kl=36296,Na=36298,Ja=36299,ka=36300,Ea=36303,Ua=36306,Ba=36307,Ka=36308,Ma=36311,eo=3553,no=34067,ts=32879,ro=35866,ge={};function El(t,e){return ge[e].bindPoint}function Aa(t,e){return function(n){t.uniform1f(e,n)}}function ja(t,e){return function(n){t.uniform1fv(e,n)}}function za(t,e){return function(n){t.uniform2fv(e,n)}}function Oa(t,e){return function(n){t.uniform3fv(e,n)}}function Pa(t,e){return function(n){t.uniform4fv(e,n)}}function Ul(t,e){return function(n){t.uniform1i(e,n)}}function Bl(t,e){return function(n){t.uniform1iv(e,n)}}function Kl(t,e){return function(n){t.uniform2iv(e,n)}}function Ml(t,e){return function(n){t.uniform3iv(e,n)}}function Al(t,e){return function(n){t.uniform4iv(e,n)}}function _a(t,e){return function(n){t.uniform1ui(e,n)}}function Qa(t,e){return function(n){t.uniform1uiv(e,n)}}function Da(t,e){return function(n){t.uniform2uiv(e,n)}}function $a(t,e){return function(n){t.uniform3uiv(e,n)}}function qa(t,e){return function(n){t.uniform4uiv(e,n)}}function t0(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function e0(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function n0(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function r0(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function i0(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function o0(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function s0(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function l0(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function c0(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function jn(t,e,n,r){const i=El(t,e);return ni(t)?function(e){let o,a;!e||jo(t,e)?(o=e,a=null):(o=e.texture,a=e.sampler),t.uniform1i(r,n),t.activeTexture(_i+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(e){t.uniform1i(r,n),t.activeTexture(_i+n),t.bindTexture(i,e)}}function zn(t,e,n,r,i){const o=El(t,e),a=new Int32Array(i);for(let t=0;t<i;++t)a[t]=n+t;return ni(t)?function(e){t.uniform1iv(r,a),e.forEach((function(e,r){let i,l;t.activeTexture(_i+a[r]),!e||jo(t,e)?(i=e,l=null):(i=e.texture,l=e.sampler),t.bindSampler(n,l),t.bindTexture(o,i)}))}:function(e){t.uniform1iv(r,a),e.forEach((function(e,n){t.activeTexture(_i+a[n]),t.bindTexture(o,e)}))}}function io(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(qi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||to,n.normalize||!1,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function mr(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");t.vertexAttrib4iv(e,n.value)}else t.bindBuffer(qi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||$o,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function oo(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");t.vertexAttrib4uiv(e,n.value)}else t.bindBuffer(qi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||qo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function es(t,e,n){const r=n.size,i=n.count;return function(n){t.bindBuffer(qi,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||to,s=ge[l].size*o,c=n.normalize||!1,u=n.offset||0,d=s/i;for(let r=0;r<i;++r)t.enableVertexAttribArray(e+r),t.vertexAttribPointer(e+r,a,l,c,s,u+d*r),t.vertexAttribDivisor&&t.vertexAttribDivisor(e+r,n.divisor||0)}}ge[to]={Type:Float32Array,size:4,setter:Aa,arraySetter:ja},ge[Wl]={Type:Float32Array,size:8,setter:za,cols:2},ge[Vl]={Type:Float32Array,size:12,setter:Oa,cols:3},ge[Rl]={Type:Float32Array,size:16,setter:Pa,cols:4},ge[$o]={Type:Int32Array,size:4,setter:Ul,arraySetter:Bl},ge[xl]={Type:Int32Array,size:8,setter:Kl,cols:2},ge[Il]={Type:Int32Array,size:12,setter:Ml,cols:3},ge[Sl]={Type:Int32Array,size:16,setter:Al,cols:4},ge[qo]={Type:Uint32Array,size:4,setter:_a,arraySetter:Qa},ge[Nl]={Type:Uint32Array,size:8,setter:Da,cols:2},ge[Jl]={Type:Uint32Array,size:12,setter:$a,cols:3},ge[kl]={Type:Uint32Array,size:16,setter:qa,cols:4},ge[Yl]={Type:Uint32Array,size:4,setter:Ul,arraySetter:Bl},ge[wl]={Type:Uint32Array,size:8,setter:Kl,cols:2},ge[Tl]={Type:Uint32Array,size:12,setter:Ml,cols:3},ge[Fl]={Type:Uint32Array,size:16,setter:Al,cols:4},ge[Cl]={Type:Float32Array,size:32,setter:t0,rows:2,cols:2},ge[Ll]={Type:Float32Array,size:48,setter:e0,rows:3,cols:3},ge[Hl]={Type:Float32Array,size:64,setter:n0,rows:4,cols:4},ge[Ia]={Type:Float32Array,size:32,setter:r0,rows:2,cols:3},ge[Sa]={Type:Float32Array,size:32,setter:o0,rows:2,cols:4},ge[Ya]={Type:Float32Array,size:48,setter:i0,rows:3,cols:2},ge[wa]={Type:Float32Array,size:48,setter:l0,rows:3,cols:4},ge[Ta]={Type:Float32Array,size:64,setter:s0,rows:4,cols:2},ge[Fa]={Type:Float32Array,size:64,setter:c0,rows:4,cols:3},ge[Wa]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:eo},ge[Va]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:no},ge[Ra]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:ts},ge[xa]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:eo},ge[Ca]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:ro},ge[La]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:ro},ge[Ha]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:no},ge[Na]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:eo},ge[Ja]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:ts},ge[ka]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:no},ge[Ea]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:ro},ge[Ua]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:eo},ge[Ba]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:ts},ge[Ka]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:no},ge[Ma]={Type:null,size:0,setter:jn,arraySetter:zn,bindPoint:ro};const Cn={};Cn[to]={size:4,setter:io},Cn[Wl]={size:8,setter:io},Cn[Vl]={size:12,setter:io},Cn[Rl]={size:16,setter:io},Cn[$o]={size:4,setter:mr},Cn[xl]={size:8,setter:mr},Cn[Il]={size:12,setter:mr},Cn[Sl]={size:16,setter:mr},Cn[qo]={size:4,setter:oo},Cn[Nl]={size:8,setter:oo},Cn[Jl]={size:12,setter:oo},Cn[kl]={size:16,setter:oo},Cn[Yl]={size:4,setter:mr},Cn[wl]={size:8,setter:mr},Cn[Tl]={size:12,setter:mr},Cn[Fl]={size:16,setter:mr},Cn[Cl]={size:4,setter:es,count:2},Cn[Ll]={size:9,setter:es,count:3},Cn[Hl]={size:16,setter:es,count:4};const u0=/ERROR:\s*\d+:(\d+)/gi;function a0(t,e="",n=0){const r=[...e.matchAll(u0)],i=new Map(r.map(((t,n)=>{const i=parseInt(t[1]),o=r[n+1],a=o?o.index:e.length;return[i-1,e.substring(t.index,a)]})));return t.split("\n").map(((t,e)=>{const r=i.get(e);return`${e+1+n}: ${t}${r?`\n\n^^^ ${r}`:""}`})).join("\n")}const Es=/^[ \t]*\n/;function jl(t){let e=0;return Es.test(t)&&(e=1,t=t.replace(Es,"")),{lineOffset:e,shaderSource:t}}function d0(t,e){return t.errorCallback(e),t.callback&&setTimeout((()=>{t.callback(`${e}\n${t.errors.join("\n")}`)})),null}function h0(t,e,n,r){if(r=r||Do,!t.getShaderParameter(n,da)){const i=t.getShaderInfoLog(n),{lineOffset:o,shaderSource:a}=jl(t.getShaderSource(n)),l=`${a0(a,i,o)}\nError compiling ${ul(t,e)}: ${i}`;return r(l),l}return""}function ns(t,e,n){let r,i,o;if("function"==typeof e&&(n=e,e=void 0),"function"==typeof t)n=t,t=void 0;else if(t&&!Array.isArray(t)){const e=t;n=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,i=e.transformFeedbackMode,o=e.callback}const a=n||Do,l=[],s={errorCallback(t,...e){l.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(t)?t.forEach((function(t,r){n[t]=e?e[r]:r})):n=t||{},s.attribLocations=n}return s}const f0=["VERTEX_SHADER","FRAGMENT_SHADER"];function m0(t,e){return e.indexOf("frag")>=0?fa:e.indexOf("vert")>=0?ma:void 0}function p0(t,e,n){const r=t.getAttachedShaders(e);for(const e of r)n.has(e)&&t.deleteShader(e);t.deleteProgram(e)}const b0=(t=0)=>new Promise((e=>setTimeout(e,t)));function y0(t,e,n){const r=t.createProgram(),{attribLocations:i,transformFeedbackVaryings:o,transformFeedbackMode:a}=ns(n);for(let n=0;n<e.length;++n){let i=e[n];if("string"==typeof i){const e=Gl(i),o=e?e.text:i;let a=t[f0[n]];e&&e.type&&(a=m0(t,e.type)||a),i=t.createShader(a),t.shaderSource(i,jl(o).shaderSource),t.compileShader(i),t.attachShader(r,i)}}Object.entries(i).forEach((([e,n])=>t.bindAttribLocation(r,n,e)));{let e=o;e&&(e.attribs&&(e=e.attribs),Array.isArray(e)||(e=Object.keys(e)),t.transformFeedbackVaryings(r,e,a||pa))}return t.linkProgram(r),r}function g0(t,e,n,r,i){const o=ns(n,r,i),a=new Set(e),l=y0(t,e,o);function s(t,e){const n=v0(t,e,o.errorCallback);return n&&p0(t,e,a),n}if(!o.callback)return s(t,l)?void 0:l;Z0(t,l).then((()=>{const e=s(t,l);o.callback(e,e?void 0:l)}))}async function Z0(t,e){const n=t.getExtension("KHR_parallel_shader_compile"),r=n?(t,e)=>t.getProgramParameter(e,n.COMPLETION_STATUS_KHR):()=>!0;let i=0;do{await b0(i),i=1e3/60}while(!r(t,e))}function v0(t,e,n){if(n=n||Do,!t.getProgramParameter(e,ha)){const r=t.getProgramInfoLog(e);n(`Error in program linking: ${r}`);return`${r}\n${t.getAttachedShaders(e).map((e=>h0(t,t.getShaderParameter(e,t.SHADER_TYPE),e,n))).filter((t=>t)).join("\n")}`}}function G0(t,e,n,r,i){return g0(t,e,n,r,i)}function zl(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const X0=/(\.|\[|]|\w+)/g,W0=t=>t>="0"&&t<="9";function V0(t,e,n,r){const i=t.split(X0).filter((t=>""!==t));let o=0,a="";for(;;){const t=i[o++];a+=t;const l=W0(t[0]),s=l?parseInt(t):t;if(l&&(a+=i[o++]),o===i.length){n[s]=e;break}{const t=i[o++],e="["===t,l=n[s]||(e?[]:{});n[s]=l,n=l,r[a]=r[a]||function(t){return function(e){Ol(t,e)}}(l),a+=t}}}function R0(t,e){let n=0;function r(e,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=ge[a];if(!l)throw new Error(`unknown type: 0x${a.toString(16)}`);let s;if(l.bindPoint){const e=n;n+=r.size,s=o?l.arraySetter(t,a,e,i,r.size):l.setter(t,a,e,i,r.size)}else s=l.arraySetter&&o?l.arraySetter(t,i):l.setter(t,i);return s.location=i,s}const i={},o={},a=t.getProgramParameter(e,Xl);for(let n=0;n<a;++n){const a=t.getActiveUniform(e,n);if(zl(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const s=t.getUniformLocation(e,a.name);if(s){const t=r(0,a,s);i[l]=t,V0(l,t,o,i)}}return i}function x0(t,e){const n={},r=t.getProgramParameter(e,ya);for(let i=0;i<r;++i){const r=t.getTransformFeedbackVarying(e,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}function I0(t,e){const n=t.getProgramParameter(e,Xl),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=t.getActiveUniform(e,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];t.getActiveUniforms(e,i,t[o]).forEach((function(t,e){r[e][a]=t}))}));const o={},a=t.getProgramParameter(e,ga);for(let n=0;n<a;++n){const r=t.getActiveUniformBlockName(e,n),i={index:t.getUniformBlockIndex(e,r),usedByVertexShader:t.getActiveUniformBlockParameter(e,n,Za),usedByFragmentShader:t.getActiveUniformBlockParameter(e,n,va),size:t.getActiveUniformBlockParameter(e,n,Ga),uniformIndices:t.getActiveUniformBlockParameter(e,n,Xa)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}function Ol(t,e){for(const n in e){const r=t[n];"function"==typeof r?r(e[n]):Ol(t[n],e[n])}}function Pl(t,...e){const n=t.uniformSetters||t,r=e.length;for(let t=0;t<r;++t){const r=e[t];if(Array.isArray(r)){const t=r.length;for(let e=0;e<t;++e)Pl(n,r[e])}else for(const t in r){const e=n[t];e&&e(r[t])}}}function S0(t,e){const n={},r=t.getProgramParameter(e,ba);for(let i=0;i<r;++i){const r=t.getActiveAttrib(e,i);if(zl(r))continue;const o=t.getAttribLocation(e,r.name),a=Cn[r.type],l=a.setter(t,o,a);l.location=o,n[r.name]=l}return n}function Y0(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function w0(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(Y0(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(aa,n.indices))}function Us(t,e){const n={program:e,uniformSetters:R0(t,e),attribSetters:S0(t,e)};return ni(t)&&(n.uniformBlockSpec=I0(t,e),n.transformFeedbackInfo=x0(t,e)),n}const T0=/\s|{|}|;/;function F0(t,e,n,r,i){const o=ns(n,r,i),a=[];if(e=e.map((function(t){if(!T0.test(t)){const e=Gl(t);if(e)t=e.text;else{const e=`no element with id: ${t}`;o.errorCallback(e),a.push(e)}}return t})),a.length)return d0(o,"");const l=o.callback;l&&(o.callback=(e,n)=>{l(e,e?void 0:Us(t,n))});const s=G0(t,e,o);return s?Us(t,s):null}const C0=4,Bs=5123;function L0(t,e,n,r,i,o){n=void 0===n?4:n;const a=e.indices,l=e.elementType,s=void 0===r?e.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?t.drawElementsInstanced(n,s,void 0===l?Bs:e.elementType,i,o):t.drawElements(n,s,void 0===l?Bs:e.elementType,i):void 0!==o?t.drawArraysInstanced(n,i,s,o):t.drawArrays(n,i,s)}const _l=36160,yi=36161,H0=3553,N0=5121,J0=6402,k0=6408,E0=33190,U0=36012,B0=35056,K0=36013,M0=32854,A0=32855,j0=36194,Ql=33189,Dl=6401,$l=36168,rs=34041,Io=36064,so=36096,ql=36128,is=33306,So=33071,Yo=9729,z0=[{format:k0,type:N0,min:Yo,wrap:So},{format:rs}],Dn={};function O0(t,e){return Dn[t]||Dn[e]}Dn[rs]=is,Dn[Dl]=ql,Dn[$l]=ql,Dn[J0]=so,Dn[Ql]=so,Dn[E0]=so,Dn[U0]=so,Dn[B0]=is,Dn[K0]=is;const pr={};function P0(t){return pr[t]}pr[M0]=!0,pr[A0]=!0,pr[j0]=!0,pr[rs]=!0,pr[Ql]=!0,pr[Dl]=!0,pr[$l]=!0;const _0=32;function Q0(t){return t>=Io&&t<Io+_0}function Qi(t,e,n,r){const i=_l,o=t.createFramebuffer();t.bindFramebuffer(i,o),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(e=e||z0).forEach((function(e,o){let s=e.attachment;const c=e.samples,u=e.format;let d=e.attachmentPoint||O0(u,e.internalFormat);if(d||(d=Io+o),Q0(d)&&a.push(d),!s)if(void 0!==c||P0(u))s=t.createRenderbuffer(),t.bindRenderbuffer(yi,s),c>1?t.renderbufferStorageMultisample(yi,c,u,n,r):t.renderbufferStorage(yi,u,n,r);else{const i=Object.assign({},e);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||Yo,i.mag=i.mag||i.minMag||Yo,i.wrapS=i.wrapS||i.wrap||So,i.wrapT=i.wrapT||i.wrap||So),s=vl(t,i)}if(ou(t,s))t.framebufferRenderbuffer(i,d,yi,s);else{if(!jo(t,s))throw new Error("unknown attachment type");void 0!==e.layer?t.framebufferTextureLayer(i,d,s,e.level||0,e.layer):t.framebufferTexture2D(i,d,e.target||H0,s,e.level||0)}l.attachments.push(s)})),t.drawBuffers&&t.drawBuffers(a),l}function D0(t,e,n){n=n||_l,e?(t.bindFramebuffer(n,e.framebuffer),t.viewport(0,0,e.width,e.height)):(t.bindFramebuffer(n,null),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight))}function pn(t,e){return()=>e instanceof WebGLTexture?e:vl(t,{src:e,wrap:t.CLAMP_TO_EDGE})}const Ur=2;class Ir{constructor(t){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:e,width:n,height:r}=t;this.context=e,this.options=t;const i=this.buildDefines();this.programInfo=F0(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=Yu(this.context,this.getBuffers()),this.fbi=Qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}resizeOutput(t,e){this.fbi=Qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e),this.options.width=t,this.options.height=e,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 t="";const e=this.getDefines();for(let n in e)t+=`#define ${n} ${e[n].toFixed(1)}\n`;return t}run(t){var e,n,r,i,o,a;null==(e=this.profiler)||e.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const e in t)"function"==typeof t[e]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${e}`),t[e]=t[e](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${e}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let s=0;this.lastRun&&(s=(l-this.lastRun)/1e3),this.lastRun=l,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),Pl(this.programInfo,{delta:s,canvas:[this.context.canvas.width,this.context.canvas.height],...t}),D0(this.context,this.options.disableFramebuffer?null:this.fbi),L0(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(t){this.profiler=t}}const $0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n",q0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n";class os extends Ir{getFragmentShader(){return $0}getVertexShader(){return q0}}class ss{constructor(){gt(this,"steps",[]),gt(this,"profiler")}addStep(t){this.steps.push(t)}async run(){for(const t of this.steps)t.program.run(t.getUniforms())}resizeOutput(t,e){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(const n of this.steps)n.preventResize||n.program.resizeOutput(t,e);null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)}setProfiler(t){this.profiler=t;for(const e of this.steps)e.program.setProfiler(t)}setId(t){for(const e of this.steps)e.program.id=t}}class ls extends ss{constructor(){super(...arguments),gt(this,"preciseMaskEnabled",!1)}}class tc extends ls{constructor(t){super(),gt(this,"inputImage"),gt(this,"inputBackgroundImage"),gt(this,"inputMask"),gt(this,"preciseMaskEnabled",!0),this.context=t;const e={context:t,height:t.canvas.height,width:t.canvas.width},n=new os({...e,disableFramebuffer:!0});this.addStep({program:n,getUniforms:()=>({background:pn(t,this.inputBackgroundImage),foreground:pn(t,this.inputImage),threshold:pn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}const t3="precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n",e3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n";class n3 extends Ir{getFragmentShader(){return t3}getVertexShader(){return e3}}class r3 extends ss{constructor(t,e,n){super(),gt(this,"inputImage"),this.context=t;const r={context:t,height:n,width:e};this.addStep({program:new n3({...r,disableFramebuffer:!0}),getUniforms:()=>({texture:pn(t,this.inputImage),invert_y:!0})})}setData(t){this.inputImage=t}}async function ec(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}const i3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",o3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";var cs=(t=>(t[t.LINEAR=0]="LINEAR",t[t.GAUSSIAN=1]="GAUSSIAN",t))(cs||{});class nc extends Ir{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return i3+this.createLoopFunction()}getVertexShader(){return o3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}getFactor(t,e){return this.options.type,this.getLinearFactor(t,e)}getLinearFactor(t,e){return 1}getGaussianFactor(t,e){var n;const r=1/(2*Math.PI*Math.max(null!=(n=this.options.radius)?n:1,1)**2),i=r*-(t**2+e**2);return r*Math.E**i}}class us extends Ir{constructor(t){super(t),gt(this,"fbi2"),this.fbi2=Qi(t.context,[{format:t.context.RGBA,type:t.context.UNSIGNED_BYTE,min:t.context.LINEAR,mag:t.context.LINEAR,wrap:t.context.CLAMP_TO_EDGE}],t.width,t.height)}run(t){const e=this.fbi;this.fbi=this.fbi2,this.fbi2=e,this.output=this.fbi.attachments[0],super.run({...t,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(t,e){super.resizeOutput(t,e),this.fbi2=Qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e)}}const s3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\n// uniform float treshold;\nuniform sampler2D image_now;\nuniform sampler2D image_before;\nuniform sampler2D mask_now;\nuniform sampler2D mask_before;\nuniform sampler2D previous_rendering;\nuniform vec2 canvas;\n\nuniform float delta;\n\nfloat current_factor = 0.69;\nfloat previous_factor = 0.74;\nfloat threshold_activation = 0.54;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nfloat getThreshold() {\n vec4 color = vec4(0.);\n for (float y = -6.; y < 7.; y += 1.) {\n for (float x = -6.; x < 7.; x += 1.) {\n vec4 image_now_color =\n texture2D(image_now, _texture_coord + vec2(x, y) / canvas);\n vec4 image_before_color =\n texture2D(image_before, _texture_coord + vec2(x, y) / canvas);\n color += abs(image_before_color - image_now_color);\n }\n }\n return (color.x + color.y + color.z) / (3. * 9.);\n}\n\nvoid main() {\n float treshold_input = .4;\n float treshold_previous_rendering = .98;\n\n vec4 mask_now_color = texture2D(mask_now, _texture_coord);\n vec4 mask_before_color = texture2D(mask_before, _texture_coord);\n vec4 previous_rendering_color = texture2D(previous_rendering, _texture_coord);\n\n vec3 mask_diff = abs(mask_before_color.xyz - mask_now_color.xyz);\n float flickering = mask_diff.x;\n float threshold = getThreshold();\n if (threshold < threshold_activation) {\n gl_FragColor = vec4(flickering, 0., 0., 1.) * current_factor +\n previous_rendering_color * previous_factor;\n gl_FragColor *= (1. - threshold);\n }\n}\n",l3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class c3 extends us{getFragmentShader(){return s3}getVertexShader(){return l3}}const u3="#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}",a3="#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}";class d3 extends Ir{getFragmentShader(){return u3}getVertexShader(){return a3}}const h3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n int count = 0;\n for (float y = -1.; y < 2.; y += 1.) {\n for (float x = -1.; x < 2.; x += 1.) {\n vec2 coord = _texture_coord + vec2(y, x) / canvas;\n vec4 color = texture2D(texture, coord);\n if (color.r > .1) {\n count++;\n }\n }\n }\n if (count > 5) {\n gl_FragColor = texture2D(texture, _texture_coord);\n }\n}\n",f3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class m3 extends Ir{getFragmentShader(){return h3}getVertexShader(){return f3}}const p3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n vec4 color = texture2D(texture, _texture_coord);\n for (float y = -2.; y < 3.; y += 1.) {\n for (float x = -2.; x < 3.; x += 1.) {\n vec2 coord = _texture_coord;\n coord += vec2(y, x) / canvas;\n color += texture2D(texture, coord) * (1. / 4.);\n }\n }\n\n gl_FragColor = color;\n}\n",b3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class y3 extends us{getFragmentShader(){return p3}getVertexShader(){return b3}}const g3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D threshold;\nuniform sampler2D inputs;\n\nvoid main() {\n vec4 inputs_color = texture2D(inputs, _texture_coord);\n vec4 threshold_color = texture2D(threshold, _texture_coord);\n if (threshold_color.r < .1 && inputs_color.r > .5) {\n gl_FragColor = inputs_color;\n }\n}\n",Z3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class v3 extends us{getFragmentShader(){return g3}getVertexShader(){return Z3}}class G3 extends ss{constructor(t,e,n){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=t;const r={context:t,height:n,width:e},i=new c3(r),o=new nc({...r,radius:1,type:cs.GAUSSIAN}),a=new v3(r),l=new y3(r),s=new m3(r);this.jointBilateral=new d3(r),this.addStep({program:i,getUniforms:()=>({image_now:pn(t,this.inputImage),image_before:pn(t,this.previousInputImage),mask_now:pn(t,this.inputMask),mask_before:pn(t,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:a,getUniforms:()=>({inputs:pn(t,this.inputMask),threshold:pn(t,i.output)})}),this.addStep({program:s,getUniforms:()=>({texture:pn(t,a.output)})}),this.addStep({program:l,getUniforms:()=>({texture:pn(t,s.output)})}),this.addStep({program:o,getUniforms:()=>({texture:pn(t,l.output)})}),this.addStep({program:this.jointBilateral,getUniforms:()=>{var e,n,r,i,a,l,s,c;const u=null!=(n=null==(e=this.inputImage)?void 0:e.width)?n:1,d=null!=(i=null==(r=this.inputImage)?void 0:r.height)?i:1,h=null!=(l=null==(a=this.inputMask)?void 0:a.width)?l:1,m=null!=(c=null==(s=this.inputMask)?void 0:s.height)?c:1,p=Math.max(u/h,d/m),b=Math.max(1,.66*Math.sqrt(p)),f=1/u,g=1/d;return{input_frame:pn(t,this.inputImage),segmentation_mask:pn(t,this.inputMask),threshold:pn(t,o.output),texel_size:[f,g],step:b,radius:p,offset:b>1?.5*b:0,sigma_texel:Math.max(f,g)*p,sigma_color:.1}}}),this.output=this.jointBilateral.output}setData(t,e){this.previousInputImage=this.inputImage?this.inputImage:t,this.previousInputMask=this.inputMask?this.inputMask:e,this.inputImage=t,this.inputMask=e}setOptions(t){this.options=t}resizeOutput(t,e){super.resizeOutput(t,e),this.output=this.jointBilateral.output}}var rc=(t=>(t.PUSH="PUSH",t.POP="POP",t))(rc||{});class X3{constructor(t){gt(this,"context"),gt(this,"extension"),gt(this,"queries",[]),gt(this,"activeQuery"),this.context=t,this.extension=t.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(t){this.createQuery("PUSH",t)}popContext(t){this.createQuery("POP",t)}createQuery(t,e){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:e,action:t,query:this.activeQuery})}async getResolvedQueries(){const t=(await Promise.all([...this.queries].map((t=>this.resolveQuery(t))))).filter((t=>t));for(let e=1;e<t.length;++e)t[e].timestamp+=t[e-1].duration+t[e-1].timestamp;return t}async resolveQuery(t){if(await this.awaitQueryAvailable(t)){if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT))return{...t,duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0};console.log("Disjointed query",t)}else console.log("Unawaitable query",t)}async awaitQueryAvailable(t){for(let e=0;e<10;++e){if(this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE))return t;await ec(200)}}}class lo{constructor(){gt(this,"canvas"),gt(this,"context"),gt(this,"pipeline"),gt(this,"previousImageWidth",0),gt(this,"previousImageHeight",0),gt(this,"previousMaskWidth",2),gt(this,"previousMaskHeight",2),gt(this,"profiler"),gt(this,"postProcessingEnabled",!0),gt(this,"improveMask");const t=new OffscreenCanvas(0,0),e=t.getContext("webgl2");if(!e)throw"Fail to retrieve webgl2 context";this.canvas=t,this.context=e,this.improveMask=new G3(this.context,2,2)}setFlickeringOptions(t){this.improveMask.setOptions(t)}enablePostProcessing(){this.postProcessingEnabled=!0}disablePostProcessing(){this.postProcessingEnabled=!1}async profileWebgl(t){const e=new X3(this.context);return this.profiler=e,e.start(),await ec(t),this.profiler=void 0,e.stop(),e.getResolvedQueries()}async render(t,e){var n,r;if(!this.pipeline)throw"missing pipeline";(this.previousImageHeight!==t.height||this.previousImageWidth!==t.width)&&this.resizeOutput(t.width,t.height),(this.previousMaskHeight!==e.height||this.previousMaskWidth!==e.width)&&(this.improveMask.resizeOutput(e.width,e.height),this.previousMaskWidth=e.width,this.previousMaskHeight=e.height);const i="renderer";null==(n=this.profiler)||n.pushContext(i),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler);let o=e;return this.postProcessingEnabled&&(this.improveMask.setData(t,e),this.improveMask.run(),o=this.improveMask.output),this.pipeline.setData(t,o),await this.pipeline.run(),null==(r=this.profiler)||r.popContext(i),this.canvas}resizeOutput(t,e){var n;this.canvas.width=t,this.canvas.height=e,null==(n=this.pipeline)||n.resizeOutput(t,e),this.previousImageWidth=t,this.previousImageHeight=e}}class ic extends lo{constructor(){super(),gt(this,"pipeline"),gt(this,"backgroundImage"),gt(this,"backgroundImageResizerCanvas"),gt(this,"backgroundImageResizerContext"),gt(this,"backgroundImageResizer"),this.pipeline=new tc(this.context);const t=new OffscreenCanvas(0,0),e=t.getContext("webgl2");if(!e)throw"Fail to retrieve webgl context";this.backgroundImageResizerCanvas=t,this.backgroundImageResizerContext=e,this.backgroundImageResizer=new r3(this.backgroundImageResizerContext,0,0)}setBackgroundImage(t){this.backgroundImage=t,this.updateBackgroundImage()}updateBackgroundImage(){const{width:t,height:e}=this.canvas;this.backgroundImageResizer.resizeOutput(t,e),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas}resizeOutput(t,e){super.resizeOutput(t,e),this.backgroundImageResizerCanvas.width=t,this.backgroundImageResizerCanvas.height=e,this.backgroundImageResizer.resizeOutput(t,e),this.updateBackgroundImage()}}class W3 extends ic{constructor(){super(...arguments),gt(this,"frameReader")}setBackgroundVideo(t){this.frameReader=t}async render(t,e){return await this.readNextVideoFrame(),super.render(t,e)}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());if(null!=e&&e.value){const t=await createImageBitmap(e.value);this.setBackgroundImage(t),e.value.close()}}}class Ks{blurBackground(t){return new z2(t)}blurSilhouette(t){return new O2(t)}imageBackground(){return new P2}videoBackground(){return new W3}}const V3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",R3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class x3 extends Ir{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return V3+this.createLoopFunction()}getVertexShader(){return R3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}}const I3=10,S3=2,Y3=8;class w3 extends ls{constructor(t,e){super(),gt(this,"inputImage"),gt(this,"inputMask"),gt(this,"blur"),this.context=t,this.radius=e;const n={context:t,height:t.canvas.height,width:t.canvas.width};this.blur=new x3({...n,radius:e,...this.getBlurTextureSize(t.canvas.width,t.canvas.height)});const r=new os({...n,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:pn(t,this.inputImage),mask:pn(t,this.inputMask)})}),this.addStep({program:r,getUniforms:()=>({background:pn(t,this.blur.output),foreground:pn(t,this.inputImage),threshold:pn(t,this.inputMask)})})}getBlurTextureSize(t,e){const n=this.radius>10?8:2;return{width:Math.max(2,t/n),height:Math.max(2,e/n)}}setData(t,e){this.inputImage=t,this.inputMask=e}resizeOutput(t,e){super.resizeOutput(t,e);const n=this.getBlurTextureSize(t,e);this.blur.resizeOutput(n.width,n.height)}}class T3 extends lo{constructor(t){super(),gt(this,"pipeline"),this.pipeline=new w3(this.context,t),this.disablePostProcessing()}}class F3 extends ls{constructor(t,e){super(),gt(this,"inputImage"),gt(this,"inputMask"),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new nc({...n,radius:e,type:cs.GAUSSIAN}),i=new os({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:pn(t,this.inputImage)})}),this.addStep({program:i,getUniforms:()=>({background:pn(t,this.inputImage),foreground:pn(t,r.output),threshold:pn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class C3 extends lo{constructor(t){super(),gt(this,"pipeline"),this.pipeline=new F3(this.context,t),this.disablePostProcessing()}}class L3 extends tc{constructor(){super(...arguments),gt(this,"frameReader"),gt(this,"preciseMaskEnabled",!0)}set reader(t){this.frameReader=t}async run(){this.frameReader&&(await this.readNextVideoFrame(),await super.run())}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());null!=e&&e.value&&(this.inputBackgroundImage=await createImageBitmap(e.value),e.value.close())}}class H3 extends lo{constructor(){super(),gt(this,"pipeline"),this.pipeline=new L3(this.context)}setBackgroundVideo(t){this.pipeline.reader=t}}class Ms{blurBackground(t){return new T3(t)}blurSilhouette(t){return new C3(t)}imageBackground(){return new ic}videoBackground(){return new H3}}class N3{constructor(t){switch(gt(this,"factory"),t){case xi.CANVAS:this.factory=new Ks;break;case xi.WEBGL:this.factory=new Ms;break;default:const t=Ps();this.factory=t.supported?new Ms:new Ks}}blurBackground(t){return this.getFactory().blurBackground(t)}blurSilhouette(t){return this.getFactory().blurSilhouette(t)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class J3{constructor(){gt(this,"renderer"),gt(this,"backgroundVideo"),gt(this,"backgroundImage")}setBackgroundOptions(t){var e,n;const r=new N3(null==(e=t.renderingOptions)?void 0:e.type);switch(t.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(t.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(t.radius));break;case"VideoBackground":const e=r.videoBackground();this.backgroundVideo&&e.setBackgroundVideo(this.backgroundVideo),this.renderer=e;break;case"VirtualBackground":const n=r.imageBackground();this.backgroundImage&&n.setBackgroundImage(this.backgroundImage),this.renderer=n;break;default:throw`Unknown rendering type [${t.transformerType}]`}(null==(n=t.renderingOptions)?void 0:n.type)===xi.WEBGL&&(t.renderingOptions.selfieSegmentationType===Go.PRECISE?this.renderer.enablePostProcessing():t.renderingOptions.selfieSegmentationType===Go.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(t){var e;null==(e=this.renderer)||e.setFlickeringOptions(t)}setVideoBGReadable(t){this.backgroundVideo=t.getReader();const e=this.renderer;null!=e&&e.setBackgroundVideo&&e.setBackgroundVideo(this.backgroundVideo)}async setVirtualBGImage(t){const e=this.renderer;null!=e&&e.setBackgroundImage&&e.setBackgroundImage(t),this.backgroundImage=t}async process(t,e){if(this.renderer)return this.renderer.render(t,e)}async resizeForeground(t,e){}getBlurSize(t=Gi.Low){switch(t){case Gi.Low:return 5;case Gi.High:return 12}return t}async profile(t){var e,n;return null!=(n=null==(e=this.renderer)?void 0:e.profileWebgl(t))?n:[]}}class k3{constructor(){gt(this,"selfieSegmentation",new Os),gt(this,"backgroundFilter"),gt(this,"reporter",new A2),gt(this,"isEnabled",!0),gt(this,"backgroundOptions")}async init(t,e){await this.selfieSegmentation.init(e.wasmAssetUriPath,e.tfliteAssetUriPath),this.backgroundFilter=new J3,this.report({variation:"Create"})}async transform(t,e){var n,r;if(!this.isEnabled)return e.enqueue(t);let i;const o=null!=(n=t.timestamp)?n:0,a=await createImageBitmap(t),l=await this.selfieSegmentation.process(a);l&&(i=await(null==(r=this.backgroundFilter)?void 0:r.process(a,l))),i?(t.close(),e.enqueue(new VideoFrame(i,{timestamp:o,alpha:"discard"}))):e.enqueue(t)}async setBackgroundOptions(t){var e;this.backgroundOptions=t,await(null==(e=this.backgroundFilter)?void 0:e.setBackgroundOptions(t)),this.report({variation:"Update"})}async setVideoBGReadable(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVideoBGReadable(t))}async setVirtualBGImage(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVirtualBGImage(t))}setFlickeringOptions(t){var e;null==(e=this.backgroundFilter)||e.setFlickeringOptions(t),this.report({variation:"Update"})}async profile(t){var e,n;return null!=(n=null==(e=this.backgroundFilter)?void 0:e.profile(t))?n:[]}getTransformerType(){var t,e;return null!=(e=null==(t=this.backgroundOptions)?void 0:t.transformerType)?e:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(t){var e;this.reporter.send({version:j2,action:"MlTransformers",transformerType:null==(e=this.backgroundOptions)?void 0:e.transformerType,config:JSON.stringify(this.backgroundOptions),...t})}}const as=class{constructor(){gt(this,"backgroundTransformer",new k3),gt(this,"mediaProcessor",new Oc),gt(this,"rate",30),gt(this,"resolveOnMediaProcessor"),gt(this,"eventsQueue",[])}async init(t,e){await this.backgroundTransformer.init(t,e),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny(((t,e)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:t,data:e}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:t,data:e})}))}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise((t=>{this.eventsQueue.length>0?t(this.eventsQueue.shift()):this.resolveOnMediaProcessor=t}))}async setTrackExpectedRate(t){this.rate=t,this.mediaProcessor.setTrackExpectedRate(t)}async transform(t,e){this.mediaProcessor.transform(t,e)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundTransformer)?void 0:e.setBackgroundOptions(t))}setVideoBGReadable(t){this.backgroundTransformer.setVideoBGReadable(t)}async setVirtualBGImage(t){await this.backgroundTransformer.setVirtualBGImage(t)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(t){this.backgroundTransformer.setFlickeringOptions(t)}setVonageMetadata(t){Ec(t)}async profile(t){return JSON.stringify(await this.backgroundTransformer.profile(t))}};let wo=as;b2("ProcessorWorker",as);const oc="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=",As=typeof window<"u"&&window.Blob&&new Blob([atob(oc)],{type:"text/javascript;charset=utf-8"});function E3(){const t=As&&(window.URL||window.webkitURL).createObjectURL(As);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+oc)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const ds=class extends ar{constructor(t){super(),gt(this,"rate",30),gt(this,"worker"),gt(this,"config"),gt(this,"backgroundOptions"),gt(this,"isEnabled",!0),this.config=t}async setTrackExpectedRate(t){var e;await this.startWorker(),await(null==(e=this.worker)?void 0:e.setTrackExpectedRate(t))}async setBackgroundOptions(t){this.backgroundOptions=t,await this.updateBackgroundOptions(t)}async transform(t,e){var n;await this.startWorker(),await(null==(n=this.worker)?void 0:n.transform(t,e))}async destroy(){var t;await(null==(t=this.worker)?void 0:t.terminate()),this.worker=void 0}async setFlickeringOptions(t){var e;await this.startWorker(),await(null==(e=this.worker)?void 0:e.setFlickeringOptions(t))}async profile(t){var e;const n=await(null==(e=this.worker)?void 0:e.profile(t));return JSON.parse(null!=n?n:"[]")}async enable(){var t;this.isEnabled=!0,await(null==(t=this.worker)?void 0:t.enable())}async disable(){var t;this.isEnabled=!1,await(null==(t=this.worker)?void 0:t.disable())}async listenWorker(){for(var t,e;null!=(t=this.worker)&&t.workerContext.worker;){const{name:t,data:n}=await(null==(e=this.worker)?void 0:e.onMediaProcessorEvent());switch(t){case"error":case"warn":this.emit(t,n);break;case"pipelineInfo":switch(this.emit(t,n),n){case"pipeline_ended":case"pipeline_ended_with_error":return void await this.destroy()}}}}async startWorker(){!this.config||this.worker||(this.worker=await m2(wo,E3),this.isEnabled||await this.worker.disable(),await this.worker.init("worker_"+ds.initCount++,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(Zi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(t){var e,n,r;await this.startWorker();const{transformerType:i}=t;switch(i){case"VideoBackground":await(null==(e=this.worker)?void 0:e.setVideoBGReadable(await xs.createVideoReadable(t.backgroundAssetUri)));break;case"VirtualBackground":await(null==(n=this.worker)?void 0:n.setVirtualBGImage(await xs.createImageCanvas(t.backgroundAssetUri)))}await(null==(r=this.worker)?void 0:r.setBackgroundOptions(t))}};let Xi=ds;gt(Xi,"initCount",0);class U3{constructor(t){this.queries=t}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(t){const e=document.createElement("a");e.href=URL.createObjectURL(new Blob([t],{type:"application/json"})),e.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}convertToSpeedscope(){const t=[],e={},n=[];let r=0;for(const i of this.queries){const o=[];for(const n of i)void 0===e[n.name]&&(e[n.name]=t.length,t.push({name:n.name})),o.push({type:n.action==rc.PUSH?"O":"C",frame:e[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration);n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}const i={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:t},profiles:n};return JSON.stringify(i,null,2)}}class sc extends ar{constructor(t){super(),gt(this,"worker"),gt(this,"connector"),this.worker=new Xi(t),this.connector=new _c(this.worker),this.worker.onAny(((t,e)=>this.emit(t,e)))}async setBackgroundOptions(t){await this.worker.setBackgroundOptions(t)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(t){this.worker.setTrackExpectedRate(t)}getConnector(){return this.connector}async profile(t){return this.worker.profile(t)}static async profile(t){const e=await Promise.all(this.instances.map((e=>e.profile(t))));return new U3(e)}static async create(t){const e=new this(t);return this.instances.push(e),e}}function A3(){return Ii}function j3(){return Si}function z3(){return Yi}function O3(){return wi}function P3(){return Ti}function _3(){return Fi}function Q3(){return Ci}async function D3(t){return await sc.create(t)}gt(sc,"instances",[]);export{k3 as BackgroundTransformer,Qc as BackgroundTransformerType,Gi as BlurRadius,Kc as ErrorFunction,ho as MediapipeHelper,vo as PipelineInfoData,xi as RenderingType,sc as VonageMediaProcessor,Bc as WarningType,Go as WebglSelfieSegmentationType,D3 as createVonageMediaProcessor,r2 as getSupportedBrowserFeatures,O3 as getVonageFaceDetection,P3 as getVonageFaceMash,j3 as getVonageHands,z3 as getVonageHolistic,_3 as getVonageObjectron,Q3 as getVonagePose,A3 as getVonageSelfieSegmentation,K3 as isSupported};
|
|
4
|
+
see: http://github.com/greggman/twgl.js for details */const ko=5120,Dr=5121,Eo=5122,Uo=5123,Bo=5124,Ko=5125,Mo=5126,_c=32819,Qc=32820,Dc=33635,$c=5131,qc=33640,tu=35899,eu=35902,nu=36269,ru=34042,qs={};{const t=qs;t[ko]=Int8Array,t[Dr]=Uint8Array,t[Eo]=Int16Array,t[Uo]=Uint16Array,t[Bo]=Int32Array,t[Ko]=Uint32Array,t[Mo]=Float32Array,t[_c]=Uint16Array,t[Qc]=Uint16Array,t[Dc]=Uint16Array,t[$c]=Uint16Array,t[qc]=Uint32Array,t[tu]=Uint32Array,t[eu]=Uint32Array,t[nu]=Uint32Array,t[ru]=Uint32Array}function Ao(t){if(t instanceof Int8Array)return ko;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return Dr;if(t instanceof Int16Array)return Eo;if(t instanceof Uint16Array)return Uo;if(t instanceof Int32Array)return Bo;if(t instanceof Uint32Array)return Ko;if(t instanceof Float32Array)return Mo;throw new Error("unsupported typed array type")}function tl(t){if(t===Int8Array)return ko;if(t===Uint8Array||t===Uint8ClampedArray)return Dr;if(t===Int16Array)return Eo;if(t===Uint16Array)return Uo;if(t===Int32Array)return Bo;if(t===Uint32Array)return Ko;if(t===Float32Array)return Mo;throw new Error("unsupported typed array type")}function el(t){const e=qs[t];if(!e)throw new Error("unknown gl type");return e}const zi=typeof SharedArrayBuffer<"u"?function(t){return t&&t.buffer&&(t.buffer instanceof ArrayBuffer||t.buffer instanceof SharedArrayBuffer)}:function(t){return t&&t.buffer&&t.buffer instanceof ArrayBuffer};function nl(...t){console.error(...t)}const Ts=new Map;function Di(t,e){if(!t||"object"!=typeof t)return!1;let n=Ts.get(e);n||(n=new WeakMap,Ts.set(e,n));let r=n.get(t);if(void 0===r){const i=Object.prototype.toString.call(t);r=i.substring(8,i.length-1)===e,n.set(t,r)}return r}function iu(t,e){return typeof WebGLBuffer<"u"&&Di(e,"WebGLBuffer")}function ou(t,e){return typeof WebGLRenderbuffer<"u"&&Di(e,"WebGLRenderbuffer")}function zo(t,e){return typeof WebGLTexture<"u"&&Di(e,"WebGLTexture")}function su(t,e){return typeof WebGLSampler<"u"&&Di(e,"WebGLSampler")}const rl=35044,Xr=34962,lu=34963,cu=34660,uu=5120,au=5121,du=5122,hu=5123,fu=5124,mu=5125,il=5126,ol={attribPrefix:""};function pu(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||rl)}function sl(t,e,n,r){if(iu(t,e))return e;n=n||Xr;const i=t.createBuffer();return pu(t,n,i,e,r),i}function ll(t){return"indices"===t}function bu(t){return t===Int8Array||t===Uint8Array}function yu(t){return t.length?t:t.data}const gu=/coord|texture/i,Zu=/color|colour/i;function vu(t,e){let n;if(n=gu.test(t)?2:Zu.test(t)?4:3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function Gu(t,e,n){return t.numComponents||t.size||vu(e,n||yu(t).length)}function cl(t,e){if(zi(t))return t;if(zi(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type?jo(t.type):void 0;return n||(n=ll(e)?Uint16Array:Float32Array),new n(t.data)}function Xu(t){return"number"==typeof t?t:t?tl(t):il}function jo(t){return"number"==typeof t?el(t):t||Float32Array}function Wu(t,e){return{buffer:e.buffer,numValues:24,type:Xu(e.type),arrayType:jo(e.type)}}function Vu(t,e){const n=e.data||e,r=jo(e.type),i=n*r.BYTES_PER_ELEMENT,o=t.createBuffer();return t.bindBuffer(Xr,o),t.bufferData(Xr,i,e.drawType||rl),{buffer:o,numValues:n,type:tl(r),arrayType:r}}function Ru(t,e,n){const r=cl(e,n);return{arrayType:r.constructor,buffer:sl(t,r,void 0,e.drawType),type:Ao(r),numValues:0}}function xu(t,e){const n={};return Object.keys(e).forEach((function(r){if(!ll(r)){const i=e[r],o=i.attrib||i.name||i.attribName||ol.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!zi(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let e;e=i.buffer&&i.buffer instanceof WebGLBuffer?Wu:"number"==typeof i||"number"==typeof i.data?Vu:Ru;const{buffer:a,type:l,numValues:s,arrayType:c}=e(t,i,r),u=void 0!==i.normalize?i.normalize:bu(c),d=Gu(i,r,s);n[o]={buffer:a,numComponents:d,type:l,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:void 0===i.divisor?void 0:i.divisor,drawType:i.drawType}}}})),t.bindBuffer(Xr,null),n}function Iu(t,e){return e===uu||e===au?1:e===du||e===hu?2:e===fu||e===mu||e===il?4:0}const bo=["position","positions","a_position"];function Su(t,e){let n,r;for(r=0;r<bo.length&&(n=bo[r],!(n in e)&&(n=ol.attribPrefix+n,!(n in e)));++r);r===bo.length&&(n=Object.keys(e)[0]);const i=e[n];if(!i.buffer)return 1;t.bindBuffer(Xr,i.buffer);const o=t.getBufferParameter(Xr,cu);t.bindBuffer(Xr,null);const a=o/Iu(t,i.type),l=i.numComponents||i.size,s=a/l;if(s%1!=0)throw new Error(`numComponents ${l} not correct for length ${length}`);return s}function Tu(t,e,n){const r=xu(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const e=cl(o,"indices");i.indices=sl(t,e,lu),i.numElements=e.length,i.elementType=Ao(e)}else i.numElements||(i.numElements=Su(t,i.attribs));return i}function ni(t){return!!t.texStorage2D}const ul=function(){const t={},e={};return function(n,r){return function(n){const r=n.constructor.name;if(!t[r]){for(const t in n)if("number"==typeof n[t]){const r=e[n[t]];e[n[t]]=r?`${r} | ${t}`:t}t[r]=!0}}(n),e[r]||("number"==typeof r?`0x${r.toString(16)}`:r)}}(),hr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},$r=zi,al=function(){let t;return function(){return t=t||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),Ys=6406,$n=6407,Wn=6408,ws=6409,Ls=6410,Ar=6402,Fs=34041,ji=33071,Yu=9728,wu=9729,fr=3553,dr=34067,Rr=32879,xr=35866,Oo=34069,Lu=34070,Fu=34071,Cu=34072,Hu=34073,Ju=34074,Xo=10241,Wo=10240,Oi=10242,Pi=10243,Cs=32882,Nu=33082,ku=33083,Eu=33084,Uu=33085,Bu=34892,Ku=34893,Po=3317,dl=3314,hl=32878,fl=3316,ml=3315,pl=32877,Mu=37443,Au=37441,zu=37440,ju=33321,Ou=36756,Pu=33325,_u=33326,Qu=33330,Du=33329,$u=33338,qu=33337,t1=33340,e1=33339,n1=33323,r1=36757,i1=33327,o1=33328,s1=33336,l1=33335,c1=33332,u1=33331,a1=33334,d1=33333,h1=32849,f1=35905,m1=36194,p1=36758,b1=35898,y1=35901,g1=34843,Z1=34837,v1=36221,G1=36239,X1=36215,W1=36233,V1=36209,R1=36227,x1=32856,I1=35907,S1=36759,T1=32855,Y1=32854,w1=32857,L1=34842,F1=34836,C1=36220,H1=36238,J1=36975,N1=36214,k1=36232,E1=36226,U1=36208,B1=33189,K1=33190,M1=36012,A1=36013,z1=35056,lr=5120,gn=5121,hi=5122,Cr=5123,fi=5124,br=5125,An=5126,Hs=32819,Js=32820,Ns=33635,Qn=5131,zr=36193,yo=33640,j1=35899,O1=35902,P1=36269,_1=34042,mi=33319,Hr=33320,pi=6403,Jr=36244,Nr=36248,yr=36249;let go;function $i(t){if(!go){const t={};t[Ys]={textureFormat:Ys,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,Qn,zr,An]},t[ws]={textureFormat:ws,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,Qn,zr,An]},t[Ls]={textureFormat:Ls,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,Qn,zr,An]},t[$n]={textureFormat:$n,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,Qn,zr,An,Ns]},t[Wn]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,Qn,zr,An,Hs,Js]},t[Ar]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[br,Cr]},t[ju]={textureFormat:pi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},t[Ou]={textureFormat:pi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[lr]},t[Pu]={textureFormat:pi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[An,Qn]},t[_u]={textureFormat:pi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[An]},t[Qu]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},t[Du]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[lr]},t[c1]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Cr]},t[u1]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[hi]},t[a1]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[d1]={textureFormat:Jr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[fi]},t[n1]={textureFormat:mi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},t[r1]={textureFormat:mi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[lr]},t[i1]={textureFormat:mi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[An,Qn]},t[o1]={textureFormat:mi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[An]},t[s1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},t[l1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[lr]},t[$u]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Cr]},t[qu]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[hi]},t[t1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[br]},t[e1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[fi]},t[h1]={textureFormat:$n,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},t[f1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},t[m1]={textureFormat:$n,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,Ns]},t[p1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[lr]},t[b1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,Qn,j1]},t[y1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,Qn,O1]},t[g1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[An,Qn]},t[Z1]={textureFormat:$n,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[An]},t[v1]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},t[G1]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[lr]},t[X1]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Cr]},t[W1]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[hi]},t[V1]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[br]},t[R1]={textureFormat:Nr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[fi]},t[x1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},t[I1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},t[S1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[lr]},t[T1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Js,yo]},t[Y1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,Hs]},t[w1]={textureFormat:Wn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yo]},t[L1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[An,Qn]},t[F1]={textureFormat:Wn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[An]},t[C1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},t[H1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[lr]},t[J1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yo]},t[N1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Cr]},t[k1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[hi]},t[E1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[fi]},t[U1]={textureFormat:yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[br]},t[B1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Cr,br]},t[K1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[br]},t[M1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[An]},t[z1]={textureFormat:Fs,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_1]},t[A1]={textureFormat:Fs,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[P1]},Object.keys(t).forEach((function(e){const n=t[e];n.bytesPerElementMap={},n.bytesPerElement.forEach((function(t,e){const r=n.type[e];n.bytesPerElementMap[r]=t}))})),go=t}return go[t]}function Q1(t,e){const n=$i(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(void 0===r)throw"unknown internal format";return r}function ri(t){const e=$i(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function ks(t){return 0==(t&t-1)}function D1(t,e,n,r){if(!ni(t))return ks(e)&&ks(n);const i=$i(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function $1(t){const e=$i(t);if(!e)throw"unknown internal format";return e.textureFilterable}function q1(t,e,n){return $r(e)?Ao(e):n||gn}function bi(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(n||r){if(r){if(!n&&(n=i/r)%1)throw"can't guess dimensions"}else if((r=i/n)%1)throw"can't guess dimensions"}else{const t=Math.sqrt(i/(e===dr?6:1));t%1==0?(n=t,r=t):(n=i,r=1)}return{width:n,height:r}}function Mr(t,e){void 0!==e.colorspaceConversion&&t.pixelStorei(Mu,e.colorspaceConversion),void 0!==e.premultiplyAlpha&&t.pixelStorei(Au,e.premultiplyAlpha),void 0!==e.flipY&&t.pixelStorei(zu,e.flipY)}function bl(t){t.pixelStorei(Po,4),ni(t)&&(t.pixelStorei(dl,0),t.pixelStorei(hl,0),t.pixelStorei(fl,0),t.pixelStorei(ml,0),t.pixelStorei(pl,0))}function ta(t,e,n,r){r.minMag&&(n.call(t,e,Xo,r.minMag),n.call(t,e,Wo,r.minMag)),r.min&&n.call(t,e,Xo,r.min),r.mag&&n.call(t,e,Wo,r.mag),r.wrap&&(n.call(t,e,Oi,r.wrap),n.call(t,e,Pi,r.wrap),(e===Rr||su(t,e))&&n.call(t,e,Cs,r.wrap)),r.wrapR&&n.call(t,e,Cs,r.wrapR),r.wrapS&&n.call(t,e,Oi,r.wrapS),r.wrapT&&n.call(t,e,Pi,r.wrapT),void 0!==r.minLod&&n.call(t,e,Nu,r.minLod),void 0!==r.maxLod&&n.call(t,e,ku,r.maxLod),void 0!==r.baseLevel&&n.call(t,e,Eu,r.baseLevel),void 0!==r.maxLevel&&n.call(t,e,Uu,r.maxLevel),void 0!==r.compareFunc&&n.call(t,e,Ku,r.compareFunc),void 0!==r.compareMode&&n.call(t,e,Bu,r.compareMode)}function yl(t,e,n){const r=n.target||fr;t.bindTexture(r,e),ta(t,r,t.texParameteri,n)}function ea(t){return t=t||hr.textureColor,$r(t)?t:new Uint8Array([255*t[0],255*t[1],255*t[2],255*t[3]])}function Vo(t,e,n,r,i,o){n=n||hr.textureOptions,o=o||Wn;const a=n.target||fr;if(r=r||n.width,i=i||n.height,t.bindTexture(a,e),D1(t,r,i,o))t.generateMipmap(a);else{const e=$1(o)?wu:Yu;t.texParameteri(a,Xo,e),t.texParameteri(a,Wo,e),t.texParameteri(a,Oi,ji),t.texParameteri(a,Pi,ji)}}function qr(t){return!0===t.auto||void 0===t.auto&&void 0===t.level}function Ro(t,e){return(e=e||{}).cubeFaceOrder||[Oo,Lu,Fu,Cu,Hu,Ju]}function xo(t,e){const n=Ro(t,e).map((function(t,e){return{face:t,ndx:e}}));return n.sort((function(t,e){return t.face-e.face})),n}function gl(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr,o=r.level||0;let a=n.width,l=n.height;const s=r.internalFormat||r.format||Wn,c=ri(s),u=r.format||c.format,d=r.type||c.type;if(Mr(t,r),t.bindTexture(i,e),i===dr){const c=n.width,h=n.height;let m,b;if(c/6===h)m=h,b=[0,0,1,0,2,0,3,0,4,0,5,0];else if(h/6===c)m=c,b=[0,0,0,1,0,2,0,3,0,4,0,5];else if(c/3==h/2)m=c/3,b=[0,0,1,0,2,0,0,1,1,1,2,1];else{if(c/2!=h/3)throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);m=c/2,b=[0,0,1,0,0,1,1,1,0,2,1,2]}const p=al();p?(p.canvas.width=m,p.canvas.height=m,a=m,l=m,xo(t,r).forEach((function(e){const r=b[2*e.ndx+0]*m,i=b[2*e.ndx+1]*m;p.drawImage(n,r,i,m,m,0,0,m,m),t.texImage2D(e.face,o,s,u,d,p.canvas)})),p.canvas.width=1,p.canvas.height=1):typeof createImageBitmap<"u"&&(a=m,l=m,xo(t,r).forEach((function(c){const h=b[2*c.ndx+0]*m,p=b[2*c.ndx+1]*m;t.texImage2D(c.face,o,s,m,m,0,u,d,null),createImageBitmap(n,h,p,m,m,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then((function(n){Mr(t,r),t.bindTexture(i,e),t.texImage2D(c.face,o,s,u,d,n),qr(r)&&Vo(t,e,r,a,l,s)}))})))}else if(i===Rr||i===xr){const e=Math.min(n.width,n.height),r=Math.max(n.width,n.height),a=r/e;if(a%1!=0)throw"can not compute 3D dimensions of element";const l=n.width===r?1:0,c=n.height===r?1:0;t.pixelStorei(Po,1),t.pixelStorei(dl,n.width),t.pixelStorei(hl,0),t.pixelStorei(pl,0),t.texImage3D(i,o,s,e,e,e,0,u,d,null);for(let r=0;r<a;++r){const a=r*e*l,s=r*e*c;t.pixelStorei(fl,a),t.pixelStorei(ml,s),t.texSubImage3D(i,o,0,0,r,e,e,1,u,d,n)}bl(t)}else t.texImage2D(i,o,s,u,d,n);qr(r)&&Vo(t,e,r,a,l,s),yl(t,e,r)}function ii(){}function na(t){if(typeof document<"u"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function ra(t,e){return void 0!==e||na(t)?e:"anonymous"}function ia(t,e,n){let r;if(n=n||ii,e=void 0!==e?e:hr.crossOrigin,e=ra(t,e),typeof Image<"u"){r=new Image,void 0!==e&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",a),r=null},o=function(){const e="couldn't load image: "+t;nl(e),n(e,r),i()},a=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",a),r.src=t,r}if(typeof ImageBitmap<"u"){let i,o;const a=function(){n(i,o)},l={};e&&(l.mode="cors"),fetch(t,l).then((function(t){if(!t.ok)throw t;return t.blob()})).then((function(t){return createImageBitmap(t,{premultiplyAlpha:"none",colorSpaceConversion:"none"})})).then((function(t){o=t,setTimeout(a)})).catch((function(t){i=t,setTimeout(a)})),r=null}return r}function Zl(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof ImageData<"u"&&t instanceof ImageData||typeof HTMLElement<"u"&&t instanceof HTMLElement}function _o(t,e,n){return Zl(t)?(setTimeout((function(){n(null,t)})),t):ia(t,e,n)}function Qo(t,e,n){const r=(n=n||hr.textureOptions).target||fr;if(t.bindTexture(r,e),!1===n.color)return;const i=ea(n.color);if(r===dr)for(let e=0;e<6;++e)t.texImage2D(Oo+e,0,Wn,1,1,0,Wn,gn,i);else r===Rr||r===xr?t.texImage3D(r,0,Wn,1,1,1,0,Wn,gn,i):t.texImage2D(r,0,Wn,1,1,0,Wn,gn,i)}function oa(t,e,n,r){return r=r||ii,n=n||hr.textureOptions,Qo(t,e,n),_o((n=Object.assign({},n)).src,n.crossOrigin,(function(i,o){i?r(i,e,o):(gl(t,e,o,n),r(null,e,o))}))}function sa(t,e,n,r){r=r||ii;const i=n.src;if(6!==i.length)throw"there must be 6 urls for a cubemap";const o=n.level||0,a=n.internalFormat||n.format||Wn,l=ri(a),s=n.format||l.format,c=n.type||gn,u=n.target||fr;if(u!==dr)throw"target must be TEXTURE_CUBE_MAP";Qo(t,e,n),n=Object.assign({},n);let d=6;const h=[],m=Ro(t,n);let b;b=i.map((function(i,l){return _o(i,n.crossOrigin,function(i){return function(l,m){--d,l?h.push(l):m.width!==m.height?h.push("cubemap face img is not a square: "+m.src):(Mr(t,n),t.bindTexture(u,e),5===d?Ro().forEach((function(e){t.texImage2D(e,o,a,s,c,m)})):t.texImage2D(i,o,a,s,c,m),qr(n)&&t.generateMipmap(u)),0===d&&r(h.length?h:void 0,e,b)}}(m[l]))}))}function la(t,e,n,r){r=r||ii;const i=n.src,o=n.internalFormat||n.format||Wn,a=ri(o),l=n.format||a.format,s=n.type||gn,c=n.target||xr;if(c!==Rr&&c!==xr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Qo(t,e,n),n=Object.assign({},n);let u=i.length;const d=[];let h;const m=n.level||0;let b=n.width,p=n.height;const f=i.length;let g=!0;h=i.map((function(i,a){return _o(i,n.crossOrigin,function(i){return function(a,y){if(--u,a)d.push(a);else{if(Mr(t,n),t.bindTexture(c,e),g){g=!1,b=n.width||y.width,p=n.height||y.height,t.texImage3D(c,m,o,b,p,f,0,l,s,null);for(let e=0;e<f;++e)t.texSubImage3D(c,m,0,0,e,b,p,1,l,s,y)}else{let e,n=y;(y.width!==b||y.height!==p)&&(e=al(),n=e.canvas,e.canvas.width=b,e.canvas.height=p,e.drawImage(y,0,0,b,p)),t.texSubImage3D(c,m,0,0,i,b,p,1,l,s,n),e&&n===e.canvas&&(e.canvas.width=0,e.canvas.height=0)}qr(n)&&t.generateMipmap(c)}0===u&&r(d.length?d:void 0,e,h)}}(a))}))}function ca(t,e,n,r){const i=(r=r||hr.textureOptions).target||fr;t.bindTexture(i,e);let o=r.width,a=r.height,l=r.depth;const s=r.level||0,c=r.internalFormat||r.format||Wn,u=ri(c),d=r.format||u.format,h=r.type||q1(t,n,u.type);if($r(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const t=el(h);n=new t(n)}const m=Q1(c,h),b=n.byteLength/m;if(b%1)throw"length wrong size for format: "+ul(t,d);let p;if(i===Rr||i===xr)if(o||a||l)!o||a&&l?!a||o&&l?(p=bi(t,i,o,a,b/l),o=p.width,a=p.height):(p=bi(t,i,o,l,b/a),o=p.width,l=p.height):(p=bi(t,i,a,l,b/o),a=p.width,l=p.height);else{const t=Math.cbrt(b);if(t%1!=0)throw"can't guess cube size of array of numElements: "+b;o=t,a=t,l=t}else p=bi(t,i,o,a,b),o=p.width,a=p.height;if(bl(t),t.pixelStorei(Po,r.unpackAlignment||1),Mr(t,r),i===dr){const e=b/6*(m/n.BYTES_PER_ELEMENT);xo(t,r).forEach((r=>{const i=e*r.ndx,l=n.subarray(i,i+e);t.texImage2D(r.face,s,c,o,a,0,d,h,l)}))}else i===Rr||i===xr?t.texImage3D(i,s,c,o,a,l,0,d,h,n):t.texImage2D(i,s,c,o,a,0,d,h,n);return{width:o,height:a,depth:l,type:h}}function ua(t,e,n){const r=n.target||fr;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||Wn,a=ri(o),l=n.format||a.format,s=n.type||a.type;if(Mr(t,n),r===dr)for(let e=0;e<6;++e)t.texImage2D(Oo+e,i,o,n.width,n.height,0,l,s,null);else r===Rr||r===xr?t.texImage3D(r,i,o,n.width,n.height,n.depth,0,l,s,null):t.texImage2D(r,i,o,n.width,n.height,0,l,s,null)}function vl(t,e,n){n=n||ii,e=e||hr.textureOptions;const r=t.createTexture(),i=e.target||fr;let o=e.width||1,a=e.height||1;const l=e.internalFormat||Wn;t.bindTexture(i,r),i===dr&&(t.texParameteri(i,Oi,ji),t.texParameteri(i,Pi,ji));let s=e.src;if(s)if("function"==typeof s&&(s=s(t,e)),"string"==typeof s)oa(t,r,e,n);else if($r(s)||Array.isArray(s)&&("number"==typeof s[0]||Array.isArray(s[0])||$r(s[0]))){const n=ca(t,r,s,e);o=n.width,a=n.height}else Array.isArray(s)&&("string"==typeof s[0]||Zl(s[0]))?i===dr?sa(t,r,e,n):la(t,r,e,n):(gl(t,r,s,e),o=s.width,a=s.height);else ua(t,r,e);return qr(e)&&Vo(t,r,e,o,a,l),yl(t,r,e),r}const Do=nl;function Gl(t){return typeof document<"u"&&document.getElementById?document.getElementById(t):null}const _i=33984,qi=34962,aa=34963,da=35713,ha=35714,fa=35632,ma=35633,pa=35981,Xl=35718,ba=35721,ya=35971,ga=35382,Za=35396,va=35398,Ga=35392,Xa=35395,to=5126,Wl=35664,Vl=35665,Rl=35666,$o=5124,xl=35667,Il=35668,Sl=35669,Tl=35670,Yl=35671,wl=35672,Ll=35673,Fl=35674,Cl=35675,Hl=35676,Wa=35678,Va=35680,Ra=35679,xa=35682,Ia=35685,Sa=35686,Ta=35687,Ya=35688,wa=35689,La=35690,Fa=36289,Ca=36292,Ha=36293,qo=5125,Jl=36294,Nl=36295,kl=36296,Ja=36298,Na=36299,ka=36300,Ea=36303,Ua=36306,Ba=36307,Ka=36308,Ma=36311,eo=3553,no=34067,ts=32879,ro=35866,ge={};function El(t,e){return ge[e].bindPoint}function Aa(t,e){return function(n){t.uniform1f(e,n)}}function za(t,e){return function(n){t.uniform1fv(e,n)}}function ja(t,e){return function(n){t.uniform2fv(e,n)}}function Oa(t,e){return function(n){t.uniform3fv(e,n)}}function Pa(t,e){return function(n){t.uniform4fv(e,n)}}function Ul(t,e){return function(n){t.uniform1i(e,n)}}function Bl(t,e){return function(n){t.uniform1iv(e,n)}}function Kl(t,e){return function(n){t.uniform2iv(e,n)}}function Ml(t,e){return function(n){t.uniform3iv(e,n)}}function Al(t,e){return function(n){t.uniform4iv(e,n)}}function _a(t,e){return function(n){t.uniform1ui(e,n)}}function Qa(t,e){return function(n){t.uniform1uiv(e,n)}}function Da(t,e){return function(n){t.uniform2uiv(e,n)}}function $a(t,e){return function(n){t.uniform3uiv(e,n)}}function qa(t,e){return function(n){t.uniform4uiv(e,n)}}function t0(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function e0(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function n0(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function r0(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function i0(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function o0(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function s0(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function l0(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function c0(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function zn(t,e,n,r){const i=El(t,e);return ni(t)?function(e){let o,a;!e||zo(t,e)?(o=e,a=null):(o=e.texture,a=e.sampler),t.uniform1i(r,n),t.activeTexture(_i+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(e){t.uniform1i(r,n),t.activeTexture(_i+n),t.bindTexture(i,e)}}function jn(t,e,n,r,i){const o=El(t,e),a=new Int32Array(i);for(let t=0;t<i;++t)a[t]=n+t;return ni(t)?function(e){t.uniform1iv(r,a),e.forEach((function(e,r){let i,l;t.activeTexture(_i+a[r]),!e||zo(t,e)?(i=e,l=null):(i=e.texture,l=e.sampler),t.bindSampler(n,l),t.bindTexture(o,i)}))}:function(e){t.uniform1iv(r,a),e.forEach((function(e,n){t.activeTexture(_i+a[n]),t.bindTexture(o,e)}))}}function io(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(qi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||to,n.normalize||!1,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function mr(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an integer constant value must be 4!");t.vertexAttrib4iv(e,n.value)}else t.bindBuffer(qi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||$o,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function oo(t,e){return function(n){if(n.value){if(t.disableVertexAttribArray(e),4!==n.value.length)throw new Error("The length of an unsigned integer constant value must be 4!");t.vertexAttrib4uiv(e,n.value)}else t.bindBuffer(qi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||qo,n.stride||0,n.offset||0),t.vertexAttribDivisor&&t.vertexAttribDivisor(e,n.divisor||0)}}function es(t,e,n){const r=n.size,i=n.count;return function(n){t.bindBuffer(qi,n.buffer);const o=n.size||n.numComponents||r,a=o/i,l=n.type||to,s=ge[l].size*o,c=n.normalize||!1,u=n.offset||0,d=s/i;for(let r=0;r<i;++r)t.enableVertexAttribArray(e+r),t.vertexAttribPointer(e+r,a,l,c,s,u+d*r),t.vertexAttribDivisor&&t.vertexAttribDivisor(e+r,n.divisor||0)}}ge[to]={Type:Float32Array,size:4,setter:Aa,arraySetter:za},ge[Wl]={Type:Float32Array,size:8,setter:ja,cols:2},ge[Vl]={Type:Float32Array,size:12,setter:Oa,cols:3},ge[Rl]={Type:Float32Array,size:16,setter:Pa,cols:4},ge[$o]={Type:Int32Array,size:4,setter:Ul,arraySetter:Bl},ge[xl]={Type:Int32Array,size:8,setter:Kl,cols:2},ge[Il]={Type:Int32Array,size:12,setter:Ml,cols:3},ge[Sl]={Type:Int32Array,size:16,setter:Al,cols:4},ge[qo]={Type:Uint32Array,size:4,setter:_a,arraySetter:Qa},ge[Jl]={Type:Uint32Array,size:8,setter:Da,cols:2},ge[Nl]={Type:Uint32Array,size:12,setter:$a,cols:3},ge[kl]={Type:Uint32Array,size:16,setter:qa,cols:4},ge[Tl]={Type:Uint32Array,size:4,setter:Ul,arraySetter:Bl},ge[Yl]={Type:Uint32Array,size:8,setter:Kl,cols:2},ge[wl]={Type:Uint32Array,size:12,setter:Ml,cols:3},ge[Ll]={Type:Uint32Array,size:16,setter:Al,cols:4},ge[Fl]={Type:Float32Array,size:32,setter:t0,rows:2,cols:2},ge[Cl]={Type:Float32Array,size:48,setter:e0,rows:3,cols:3},ge[Hl]={Type:Float32Array,size:64,setter:n0,rows:4,cols:4},ge[Ia]={Type:Float32Array,size:32,setter:r0,rows:2,cols:3},ge[Sa]={Type:Float32Array,size:32,setter:o0,rows:2,cols:4},ge[Ta]={Type:Float32Array,size:48,setter:i0,rows:3,cols:2},ge[Ya]={Type:Float32Array,size:48,setter:l0,rows:3,cols:4},ge[wa]={Type:Float32Array,size:64,setter:s0,rows:4,cols:2},ge[La]={Type:Float32Array,size:64,setter:c0,rows:4,cols:3},ge[Wa]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:eo},ge[Va]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:no},ge[Ra]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:ts},ge[xa]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:eo},ge[Fa]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:ro},ge[Ca]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:ro},ge[Ha]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:no},ge[Ja]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:eo},ge[Na]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:ts},ge[ka]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:no},ge[Ea]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:ro},ge[Ua]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:eo},ge[Ba]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:ts},ge[Ka]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:no},ge[Ma]={Type:null,size:0,setter:zn,arraySetter:jn,bindPoint:ro};const Fn={};Fn[to]={size:4,setter:io},Fn[Wl]={size:8,setter:io},Fn[Vl]={size:12,setter:io},Fn[Rl]={size:16,setter:io},Fn[$o]={size:4,setter:mr},Fn[xl]={size:8,setter:mr},Fn[Il]={size:12,setter:mr},Fn[Sl]={size:16,setter:mr},Fn[qo]={size:4,setter:oo},Fn[Jl]={size:8,setter:oo},Fn[Nl]={size:12,setter:oo},Fn[kl]={size:16,setter:oo},Fn[Tl]={size:4,setter:mr},Fn[Yl]={size:8,setter:mr},Fn[wl]={size:12,setter:mr},Fn[Ll]={size:16,setter:mr},Fn[Fl]={size:4,setter:es,count:2},Fn[Cl]={size:9,setter:es,count:3},Fn[Hl]={size:16,setter:es,count:4};const u0=/ERROR:\s*\d+:(\d+)/gi;function a0(t,e="",n=0){const r=[...e.matchAll(u0)],i=new Map(r.map(((t,n)=>{const i=parseInt(t[1]),o=r[n+1],a=o?o.index:e.length;return[i-1,e.substring(t.index,a)]})));return t.split("\n").map(((t,e)=>{const r=i.get(e);return`${e+1+n}: ${t}${r?`\n\n^^^ ${r}`:""}`})).join("\n")}const Es=/^[ \t]*\n/;function zl(t){let e=0;return Es.test(t)&&(e=1,t=t.replace(Es,"")),{lineOffset:e,shaderSource:t}}function d0(t,e){return t.errorCallback(e),t.callback&&setTimeout((()=>{t.callback(`${e}\n${t.errors.join("\n")}`)})),null}function h0(t,e,n,r){if(r=r||Do,!t.getShaderParameter(n,da)){const i=t.getShaderInfoLog(n),{lineOffset:o,shaderSource:a}=zl(t.getShaderSource(n)),l=`${a0(a,i,o)}\nError compiling ${ul(t,e)}: ${i}`;return r(l),l}return""}function ns(t,e,n){let r,i,o;if("function"==typeof e&&(n=e,e=void 0),"function"==typeof t)n=t,t=void 0;else if(t&&!Array.isArray(t)){const e=t;n=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,i=e.transformFeedbackMode,o=e.callback}const a=n||Do,l=[],s={errorCallback(t,...e){l.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:i,callback:o,errors:l};{let n={};Array.isArray(t)?t.forEach((function(t,r){n[t]=e?e[r]:r})):n=t||{},s.attribLocations=n}return s}const f0=["VERTEX_SHADER","FRAGMENT_SHADER"];function m0(t,e){return e.indexOf("frag")>=0?fa:e.indexOf("vert")>=0?ma:void 0}function p0(t,e,n){const r=t.getAttachedShaders(e);for(const e of r)n.has(e)&&t.deleteShader(e);t.deleteProgram(e)}const b0=(t=0)=>new Promise((e=>setTimeout(e,t)));function y0(t,e,n){const r=t.createProgram(),{attribLocations:i,transformFeedbackVaryings:o,transformFeedbackMode:a}=ns(n);for(let n=0;n<e.length;++n){let i=e[n];if("string"==typeof i){const e=Gl(i),o=e?e.text:i;let a=t[f0[n]];e&&e.type&&(a=m0(t,e.type)||a),i=t.createShader(a),t.shaderSource(i,zl(o).shaderSource),t.compileShader(i),t.attachShader(r,i)}}Object.entries(i).forEach((([e,n])=>t.bindAttribLocation(r,n,e)));{let e=o;e&&(e.attribs&&(e=e.attribs),Array.isArray(e)||(e=Object.keys(e)),t.transformFeedbackVaryings(r,e,a||pa))}return t.linkProgram(r),r}function g0(t,e,n,r,i){const o=ns(n,r,i),a=new Set(e),l=y0(t,e,o);function s(t,e){const n=v0(t,e,o.errorCallback);return n&&p0(t,e,a),n}if(!o.callback)return s(t,l)?void 0:l;Z0(t,l).then((()=>{const e=s(t,l);o.callback(e,e?void 0:l)}))}async function Z0(t,e){const n=t.getExtension("KHR_parallel_shader_compile"),r=n?(t,e)=>t.getProgramParameter(e,n.COMPLETION_STATUS_KHR):()=>!0;let i=0;do{await b0(i),i=1e3/60}while(!r(t,e))}function v0(t,e,n){if(n=n||Do,!t.getProgramParameter(e,ha)){const r=t.getProgramInfoLog(e);n(`Error in program linking: ${r}`);return`${r}\n${t.getAttachedShaders(e).map((e=>h0(t,t.getShaderParameter(e,t.SHADER_TYPE),e,n))).filter((t=>t)).join("\n")}`}}function G0(t,e,n,r,i){return g0(t,e,n,r,i)}function jl(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const X0=/(\.|\[|]|\w+)/g,W0=t=>t>="0"&&t<="9";function V0(t,e,n,r){const i=t.split(X0).filter((t=>""!==t));let o=0,a="";for(;;){const t=i[o++];a+=t;const l=W0(t[0]),s=l?parseInt(t):t;if(l&&(a+=i[o++]),o===i.length){n[s]=e;break}{const t=i[o++],e="["===t,l=n[s]||(e?[]:{});n[s]=l,n=l,r[a]=r[a]||function(t){return function(e){Ol(t,e)}}(l),a+=t}}}function R0(t,e){let n=0;function r(e,r,i){const o=r.name.endsWith("[0]"),a=r.type,l=ge[a];if(!l)throw new Error(`unknown type: 0x${a.toString(16)}`);let s;if(l.bindPoint){const e=n;n+=r.size,s=o?l.arraySetter(t,a,e,i,r.size):l.setter(t,a,e,i,r.size)}else s=l.arraySetter&&o?l.arraySetter(t,i):l.setter(t,i);return s.location=i,s}const i={},o={},a=t.getProgramParameter(e,Xl);for(let n=0;n<a;++n){const a=t.getActiveUniform(e,n);if(jl(a))continue;let l=a.name;l.endsWith("[0]")&&(l=l.substr(0,l.length-3));const s=t.getUniformLocation(e,a.name);if(s){const t=r(0,a,s);i[l]=t,V0(l,t,o,i)}}return i}function x0(t,e){const n={},r=t.getProgramParameter(e,ya);for(let i=0;i<r;++i){const r=t.getTransformFeedbackVarying(e,i);n[r.name]={index:i,type:r.type,size:r.size}}return n}function I0(t,e){const n=t.getProgramParameter(e,Xl),r=[],i=[];for(let o=0;o<n;++o){i.push(o),r.push({});const n=t.getActiveUniform(e,o);r[o].name=n.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach((function(n){const o=n[0],a=n[1];t.getActiveUniforms(e,i,t[o]).forEach((function(t,e){r[e][a]=t}))}));const o={},a=t.getProgramParameter(e,ga);for(let n=0;n<a;++n){const r=t.getActiveUniformBlockName(e,n),i={index:t.getUniformBlockIndex(e,r),usedByVertexShader:t.getActiveUniformBlockParameter(e,n,Za),usedByFragmentShader:t.getActiveUniformBlockParameter(e,n,va),size:t.getActiveUniformBlockParameter(e,n,Ga),uniformIndices:t.getActiveUniformBlockParameter(e,n,Xa)};i.used=i.usedByVertexShader||i.usedByFragmentShader,o[r]=i}return{blockSpecs:o,uniformData:r}}function Ol(t,e){for(const n in e){const r=t[n];"function"==typeof r?r(e[n]):Ol(t[n],e[n])}}function Pl(t,...e){const n=t.uniformSetters||t,r=e.length;for(let t=0;t<r;++t){const r=e[t];if(Array.isArray(r)){const t=r.length;for(let e=0;e<t;++e)Pl(n,r[e])}else for(const t in r){const e=n[t];e&&e(r[t])}}}function S0(t,e){const n={},r=t.getProgramParameter(e,ba);for(let i=0;i<r;++i){const r=t.getActiveAttrib(e,i);if(jl(r))continue;const o=t.getAttribLocation(e,r.name),a=Fn[r.type],l=a.setter(t,o,a);l.location=o,n[r.name]=l}return n}function T0(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function Y0(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(T0(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(aa,n.indices))}function Us(t,e){const n={program:e,uniformSetters:R0(t,e),attribSetters:S0(t,e)};return ni(t)&&(n.uniformBlockSpec=I0(t,e),n.transformFeedbackInfo=x0(t,e)),n}const w0=/\s|{|}|;/;function L0(t,e,n,r,i){const o=ns(n,r,i),a=[];if(e=e.map((function(t){if(!w0.test(t)){const e=Gl(t);if(e)t=e.text;else{const e=`no element with id: ${t}`;o.errorCallback(e),a.push(e)}}return t})),a.length)return d0(o,"");const l=o.callback;l&&(o.callback=(e,n)=>{l(e,e?void 0:Us(t,n))});const s=G0(t,e,o);return s?Us(t,s):null}const F0=4,Bs=5123;function C0(t,e,n,r,i,o){n=void 0===n?4:n;const a=e.indices,l=e.elementType,s=void 0===r?e.numElements:r;i=void 0===i?0:i,l||a?void 0!==o?t.drawElementsInstanced(n,s,void 0===l?Bs:e.elementType,i,o):t.drawElements(n,s,void 0===l?Bs:e.elementType,i):void 0!==o?t.drawArraysInstanced(n,i,s,o):t.drawArrays(n,i,s)}const _l=36160,yi=36161,H0=3553,J0=5121,N0=6402,k0=6408,E0=33190,U0=36012,B0=35056,K0=36013,M0=32854,A0=32855,z0=36194,Ql=33189,Dl=6401,$l=36168,rs=34041,Io=36064,so=36096,ql=36128,is=33306,So=33071,To=9729,j0=[{format:k0,type:J0,min:To,wrap:So},{format:rs}],Dn={};function O0(t,e){return Dn[t]||Dn[e]}Dn[rs]=is,Dn[Dl]=ql,Dn[$l]=ql,Dn[N0]=so,Dn[Ql]=so,Dn[E0]=so,Dn[U0]=so,Dn[B0]=is,Dn[K0]=is;const pr={};function P0(t){return pr[t]}pr[M0]=!0,pr[A0]=!0,pr[z0]=!0,pr[rs]=!0,pr[Ql]=!0,pr[Dl]=!0,pr[$l]=!0;const _0=32;function Q0(t){return t>=Io&&t<Io+_0}function Qi(t,e,n,r){const i=_l,o=t.createFramebuffer();t.bindFramebuffer(i,o),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight;const a=[],l={framebuffer:o,attachments:[],width:n,height:r};return(e=e||j0).forEach((function(e,o){let s=e.attachment;const c=e.samples,u=e.format;let d=e.attachmentPoint||O0(u,e.internalFormat);if(d||(d=Io+o),Q0(d)&&a.push(d),!s)if(void 0!==c||P0(u))s=t.createRenderbuffer(),t.bindRenderbuffer(yi,s),c>1?t.renderbufferStorageMultisample(yi,c,u,n,r):t.renderbufferStorage(yi,u,n,r);else{const i=Object.assign({},e);i.width=n,i.height=r,void 0===i.auto&&(i.auto=!1,i.min=i.min||i.minMag||To,i.mag=i.mag||i.minMag||To,i.wrapS=i.wrapS||i.wrap||So,i.wrapT=i.wrapT||i.wrap||So),s=vl(t,i)}if(ou(t,s))t.framebufferRenderbuffer(i,d,yi,s);else{if(!zo(t,s))throw new Error("unknown attachment type");void 0!==e.layer?t.framebufferTextureLayer(i,d,s,e.level||0,e.layer):t.framebufferTexture2D(i,d,e.target||H0,s,e.level||0)}l.attachments.push(s)})),t.drawBuffers&&t.drawBuffers(a),l}function D0(t,e,n){n=n||_l,e?(t.bindFramebuffer(n,e.framebuffer),t.viewport(0,0,e.width,e.height)):(t.bindFramebuffer(n,null),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight))}function pn(t,e){return()=>e instanceof WebGLTexture?e:vl(t,{src:e,wrap:t.CLAMP_TO_EDGE})}const Ur=2;class Ir{constructor(t){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:e,width:n,height:r}=t;this.context=e,this.options=t;const i=this.buildDefines();this.programInfo=L0(this.context,[i+this.getVertexShader(),i+this.getFragmentShader()]),this.bufferInfo=Tu(this.context,this.getBuffers()),this.fbi=Qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.output=this.fbi.attachments[0]}resizeOutput(t,e){this.fbi=Qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e),this.options.width=t,this.options.height=e,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 t="";const e=this.getDefines();for(let n in e)t+=`#define ${n} ${e[n].toFixed(1)}\n`;return t}run(t){var e,n,r,i,o,a;null==(e=this.profiler)||e.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),null==(n=this.profiler)||n.pushContext(`[${this.id}] UNIFORMS`);for(const e in t)"function"==typeof t[e]&&(null==(r=this.profiler)||r.pushContext(`[${this.id}] UNI : ${e}`),t[e]=t[e](),null==(i=this.profiler)||i.popContext(`[${this.id}] UNI : ${e}`));null==(o=this.profiler)||o.popContext(`[${this.id}] UNIFORMS`);const l=Date.now();let s=0;this.lastRun&&(s=(l-this.lastRun)/1e3),this.lastRun=l,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),Y0(this.context,this.programInfo,this.bufferInfo),Pl(this.programInfo,{delta:s,canvas:[this.context.canvas.width,this.context.canvas.height],...t}),D0(this.context,this.options.disableFramebuffer?null:this.fbi),C0(this.context,this.bufferInfo),null==(a=this.profiler)||a.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(t){this.profiler=t}}const $0="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D background;\nuniform sampler2D foreground;\nuniform sampler2D threshold;\n\nvoid main() {\n vec4 backgroundColor = texture2D(background, _texture_coord);\n vec4 foregroundColor = texture2D(foreground, _texture_coord);\n vec4 tresholdColor = texture2D(threshold, _texture_coord);\n gl_FragColor = foregroundColor * tresholdColor.a +\n backgroundColor * (1. - tresholdColor.a);\n}\n",q0="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n _texture_coord.y = 1. - texture_coord.y;\n}\n";class os extends Ir{getFragmentShader(){return $0}getVertexShader(){return q0}}class ss{constructor(){gt(this,"steps",[]),gt(this,"profiler")}addStep(t){this.steps.push(t)}async run(){for(const t of this.steps)t.program.run(t.getUniforms())}resizeOutput(t,e){var n,r;null==(n=this.profiler)||n.pushContext(`PIP [${this.constructor.name}]`);for(const n of this.steps)n.preventResize||n.program.resizeOutput(t,e);null==(r=this.profiler)||r.popContext(`PIP [${this.constructor.name}]`)}setProfiler(t){this.profiler=t;for(const e of this.steps)e.program.setProfiler(t)}setId(t){for(const e of this.steps)e.program.id=t}}class ls extends ss{constructor(){super(...arguments),gt(this,"preciseMaskEnabled",!1)}}class t2 extends ls{constructor(t){super(),gt(this,"inputImage"),gt(this,"inputBackgroundImage"),gt(this,"inputMask"),gt(this,"preciseMaskEnabled",!0),this.context=t;const e={context:t,height:t.canvas.height,width:t.canvas.width},n=new os({...e,disableFramebuffer:!0});this.addStep({program:n,getUniforms:()=>({background:pn(t,this.inputBackgroundImage),foreground:pn(t,this.inputImage),threshold:pn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}const t3="precision mediump float;\n\nvarying vec2 _texture_coord;\nuniform sampler2D texture;\n\nvoid main() { gl_FragColor = texture2D(texture, _texture_coord); }\n",e3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\nuniform bool invert_y;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n if (invert_y) {\n _texture_coord.y = 1. - texture_coord.y;\n }\n}\n";class n3 extends Ir{getFragmentShader(){return t3}getVertexShader(){return e3}}class r3 extends ss{constructor(t,e,n){super(),gt(this,"inputImage"),this.context=t;const r={context:t,height:n,width:e};this.addStep({program:new n3({...r,disableFramebuffer:!0}),getUniforms:()=>({texture:pn(t,this.inputImage),invert_y:!0})})}setData(t){this.inputImage=t}}async function e2(t){return new Promise((e=>{setTimeout((()=>{e()}),t)}))}const i3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",o3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";var cs=(t=>(t[t.LINEAR=0]="LINEAR",t[t.GAUSSIAN=1]="GAUSSIAN",t))(cs||{});class n2 extends Ir{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return i3+this.createLoopFunction()}getVertexShader(){return o3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = 1.;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}getFactor(t,e){return this.options.type,this.getLinearFactor(t,e)}getLinearFactor(t,e){return 1}getGaussianFactor(t,e){var n;const r=1/(2*Math.PI*Math.max(null!=(n=this.options.radius)?n:1,1)**2),i=r*-(t**2+e**2);return r*Math.E**i}}class us extends Ir{constructor(t){super(t),gt(this,"fbi2"),this.fbi2=Qi(t.context,[{format:t.context.RGBA,type:t.context.UNSIGNED_BYTE,min:t.context.LINEAR,mag:t.context.LINEAR,wrap:t.context.CLAMP_TO_EDGE}],t.width,t.height)}run(t){const e=this.fbi;this.fbi=this.fbi2,this.fbi2=e,this.output=this.fbi.attachments[0],super.run({...t,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(t,e){super.resizeOutput(t,e),this.fbi2=Qi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],t,e)}}const s3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\n// uniform float treshold;\nuniform sampler2D image_now;\nuniform sampler2D image_before;\nuniform sampler2D mask_now;\nuniform sampler2D mask_before;\nuniform sampler2D previous_rendering;\nuniform vec2 canvas;\n\nuniform float delta;\n\nfloat current_factor = 0.69;\nfloat previous_factor = 0.74;\nfloat threshold_activation = 0.54;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nfloat getThreshold() {\n vec4 color = vec4(0.);\n for (float y = -6.; y < 7.; y += 1.) {\n for (float x = -6.; x < 7.; x += 1.) {\n vec4 image_now_color =\n texture2D(image_now, _texture_coord + vec2(x, y) / canvas);\n vec4 image_before_color =\n texture2D(image_before, _texture_coord + vec2(x, y) / canvas);\n color += abs(image_before_color - image_now_color);\n }\n }\n return (color.x + color.y + color.z) / (3. * 9.);\n}\n\nvoid main() {\n float treshold_input = .4;\n float treshold_previous_rendering = .98;\n\n vec4 mask_now_color = texture2D(mask_now, _texture_coord);\n vec4 mask_before_color = texture2D(mask_before, _texture_coord);\n vec4 previous_rendering_color = texture2D(previous_rendering, _texture_coord);\n\n vec3 mask_diff = abs(mask_before_color.xyz - mask_now_color.xyz);\n float flickering = mask_diff.x;\n float threshold = getThreshold();\n if (threshold < threshold_activation) {\n gl_FragColor = vec4(flickering, 0., 0., 1.) * current_factor +\n previous_rendering_color * previous_factor;\n gl_FragColor *= (1. - threshold);\n }\n}\n",l3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class c3 extends us{getFragmentShader(){return s3}getVertexShader(){return l3}}const u3="#version 300 es\n// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts\n\nprecision highp float;\nuniform sampler2D input_frame;\nuniform sampler2D segmentation_mask;\nuniform sampler2D threshold;\nuniform vec2 texel_size;\nuniform float step;\nuniform float radius;\nuniform float offset;\nuniform float sigma_texel;\nuniform float sigma_color;\n\nin vec2 _texture_coord;\nout vec4 outColor;\n\nfloat gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n}\n\nvoid main() {\n vec2 centerCoord = _texture_coord;\n vec3 centerColor = texture(input_frame, centerCoord).rgb;\n float newVal = 0.0;\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n // Subsample kernel space.\n for (float i = -radius + offset; i <= radius; i += step) {\n for (float j = -radius + offset; j <= radius; j += step) {\n vec2 shift = vec2(j, i) * texel_size;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(input_frame, coord).rgb;\n float threshold = texture(threshold, coord).a;\n float outVal = texture(segmentation_mask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), sigma_texel);\n colorWeight = gaussian(distance(centerColor, frameColor), sigma_color);\n totalWeight += spaceWeight * colorWeight;\n newVal += spaceWeight * colorWeight * outVal * threshold;\n }\n }\n newVal /= totalWeight;\n outColor = vec4(vec3(0.), newVal);\n}",a3="#version 300 es\nin vec2 position;\nin vec2 texture_coord;\nout vec2 _texture_coord;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n _texture_coord = texture_coord;\n}";class d3 extends Ir{getFragmentShader(){return u3}getVertexShader(){return a3}}const h3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n int count = 0;\n for (float y = -1.; y < 2.; y += 1.) {\n for (float x = -1.; x < 2.; x += 1.) {\n vec2 coord = _texture_coord + vec2(y, x) / canvas;\n vec4 color = texture2D(texture, coord);\n if (color.r > .1) {\n count++;\n }\n }\n }\n if (count > 5) {\n gl_FragColor = texture2D(texture, _texture_coord);\n }\n}\n",f3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class m3 extends Ir{getFragmentShader(){return h3}getVertexShader(){return f3}}const p3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\n\nvoid main() {\n vec4 color = texture2D(texture, _texture_coord);\n for (float y = -2.; y < 3.; y += 1.) {\n for (float x = -2.; x < 3.; x += 1.) {\n vec2 coord = _texture_coord;\n coord += vec2(y, x) / canvas;\n color += texture2D(texture, coord) * (1. / 4.);\n }\n }\n\n gl_FragColor = color;\n}\n",b3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class y3 extends us{getFragmentShader(){return p3}getVertexShader(){return b3}}const g3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform sampler2D threshold;\nuniform sampler2D inputs;\n\nvoid main() {\n vec4 inputs_color = texture2D(inputs, _texture_coord);\n vec4 threshold_color = texture2D(threshold, _texture_coord);\n if (threshold_color.r < .1 && inputs_color.r > .5) {\n gl_FragColor = inputs_color;\n }\n}\n",Z3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class v3 extends us{getFragmentShader(){return g3}getVertexShader(){return Z3}}class G3 extends ss{constructor(t,e,n){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=t;const r={context:t,height:n,width:e},i=new c3(r),o=new n2({...r,radius:1,type:cs.GAUSSIAN}),a=new v3(r),l=new y3(r),s=new m3(r);this.jointBilateral=new d3(r),this.addStep({program:i,getUniforms:()=>({image_now:pn(t,this.inputImage),image_before:pn(t,this.previousInputImage),mask_now:pn(t,this.inputMask),mask_before:pn(t,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:a,getUniforms:()=>({inputs:pn(t,this.inputMask),threshold:pn(t,i.output)})}),this.addStep({program:s,getUniforms:()=>({texture:pn(t,a.output)})}),this.addStep({program:l,getUniforms:()=>({texture:pn(t,s.output)})}),this.addStep({program:o,getUniforms:()=>({texture:pn(t,l.output)})}),this.addStep({program:this.jointBilateral,getUniforms:()=>{var e,n,r,i,a,l,s,c;const u=null!=(n=null==(e=this.inputImage)?void 0:e.width)?n:1,d=null!=(i=null==(r=this.inputImage)?void 0:r.height)?i:1,h=null!=(l=null==(a=this.inputMask)?void 0:a.width)?l:1,m=null!=(c=null==(s=this.inputMask)?void 0:s.height)?c:1,b=Math.max(u/h,d/m),p=Math.max(1,.66*Math.sqrt(b)),f=1/u,g=1/d;return{input_frame:pn(t,this.inputImage),segmentation_mask:pn(t,this.inputMask),threshold:pn(t,o.output),texel_size:[f,g],step:p,radius:b,offset:p>1?.5*p:0,sigma_texel:Math.max(f,g)*b,sigma_color:.1}}}),this.output=this.jointBilateral.output}setData(t,e){this.previousInputImage=this.inputImage?this.inputImage:t,this.previousInputMask=this.inputMask?this.inputMask:e,this.inputImage=t,this.inputMask=e}setOptions(t){this.options=t}resizeOutput(t,e){super.resizeOutput(t,e),this.output=this.jointBilateral.output}}var r2=(t=>(t.PUSH="PUSH",t.POP="POP",t))(r2||{});class X3{constructor(t){gt(this,"context"),gt(this,"extension"),gt(this,"queries",[]),gt(this,"activeQuery"),this.context=t,this.extension=t.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(t){this.createQuery("PUSH",t)}popContext(t){this.createQuery("POP",t)}createQuery(t,e){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:e,action:t,query:this.activeQuery})}async getResolvedQueries(){const t=(await Promise.all([...this.queries].map((t=>this.resolveQuery(t))))).filter((t=>t));for(let e=1;e<t.length;++e)t[e].timestamp+=t[e-1].duration+t[e-1].timestamp;return t}async resolveQuery(t){if(await this.awaitQueryAvailable(t)){if(!this.context.getParameter(this.extension.GPU_DISJOINT_EXT))return{...t,duration:this.context.getQueryParameter(t.query,this.context.QUERY_RESULT),timestamp:0};console.log("Disjointed query",t)}else console.log("Unawaitable query",t)}async awaitQueryAvailable(t){for(let e=0;e<10;++e){if(this.context.getQueryParameter(t.query,this.context.QUERY_RESULT_AVAILABLE))return t;await e2(200)}}}class lo{constructor(){gt(this,"canvas"),gt(this,"context"),gt(this,"pipeline"),gt(this,"previousImageWidth",0),gt(this,"previousImageHeight",0),gt(this,"previousMaskWidth",2),gt(this,"previousMaskHeight",2),gt(this,"profiler"),gt(this,"postProcessingEnabled",!0),gt(this,"improveMask");const t=new OffscreenCanvas(0,0),e=t.getContext("webgl2");if(!e)throw"Fail to retrieve webgl2 context";this.canvas=t,this.context=e,this.improveMask=new G3(this.context,2,2)}setFlickeringOptions(t){this.improveMask.setOptions(t)}enablePostProcessing(){this.postProcessingEnabled=!0}disablePostProcessing(){this.postProcessingEnabled=!1}async profileWebgl(t){const e=new X3(this.context);return this.profiler=e,e.start(),await e2(t),this.profiler=void 0,e.stop(),e.getResolvedQueries()}async render(t,e){var n,r;if(!this.pipeline)throw"missing pipeline";(this.previousImageHeight!==t.height||this.previousImageWidth!==t.width)&&this.resizeOutput(t.width,t.height),(this.previousMaskHeight!==e.height||this.previousMaskWidth!==e.width)&&(this.improveMask.resizeOutput(e.width,e.height),this.previousMaskWidth=e.width,this.previousMaskHeight=e.height);const i="renderer";null==(n=this.profiler)||n.pushContext(i),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler);let o=e;return this.postProcessingEnabled&&(this.improveMask.setData(t,e),this.improveMask.run(),o=this.improveMask.output),this.pipeline.setData(t,o),await this.pipeline.run(),null==(r=this.profiler)||r.popContext(i),this.canvas}resizeOutput(t,e){var n;this.canvas.width=t,this.canvas.height=e,null==(n=this.pipeline)||n.resizeOutput(t,e),this.previousImageWidth=t,this.previousImageHeight=e}}class i2 extends lo{constructor(){super(),gt(this,"pipeline"),gt(this,"backgroundImage"),gt(this,"backgroundImageResizerCanvas"),gt(this,"backgroundImageResizerContext"),gt(this,"backgroundImageResizer"),this.pipeline=new t2(this.context);const t=new OffscreenCanvas(0,0),e=t.getContext("webgl2");if(!e)throw"Fail to retrieve webgl context";this.backgroundImageResizerCanvas=t,this.backgroundImageResizerContext=e,this.backgroundImageResizer=new r3(this.backgroundImageResizerContext,0,0)}setBackgroundImage(t){this.backgroundImage=t,this.updateBackgroundImage()}updateBackgroundImage(){const{width:t,height:e}=this.canvas;this.backgroundImageResizer.resizeOutput(t,e),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas}resizeOutput(t,e){super.resizeOutput(t,e),this.backgroundImageResizerCanvas.width=t,this.backgroundImageResizerCanvas.height=e,this.backgroundImageResizer.resizeOutput(t,e),this.updateBackgroundImage()}}class W3 extends i2{constructor(){super(...arguments),gt(this,"frameReader")}setBackgroundVideo(t){this.frameReader=t}async render(t,e){return await this.readNextVideoFrame(),super.render(t,e)}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());if(null!=e&&e.value){const t=await createImageBitmap(e.value);this.setBackgroundImage(t),e.value.close()}}}class Ks{blurBackground(t){return new jc(t)}blurSilhouette(t){return new Oc(t)}imageBackground(){return new Pc}videoBackground(){return new W3}}const V3="precision mediump float;\n\nvarying vec2 _texture_coord;\n\nuniform vec2 canvas;\nuniform sampler2D texture;\nuniform sampler2D mask;\n\nvec4 loop();\n\nvoid main() { gl_FragColor = loop(); }\n",R3="varying vec2 _texture_coord;\n\nattribute vec2 position;\nattribute vec2 texture_coord;\n\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n _texture_coord = texture_coord;\n}\n";class x3 extends Ir{getDefines(){var t;return{RADIUS:null!=(t=this.options.radius)?t:1}}getFragmentShader(){return V3+this.createLoopFunction()}getVertexShader(){return R3}createLoopFunction(){var t;let e=null!=(t=this.options.radius)?t:1;return`\n\n vec4 loop() { \n vec4 result = vec4(0,0,0,0);\n float factorSum = 0.;\n\n vec2 normalizedRadius = vec2(-${e}.) / canvas;\n vec2 normalizedIncrement = vec2(1.) / canvas;\n vec2 diff = normalizedRadius;\n float maxLength = length(normalizedRadius);\n\n for(int y=-${e}; y<${e+1}; ++y) {\n for(int x=-${e}; x<${e+1}; ++x) {\n float factor = (1.- texture2D(mask, _texture_coord + diff).a) * (maxLength - length(diff)) / maxLength;\n result += factor * texture2D(texture, _texture_coord + diff);\n factorSum += factor;\n diff.x += normalizedIncrement.x;\n }\n diff.y += normalizedIncrement.y;\n diff.x = normalizedRadius.x;\n }\n return result / factorSum;\n }`}}const I3=10,S3=2,T3=8;class Y3 extends ls{constructor(t,e){super(),gt(this,"inputImage"),gt(this,"inputMask"),gt(this,"blur"),this.context=t,this.radius=e;const n={context:t,height:t.canvas.height,width:t.canvas.width};this.blur=new x3({...n,radius:e,...this.getBlurTextureSize(t.canvas.width,t.canvas.height)});const r=new os({...n,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:pn(t,this.inputImage),mask:pn(t,this.inputMask)})}),this.addStep({program:r,getUniforms:()=>({background:pn(t,this.blur.output),foreground:pn(t,this.inputImage),threshold:pn(t,this.inputMask)})})}getBlurTextureSize(t,e){const n=this.radius>10?8:2;return{width:Math.max(2,t/n),height:Math.max(2,e/n)}}setData(t,e){this.inputImage=t,this.inputMask=e}resizeOutput(t,e){super.resizeOutput(t,e);const n=this.getBlurTextureSize(t,e);this.blur.resizeOutput(n.width,n.height)}}class w3 extends lo{constructor(t){super(),gt(this,"pipeline"),this.pipeline=new Y3(this.context,t),this.disablePostProcessing()}}class L3 extends ls{constructor(t,e){super(),gt(this,"inputImage"),gt(this,"inputMask"),this.context=t;const n={context:t,height:t.canvas.height,width:t.canvas.width},r=new n2({...n,radius:e,type:cs.GAUSSIAN}),i=new os({...n,disableFramebuffer:!0});this.addStep({program:r,getUniforms:()=>({texture:pn(t,this.inputImage)})}),this.addStep({program:i,getUniforms:()=>({background:pn(t,this.inputImage),foreground:pn(t,r.output),threshold:pn(t,this.inputMask)})})}setData(t,e){this.inputImage=t,this.inputMask=e}}class F3 extends lo{constructor(t){super(),gt(this,"pipeline"),this.pipeline=new L3(this.context,t),this.disablePostProcessing()}}class C3 extends t2{constructor(){super(...arguments),gt(this,"frameReader"),gt(this,"preciseMaskEnabled",!0)}set reader(t){this.frameReader=t}async run(){this.frameReader&&(await this.readNextVideoFrame(),await super.run())}async readNextVideoFrame(){var t;const e=await(null==(t=this.frameReader)?void 0:t.read());null!=e&&e.value&&(this.inputBackgroundImage=await createImageBitmap(e.value),e.value.close())}}class H3 extends lo{constructor(){super(),gt(this,"pipeline"),this.pipeline=new C3(this.context)}setBackgroundVideo(t){this.pipeline.reader=t}}class Ms{blurBackground(t){return new w3(t)}blurSilhouette(t){return new F3(t)}imageBackground(){return new i2}videoBackground(){return new H3}}class J3{constructor(t){switch(gt(this,"factory"),t){case xi.CANVAS:this.factory=new Ks;break;case xi.WEBGL:this.factory=new Ms;break;default:const t=Ps();this.factory=t.supported?new Ms:new Ks}}blurBackground(t){return this.getFactory().blurBackground(t)}blurSilhouette(t){return this.getFactory().blurSilhouette(t)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class N3{constructor(){gt(this,"renderer"),gt(this,"backgroundVideo"),gt(this,"backgroundImage")}setBackgroundOptions(t){var e,n;const r=new J3(null==(e=t.renderingOptions)?void 0:e.type);switch(t.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(t.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(t.radius));break;case"VideoBackground":const e=r.videoBackground();this.backgroundVideo&&e.setBackgroundVideo(this.backgroundVideo),this.renderer=e;break;case"VirtualBackground":const n=r.imageBackground();this.backgroundImage&&n.setBackgroundImage(this.backgroundImage),this.renderer=n;break;default:throw`Unknown rendering type [${t.transformerType}]`}(null==(n=t.renderingOptions)?void 0:n.type)===xi.WEBGL&&(t.renderingOptions.selfieSegmentationType===Go.PRECISE?this.renderer.enablePostProcessing():t.renderingOptions.selfieSegmentationType===Go.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(t){var e;null==(e=this.renderer)||e.setFlickeringOptions(t)}setVideoBGReadable(t){this.backgroundVideo=t.getReader();const e=this.renderer;null!=e&&e.setBackgroundVideo&&e.setBackgroundVideo(this.backgroundVideo)}async setVirtualBGImage(t){const e=this.renderer;null!=e&&e.setBackgroundImage&&e.setBackgroundImage(t),this.backgroundImage=t}async process(t,e){if(this.renderer)return this.renderer.render(t,e)}async resizeForeground(t,e){}getBlurSize(t=Gi.Low){switch(t){case Gi.Low:return 5;case Gi.High:return 12}return t}async profile(t){var e,n;return null!=(n=null==(e=this.renderer)?void 0:e.profileWebgl(t))?n:[]}}class k3{constructor(){gt(this,"selfieSegmentation",new Os),gt(this,"backgroundFilter"),gt(this,"reporter",new Ac),gt(this,"isEnabled",!0),gt(this,"backgroundOptions")}async init(t,e){await this.selfieSegmentation.init(e.wasmAssetUriPath,e.tfliteAssetUriPath),this.backgroundFilter=new N3,this.report({variation:"Create"})}async transform(t,e){var n,r;if(!this.isEnabled)return e.enqueue(t);let i;const o=null!=(n=t.timestamp)?n:0,a=await createImageBitmap(t),l=await this.selfieSegmentation.process(a);l&&(i=await(null==(r=this.backgroundFilter)?void 0:r.process(a,l))),i?(t.close(),e.enqueue(new VideoFrame(i,{timestamp:o,alpha:"discard"}))):e.enqueue(t)}async setBackgroundOptions(t){var e;this.backgroundOptions=t,await(null==(e=this.backgroundFilter)?void 0:e.setBackgroundOptions(t)),this.report({variation:"Update"})}async setVideoBGReadable(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVideoBGReadable(t))}async setVirtualBGImage(t){var e;await(null==(e=this.backgroundFilter)?void 0:e.setVirtualBGImage(t))}setFlickeringOptions(t){var e;null==(e=this.backgroundFilter)||e.setFlickeringOptions(t),this.report({variation:"Update"})}async profile(t){var e,n;return null!=(n=null==(e=this.backgroundFilter)?void 0:e.profile(t))?n:[]}getTransformerType(){var t,e;return null!=(e=null==(t=this.backgroundOptions)?void 0:t.transformerType)?e:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(t){var e;this.reporter.send({version:zc,action:"MlTransformers",transformerType:null==(e=this.backgroundOptions)?void 0:e.transformerType,config:JSON.stringify(this.backgroundOptions),...t})}}const as=class{constructor(){gt(this,"backgroundTransformer",new k3),gt(this,"mediaProcessor",new O2),gt(this,"rate",30),gt(this,"resolveOnMediaProcessor"),gt(this,"eventsQueue",[])}async init(t,e){await this.backgroundTransformer.init(t,e),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny(((t,e)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:t,data:e}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:t,data:e})}))}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise((t=>{this.eventsQueue.length>0?t(this.eventsQueue.shift()):this.resolveOnMediaProcessor=t}))}async setTrackExpectedRate(t){this.rate=t,this.mediaProcessor.setTrackExpectedRate(t)}async transform(t,e){this.mediaProcessor.transform(t,e)}async setBackgroundOptions(t){var e;await(null==(e=this.backgroundTransformer)?void 0:e.setBackgroundOptions(t))}setVideoBGReadable(t){this.backgroundTransformer.setVideoBGReadable(t)}async setVirtualBGImage(t){await this.backgroundTransformer.setVirtualBGImage(t)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(t){this.backgroundTransformer.setFlickeringOptions(t)}setVonageMetadata(t){E2(t)}async profile(t){return JSON.stringify(await this.backgroundTransformer.profile(t))}};let Yo=as;bc("ProcessorWorker",as);const o2="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==",As=typeof window<"u"&&window.Blob&&new Blob([atob(o2)],{type:"text/javascript;charset=utf-8"});function E3(){const t=As&&(window.URL||window.webkitURL).createObjectURL(As);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+o2)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const ds=class extends ar{constructor(t){super(),gt(this,"rate",30),gt(this,"worker"),gt(this,"config"),gt(this,"backgroundOptions"),gt(this,"isEnabled",!0),this.config=t}async setTrackExpectedRate(t){var e;await this.startWorker(),await(null==(e=this.worker)?void 0:e.setTrackExpectedRate(t))}async setBackgroundOptions(t){this.backgroundOptions=t,await this.updateBackgroundOptions(t)}async transform(t,e){var n;await this.startWorker(),await(null==(n=this.worker)?void 0:n.transform(t,e))}async destroy(){var t;await(null==(t=this.worker)?void 0:t.terminate()),this.worker=void 0}async setFlickeringOptions(t){var e;await this.startWorker(),await(null==(e=this.worker)?void 0:e.setFlickeringOptions(t))}async profile(t){var e;const n=await(null==(e=this.worker)?void 0:e.profile(t));return JSON.parse(null!=n?n:"[]")}async enable(){var t;this.isEnabled=!0,await(null==(t=this.worker)?void 0:t.enable())}async disable(){var t;this.isEnabled=!1,await(null==(t=this.worker)?void 0:t.disable())}async listenWorker(){for(var t,e;null!=(t=this.worker)&&t.workerContext.worker;){const{name:t,data:n}=await(null==(e=this.worker)?void 0:e.onMediaProcessorEvent());switch(t){case"error":case"warn":this.emit(t,n);break;case"pipelineInfo":switch(this.emit(t,n),n){case"pipeline_ended":case"pipeline_ended_with_error":return void await this.destroy()}}}}async startWorker(){!this.config||this.worker||(this.worker=await mc(Yo,E3),this.isEnabled||await this.worker.disable(),await this.worker.init("worker_"+ds.initCount++,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(Zi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(t){var e,n,r;await this.startWorker();const{transformerType:i}=t;switch(i){case"VideoBackground":await(null==(e=this.worker)?void 0:e.setVideoBGReadable(await xs.createVideoReadable(t.backgroundAssetUri)));break;case"VirtualBackground":await(null==(n=this.worker)?void 0:n.setVirtualBGImage(await xs.createImageCanvas(t.backgroundAssetUri)))}await(null==(r=this.worker)?void 0:r.setBackgroundOptions(t))}};let Xi=ds;gt(Xi,"initCount",0);class U3{constructor(t){this.queries=t}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(t){const e=document.createElement("a");e.href=URL.createObjectURL(new Blob([t],{type:"application/json"})),e.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}convertToSpeedscope(){const t=[],e={},n=[];let r=0;for(const i of this.queries){const o=[];for(const n of i)void 0===e[n.name]&&(e[n.name]=t.length,t.push({name:n.name})),o.push({type:n.action==r2.PUSH?"O":"C",frame:e[n.name],at:n.timestamp}),r=Math.max(r,n.timestamp+n.duration);n.push({events:o,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:r})}const i={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:t},profiles:n};return JSON.stringify(i,null,2)}}class s2 extends ar{constructor(t){super(),gt(this,"worker"),gt(this,"connector"),this.worker=new Xi(t),this.connector=new _2(this.worker),this.worker.onAny(((t,e)=>this.emit(t,e)))}async setBackgroundOptions(t){await this.worker.setBackgroundOptions(t)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(t){this.worker.setTrackExpectedRate(t)}getConnector(){return this.connector}async profile(t){return this.worker.profile(t)}static async profile(t){const e=await Promise.all(this.instances.map((e=>e.profile(t))));return new U3(e)}static async create(t){const e=new this(t);return this.instances.push(e),e}}function A3(){return Ii}function z3(){return Si}function j3(){return Ti}function O3(){return Yi}function P3(){return wi}function _3(){return Li}function Q3(){return Fi}async function D3(t){return await s2.create(t)}gt(s2,"instances",[]);export{k3 as BackgroundTransformer,Q2 as BackgroundTransformerType,Gi as BlurRadius,K2 as ErrorFunction,ho as MediapipeHelper,vo as PipelineInfoData,xi as RenderingType,s2 as VonageMediaProcessor,B2 as WarningType,Go as WebglSelfieSegmentationType,D3 as createVonageMediaProcessor,rc as getSupportedBrowserFeatures,O3 as getVonageFaceDetection,P3 as getVonageFaceMash,z3 as getVonageHands,j3 as getVonageHolistic,_3 as getVonageObjectron,Q3 as getVonagePose,A3 as getVonageSelfieSegmentation,K3 as isSupported};
|