@vonage/ml-transformers 4.3.2 → 4.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ml-transformers.es.js +2276 -2276
- package/dist/ml-transformers.min.js +2 -2
- package/dist/ml-transformers.static.js +2276 -2276
- package/dist/ml-transformers.umd.js +32 -32
- package/package.json +6 -5
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
(function(ze,qn){typeof exports=="object"&&typeof module<"u"?qn(exports):typeof define=="function"&&define.amd?define(["exports"],qn):(ze=typeof globalThis<"u"?globalThis:ze||self,qn(ze["ml-transformers"]={}))})(this,function(ze){"use strict";var rd=Object.defineProperty;var id=(ze,qn,
|
|
2
|
-
`),function(Y){if(I=Y.indexOf(":"),m=to.trim(Y.substr(0,I)).toLowerCase(),y=to.trim(Y.substr(I+1)),m){if(r[m]&&zu.indexOf(m)>=0)return;m==="set-cookie"?r[m]=(r[m]?r[m]:[]).concat([y]):r[m]=r[m]?r[m]+", "+y:y}}),r},fs=Qn,Ou=fs.isStandardBrowserEnv()?function(){var n=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a"),m;function y(I){var H=I;return n&&(r.setAttribute("href",H),H=r.href),r.setAttribute("href",H),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return m=y(window.location.href),function(H){var Y=fs.isString(H)?y(H):H;return Y.protocol===m.protocol&&Y.host===m.host}}():function(){return function(){return!0}}();function eo(o){this.message=o}eo.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},eo.prototype.__CANCEL__=!0;var ni=eo,ri=Qn,_u=Eu,Qu=Uu,Du=as,$u=ju,qu=Pu,tc=Ou,no=hs,ec=oi,nc=ni,ms=function(n){return new Promise(function(m,y){var I=n.data,H=n.headers,Y=n.responseType,k;function nt(){n.cancelToken&&n.cancelToken.unsubscribe(k),n.signal&&n.signal.removeEventListener("abort",k)}ri.isFormData(I)&&delete H["Content-Type"];var P=new XMLHttpRequest;if(n.auth){var st=n.auth.username||"",xt=n.auth.password?unescape(encodeURIComponent(n.auth.password)):"";H.Authorization="Basic "+btoa(st+":"+xt)}var Vt=$u(n.baseURL,n.url);P.open(n.method.toUpperCase(),Du(Vt,n.params,n.paramsSerializer),!0),P.timeout=n.timeout;function dt(){if(!!P){var Ft="getAllResponseHeaders"in P?qu(P.getAllResponseHeaders()):null,Lt=!Y||Y==="text"||Y==="json"?P.responseText:P.response,At={data:Lt,status:P.status,statusText:P.statusText,headers:Ft,config:n,request:P};_u(function(Ee){m(Ee),nt()},function(Ee){y(Ee),nt()},At),P=null}}if("onloadend"in P?P.onloadend=dt:P.onreadystatechange=function(){!P||P.readyState!==4||P.status===0&&!(P.responseURL&&P.responseURL.indexOf("file:")===0)||setTimeout(dt)},P.onabort=function(){!P||(y(no("Request aborted",n,"ECONNABORTED",P)),P=null)},P.onerror=function(){y(no("Network Error",n,null,P)),P=null},P.ontimeout=function(){var Lt=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded",At=n.transitional||ec.transitional;n.timeoutErrorMessage&&(Lt=n.timeoutErrorMessage),y(no(Lt,n,At.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",P)),P=null},ri.isStandardBrowserEnv()){var ht=(n.withCredentials||tc(Vt))&&n.xsrfCookieName?Qu.read(n.xsrfCookieName):void 0;ht&&(H[n.xsrfHeaderName]=ht)}"setRequestHeader"in P&&ri.forEach(H,function(Lt,At){typeof I>"u"&&At.toLowerCase()==="content-type"?delete H[At]:P.setRequestHeader(At,Lt)}),ri.isUndefined(n.withCredentials)||(P.withCredentials=!!n.withCredentials),Y&&Y!=="json"&&(P.responseType=n.responseType),typeof n.onDownloadProgress=="function"&&P.addEventListener("progress",n.onDownloadProgress),typeof n.onUploadProgress=="function"&&P.upload&&P.upload.addEventListener("progress",n.onUploadProgress),(n.cancelToken||n.signal)&&(k=function(Ft){!P||(y(!Ft||Ft&&Ft.type?new nc("canceled"):Ft),P.abort(),P=null)},n.cancelToken&&n.cancelToken.subscribe(k),n.signal&&(n.signal.aborted?k():n.signal.addEventListener("abort",k))),I||(I=null),P.send(I)})},Un=Qn,ps=Nu,rc=ds,ic={"Content-Type":"application/x-www-form-urlencoded"};function bs(o,n){!Un.isUndefined(o)&&Un.isUndefined(o["Content-Type"])&&(o["Content-Type"]=n)}function oc(){var o;return(typeof XMLHttpRequest<"u"||typeof process<"u"&&Object.prototype.toString.call(process)==="[object process]")&&(o=ms),o}function sc(o,n,r){if(Un.isString(o))try{return(n||JSON.parse)(o),Un.trim(o)}catch(m){if(m.name!=="SyntaxError")throw m}return(r||JSON.stringify)(o)}var ii={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:oc(),transformRequest:[function(n,r){return ps(r,"Accept"),ps(r,"Content-Type"),Un.isFormData(n)||Un.isArrayBuffer(n)||Un.isBuffer(n)||Un.isStream(n)||Un.isFile(n)||Un.isBlob(n)?n:Un.isArrayBufferView(n)?n.buffer:Un.isURLSearchParams(n)?(bs(r,"application/x-www-form-urlencoded;charset=utf-8"),n.toString()):Un.isObject(n)||r&&r["Content-Type"]==="application/json"?(bs(r,"application/json"),sc(n)):n}],transformResponse:[function(n){var r=this.transitional||ii.transitional,m=r&&r.silentJSONParsing,y=r&&r.forcedJSONParsing,I=!m&&this.responseType==="json";if(I||y&&Un.isString(n)&&n.length)try{return JSON.parse(n)}catch(H){if(I)throw H.name==="SyntaxError"?rc(H,this,"E_JSON_PARSE"):H}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(n){return n>=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Un.forEach(["delete","get","head"],function(n){ii.headers[n]={}}),Un.forEach(["post","put","patch"],function(n){ii.headers[n]=Un.merge(ic)});var oi=ii,lc=Qn,uc=oi,cc=function(n,r,m){var y=this||uc;return lc.forEach(m,function(H){n=H.call(y,n,r)}),n},ys=function(n){return!!(n&&n.__CANCEL__)},gs=Qn,ro=cc,ac=ys,dc=oi,hc=ni;function io(o){if(o.cancelToken&&o.cancelToken.throwIfRequested(),o.signal&&o.signal.aborted)throw new hc("canceled")}var fc=function(n){io(n),n.headers=n.headers||{},n.data=ro.call(n,n.data,n.headers,n.transformRequest),n.headers=gs.merge(n.headers.common||{},n.headers[n.method]||{},n.headers),gs.forEach(["delete","get","head","post","put","patch","common"],function(y){delete n.headers[y]});var r=n.adapter||dc.adapter;return r(n).then(function(y){return io(n),y.data=ro.call(n,y.data,y.headers,n.transformResponse),y},function(y){return ac(y)||(io(n),y&&y.response&&(y.response.data=ro.call(n,y.response.data,y.response.headers,n.transformResponse))),Promise.reject(y)})},tr=Qn,Zs=function(n,r){r=r||{};var m={};function y(P,st){return tr.isPlainObject(P)&&tr.isPlainObject(st)?tr.merge(P,st):tr.isPlainObject(st)?tr.merge({},st):tr.isArray(st)?st.slice():st}function I(P){if(tr.isUndefined(r[P])){if(!tr.isUndefined(n[P]))return y(void 0,n[P])}else return y(n[P],r[P])}function H(P){if(!tr.isUndefined(r[P]))return y(void 0,r[P])}function Y(P){if(tr.isUndefined(r[P])){if(!tr.isUndefined(n[P]))return y(void 0,n[P])}else return y(void 0,r[P])}function k(P){if(P in r)return y(n[P],r[P]);if(P in n)return y(void 0,n[P])}var nt={url:H,method:H,data:H,baseURL:Y,transformRequest:Y,transformResponse:Y,paramsSerializer:Y,timeout:Y,timeoutMessage:Y,withCredentials:Y,adapter:Y,responseType:Y,xsrfCookieName:Y,xsrfHeaderName:Y,onUploadProgress:Y,onDownloadProgress:Y,decompress:Y,maxContentLength:Y,maxBodyLength:Y,transport:Y,httpAgent:Y,httpsAgent:Y,cancelToken:Y,socketPath:Y,responseEncoding:Y,validateStatus:k};return tr.forEach(Object.keys(n).concat(Object.keys(r)),function(st){var xt=nt[st]||I,Vt=xt(st);tr.isUndefined(Vt)&&xt!==k||(m[st]=Vt)}),m},vs={version:"0.25.0"},mc=vs.version,oo={};["object","boolean","number","function","string","symbol"].forEach(function(o,n){oo[o]=function(m){return typeof m===o||"a"+(n<1?"n ":" ")+o}});var Gs={};oo.transitional=function(n,r,m){function y(I,H){return"[Axios v"+mc+"] Transitional option '"+I+"'"+H+(m?". "+m:"")}return function(I,H,Y){if(n===!1)throw new Error(y(H," has been removed"+(r?" in "+r:"")));return r&&!Gs[H]&&(Gs[H]=!0,console.warn(y(H," has been deprecated since v"+r+" and will be removed in the near future"))),n?n(I,H,Y):!0}};function pc(o,n,r){if(typeof o!="object")throw new TypeError("options must be an object");for(var m=Object.keys(o),y=m.length;y-- >0;){var I=m[y],H=n[I];if(H){var Y=o[I],k=Y===void 0||H(Y,I,o);if(k!==!0)throw new TypeError("option "+I+" must be "+k);continue}if(r!==!0)throw Error("Unknown option "+I)}}var bc={assertOptions:pc,validators:oo},Xs=Qn,yc=as,Vs=Fu,Ws=fc,si=Zs,Rs=bc,Sr=Rs.validators;function Er(o){this.defaults=o,this.interceptors={request:new Vs,response:new Vs}}Er.prototype.request=function(n,r){if(typeof n=="string"?(r=r||{},r.url=n):r=n||{},!r.url)throw new Error("Provided config url is not valid");r=si(this.defaults,r),r.method?r.method=r.method.toLowerCase():this.defaults.method?r.method=this.defaults.method.toLowerCase():r.method="get";var m=r.transitional;m!==void 0&&Rs.assertOptions(m,{silentJSONParsing:Sr.transitional(Sr.boolean),forcedJSONParsing:Sr.transitional(Sr.boolean),clarifyTimeoutError:Sr.transitional(Sr.boolean)},!1);var y=[],I=!0;this.interceptors.request.forEach(function(Vt){typeof Vt.runWhen=="function"&&Vt.runWhen(r)===!1||(I=I&&Vt.synchronous,y.unshift(Vt.fulfilled,Vt.rejected))});var H=[];this.interceptors.response.forEach(function(Vt){H.push(Vt.fulfilled,Vt.rejected)});var Y;if(!I){var k=[Ws,void 0];for(Array.prototype.unshift.apply(k,y),k=k.concat(H),Y=Promise.resolve(r);k.length;)Y=Y.then(k.shift(),k.shift());return Y}for(var nt=r;y.length;){var P=y.shift(),st=y.shift();try{nt=P(nt)}catch(xt){st(xt);break}}try{Y=Ws(nt)}catch(xt){return Promise.reject(xt)}for(;H.length;)Y=Y.then(H.shift(),H.shift());return Y},Er.prototype.getUri=function(n){if(!n.url)throw new Error("Provided config url is not valid");return n=si(this.defaults,n),yc(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},Xs.forEach(["delete","get","head","options"],function(n){Er.prototype[n]=function(r,m){return this.request(si(m||{},{method:n,url:r,data:(m||{}).data}))}}),Xs.forEach(["post","put","patch"],function(n){Er.prototype[n]=function(r,m,y){return this.request(si(y||{},{method:n,url:r,data:m}))}});var gc=Er,Zc=ni;function Yr(o){if(typeof o!="function")throw new TypeError("executor must be a function.");var n;this.promise=new Promise(function(y){n=y});var r=this;this.promise.then(function(m){if(!!r._listeners){var y,I=r._listeners.length;for(y=0;y<I;y++)r._listeners[y](m);r._listeners=null}}),this.promise.then=function(m){var y,I=new Promise(function(H){r.subscribe(H),y=H}).then(m);return I.cancel=function(){r.unsubscribe(y)},I},o(function(y){r.reason||(r.reason=new Zc(y),n(r.reason))})}Yr.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Yr.prototype.subscribe=function(n){if(this.reason){n(this.reason);return}this._listeners?this._listeners.push(n):this._listeners=[n]},Yr.prototype.unsubscribe=function(n){if(!!this._listeners){var r=this._listeners.indexOf(n);r!==-1&&this._listeners.splice(r,1)}},Yr.source=function(){var n,r=new Yr(function(y){n=y});return{token:r,cancel:n}};var vc=Yr,Gc=function(n){return function(m){return n.apply(null,m)}},Xc=Qn,Vc=function(n){return Xc.isObject(n)&&n.isAxiosError===!0},xs=Qn,Wc=os,li=gc,Rc=Zs,xc=oi;function Is(o){var n=new li(o),r=Wc(li.prototype.request,n);return xs.extend(r,li.prototype,n),xs.extend(r,n),r.create=function(y){return Is(Rc(o,y))},r}var or=Is(xc);or.Axios=li,or.Cancel=ni,or.CancelToken=vc,or.isCancel=ys,or.VERSION=vs.version,or.all=function(n){return Promise.all(n)},or.spread=Gc,or.isAxiosError=Vc,_i.exports=or,_i.exports.default=or;var Ic=_i.exports;class xe{isEmpty(){return!this.isPresent()}static of(n){if(n!=null)return new Ss(n);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(n){return xe.of(n)}static ofNullable(n){return n!=null?new Ss(n):new Ys}static empty(){return new Ys}static from(n){switch(n.kind){case"present":return xe.of(n.value);case"empty":return xe.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class Ss extends xe{constructor(n){super(),this.payload=n}isPresent(){return!0}get(){return this.payload}ifPresent(n){n(this.payload)}ifPresentOrElse(n,r){n(this.payload)}filter(n){return n(this.payload)?this:xe.empty()}map(n){const r=n(this.payload);return xe.ofNullable(r)}flatMap(n){return n(this.payload)}or(n){return this}orElse(n){return this.payload}orElseGet(n){return this.payload}orElseThrow(n){return this.payload}orNull(){return this.payload}orUndefined(){return this.payload}toOption(){return{kind:"present",value:this.payload}}matches(n){return n.present(this.payload)}toJSON(n){return this.payload}}class Ys extends xe{isPresent(){return!1}constructor(){super()}get(){throw new TypeError("The optional is not present.")}ifPresent(n){}ifPresentOrElse(n,r){r()}filter(n){return this}map(n){return xe.empty()}flatMap(n){return xe.empty()}or(n){return n()}orElse(n){return n}orElseGet(n){return this.orElse(n())}orElseThrow(n){throw n()}orNull(){return null}orUndefined(){}toOption(){return{kind:"empty"}}matches(n){return n.empty()}toJSON(n){return null}}const Sc="2.0.0";function Yc(o){globalThis._vonageMediaProcessorMetadata=o}function Ts(){return globalThis._vonageMediaProcessorMetadata}class er{constructor(){const n=Ts();this._report={action:xe.empty(),applicationId:xe.ofNullable(n!==void 0&&n!=null?n.appId:null),timestamp:Date.now(),fps:xe.empty(),framesTransformed:xe.empty(),guid:xe.empty(),highestFrameTransformCpu:xe.empty(),message:xe.empty(),source:xe.ofNullable(n!==void 0&&n!=null?n.sourceType:null),transformedFps:xe.empty(),transformerType:xe.empty(),variation:xe.empty(),videoHeight:xe.empty(),videoWidth:xe.empty(),version:Sc,error:xe.empty(),proxyUrl:xe.ofNullable(n!==void 0&&n!=null?n.proxyUrl:null)}}action(n){return this._report.action=xe.ofNullable(n),this}framesTransformed(n){return this._report.framesTransformed=xe.ofNullable(n),this}fps(n){return this._report.fps=xe.ofNullable(n),this}guid(n){return this._report.guid=xe.ofNullable(n),this}message(n){return this._report.message=xe.ofNullable(n),this}transformedFps(n){return this._report.transformedFps=xe.ofNullable(n),this}transformerType(n){return this._report.transformerType=xe.ofNullable(n),this}variation(n){return this._report.variation=xe.ofNullable(n),this}videoHeight(n){return this._report.videoHeight=xe.ofNullable(n),this}videoWidth(n){return this._report.videoWidth=xe.ofNullable(n),this}error(n){return this._report.error=xe.ofNullable(n),this}build(){return this._report}}const Tc=o=>JSON.stringify(o,(n,r)=>{if(r!==null)return r});class nr{static report(n){return new Promise((r,m)=>{if(n.applicationId.isEmpty()||n.source.isEmpty()){r("success");return}let y=Ic.create(),I={timeout:1e4,timeoutErrorMessage:"Request timeout",headers:{"Content-Type":"application/json"}},H="hlg.tokbox.com/prod/logging/vcp_webrtc";if(n.proxyUrl.isEmpty())H="https://"+H;else{let Y;n.proxyUrl.get().slice(n.proxyUrl.get().length-1)!=="/"?Y=n.proxyUrl.get()+"/":Y=n.proxyUrl.get(),H=Y+H}y.post(H,Tc(n),I).then(Y=>{console.log(Y),r("success")}).catch(Y=>{console.log(Y),m(Y)})})}}var ui,wc=new Uint8Array(16);function Lc(){if(!ui&&(ui=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!ui))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ui(wc)}var Hc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Fc(o){return typeof o=="string"&&Hc.test(o)}for(var Kn=[],so=0;so<256;++so)Kn.push((so+256).toString(16).substr(1));function Cc(o){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=(Kn[o[n+0]]+Kn[o[n+1]]+Kn[o[n+2]]+Kn[o[n+3]]+"-"+Kn[o[n+4]]+Kn[o[n+5]]+"-"+Kn[o[n+6]]+Kn[o[n+7]]+"-"+Kn[o[n+8]]+Kn[o[n+9]]+"-"+Kn[o[n+10]]+Kn[o[n+11]]+Kn[o[n+12]]+Kn[o[n+13]]+Kn[o[n+14]]+Kn[o[n+15]]).toLowerCase();if(!Fc(r))throw TypeError("Stringified UUID is invalid");return r}function ws(o,n,r){o=o||{};var m=o.random||(o.rng||Lc)();if(m[6]=m[6]&15|64,m[8]=m[8]&63|128,n){r=r||0;for(var y=0;y<16;++y)n[r+y]=m[y];return n}return Cc(m)}const cr=new WeakMap,ci=new WeakMap,Ur=new WeakMap,lo=Symbol("anyProducer"),Ls=Promise.resolve(),ai=Symbol("listenerAdded"),di=Symbol("listenerRemoved");let uo=!1;function Tr(o){if(typeof o!="string"&&typeof o!="symbol")throw new TypeError("eventName must be a string or a symbol")}function hi(o){if(typeof o!="function")throw new TypeError("listener must be a function")}function wr(o,n){const r=ci.get(o);return r.has(n)||r.set(n,new Set),r.get(n)}function Kr(o,n){const r=typeof n=="string"||typeof n=="symbol"?n:lo,m=Ur.get(o);return m.has(r)||m.set(r,new Set),m.get(r)}function Nc(o,n,r){const m=Ur.get(o);if(m.has(n))for(const y of m.get(n))y.enqueue(r);if(m.has(lo)){const y=Promise.all([n,r]);for(const I of m.get(lo))I.enqueue(y)}}function Hs(o,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},y=[];const I={enqueue(H){y.push(H),m()},finish(){r=!0,m()}};for(const H of n)Kr(o,H).add(I);return{async next(){return y?y.length===0?r?(y=void 0,this.next()):(await new Promise(H=>{m=H}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(H){y=void 0;for(const Y of n)Kr(o,Y).delete(I);return m(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Fs(o){if(o===void 0)return Cs;if(!Array.isArray(o))throw new TypeError("`methodNames` must be an array of strings");for(const n of o)if(!Cs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return o}const co=o=>o===ai||o===di;class gr{static mixin(n,r){return r=Fs(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const H of r)if(m.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const I=H=>function(...Y){return this[n][H](...Y)};for(const H of r)Object.defineProperty(m.prototype,H,{enumerable:!1,value:I(H)});return m}}static get isDebugEnabled(){if(typeof process!="object")return uo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||uo}static set isDebugEnabled(n){uo=n}constructor(n={}){cr.set(this,new Set),ci.set(this,new Map),Ur.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,y,I)=>{I=JSON.stringify(I),typeof y=="symbol"&&(y=y.toString());const H=new Date,Y=`${H.getHours()}:${H.getMinutes()}:${H.getSeconds()}.${H.getMilliseconds()}`;console.log(`[${Y}][emittery:${r}][${m}] Event Name: ${y}
|
|
3
|
-
data: ${I}`)})}logIfDebugEnabled(n,r,m){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const m of n)Tr(m),wr(this,m).add(r),this.logIfDebugEnabled("subscribe",m,void 0),co(m)||this.emit(ai,{eventName:m,listener:r});return this.off.bind(this,n,r)}off(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const m of n)Tr(m),wr(this,m).delete(r),this.logIfDebugEnabled("unsubscribe",m,void 0),co(m)||this.emit(di,{eventName:m,listener:r})}once(n){return new Promise(r=>{const m=this.on(n,y=>{m(),r(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Tr(r);return Hs(this,n)}async emit(n,r){Tr(n),this.logIfDebugEnabled("emit",n,r),Nc(this,n,r);const m=wr(this,n),y=cr.get(this),I=[...m],H=co(n)?[]:[...y];await Ls,await Promise.all([...I.map(async Y=>{if(m.has(Y))return Y(r)}),...H.map(async Y=>{if(y.has(Y))return Y(n,r)})])}async emitSerial(n,r){Tr(n),this.logIfDebugEnabled("emitSerial",n,r);const m=wr(this,n),y=cr.get(this),I=[...m],H=[...y];await Ls;for(const Y of I)m.has(Y)&&await Y(r);for(const Y of H)y.has(Y)&&await Y(n,r)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),cr.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Hs(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{listener:n}),cr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){wr(this,r).clear();const m=Kr(this,r);for(const y of m)y.finish();m.clear()}else{cr.get(this).clear();for(const m of ci.get(this).values())m.clear();for(const m of Ur.get(this).values()){for(const y of m)y.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const m of n){if(typeof m=="string"){r+=cr.get(this).size+wr(this,m).size+Kr(this,m).size+Kr(this).size;continue}typeof m<"u"&&Tr(m),r+=cr.get(this).size;for(const y of ci.get(this).values())r+=y.size;for(const y of Ur.get(this).values())r+=y.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Fs(r);for(const m of r){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const Cs=Object.getOwnPropertyNames(gr.prototype).filter(o=>o!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var ao=gr;function Jc(o){return typeof o=="object"&&o!==null&&"message"in o&&typeof o.message=="string"}function kc(o){if(Jc(o))return o;try{return new Error(JSON.stringify(o))}catch{return new Error(String(o))}}function ho(o){return kc(o).message}var Ns=(o=>(o.FPS_DROP="fps_drop",o))(Ns||{}),Js=(o=>(o.start="start",o.transform="transform",o.flush="flush",o))(Js||{}),fi=(o=>(o.pipeline_ended="pipeline_ended",o.pipeline_ended_with_error="pipeline_ended_with_error",o.pipeline_started="pipeline_started",o.pipeline_started_with_error="pipeline_started_with_error",o.pipeline_restarted="pipeline_restarted",o.pipeline_restarted_with_error="pipeline_restarted_with_error",o))(fi||{});const Ec=500,Uc=.8;class Kc extends ao{constructor(n,r){super(),this.index_=r,this.uuid_=ws(),this.framesTransformed_=0,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.framesFromSource_=0,this.fps_=0,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType());const m=new er().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();nr.report(m)}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){const m=new er().action("MediaTransformer").guid(this.uuid_).message(Pn.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error(ho(r)).build();nr.report(m);const y={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",y)}}async transform(n,r){var m,y,I,H;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(m=n==null?void 0:n.displayHeight)!=null?m:0,this.videoWidth_=(y=n==null?void 0:n.displayWidth)!=null?y:0),++this.framesFromSource_,this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else try{await((H=(I=this.transformer_).transform)==null?void 0:H.call(I,n,r)),++this.framesTransformed_,this.framesTransformed_===Ec&&this.mediaTransformerQosReport()}catch(Y){const k=new er().action("MediaTransformer").guid(this.uuid_).message(Pn.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error(ho(Y)).build();nr.report(k);const nt={eventMetaData:{transformerIndex:this.index_},error:Y,function:"transform"};this.emit("error",nt)}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(m){const y=new er().action("MediaTransformer").guid(this.uuid_).message(Pn.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error(ho(m)).build();nr.report(y);const I={eventMetaData:{transformerIndex:this.index_},error:m,function:"flush"};this.emit("error",I)}}this.mediaTransformerQosReport();const r=new er().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();nr.report(r)}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}mediaTransformerQosReport(){let n=(Date.now()-this.mediaTransformerQosReportStartTimestamp_)/1e3,r=this.framesFromSource_/n,m=this.framesTransformed_/n;if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*Uc>r){const I={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:r}};this.emit("warn",I)}const y=new er().action("MediaTransformer").fps(r).transformedFps(m).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();nr.report(y),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class Mc extends ao{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let m=new Kc(n[r],r);m.on("error",y=>{this.emit("error",y)}),m.on("warn",y=>{this.emit("warn",y)}),this.transformers_.push(m)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let m=n;for(let y of this.transformers_)n=n.pipeThrough(new TransformStream(y));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await m.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async y=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(I=>{console.error("[Pipeline] Error from stream transform:",I)}),await r.abort(y),await m.cancel(y),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class Bc extends ao{constructor(){super(),this.uuid_=ws(),this.trackExpectedRate_=-1;const n=new er().action("MediaProcessor").guid(this.uuid_).variation("Create").build();nr.report(n)}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise((n,r)=>{if(!this.transformers_||this.transformers_.length===0){const y=new er().action("MediaProcessor").guid(this.uuid_).message(Pn.errors.transformer_none).variation("Error").build();nr.report(y),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){const y=new er().action("MediaProcessor").guid(this.uuid_).message(Pn.errors.readable_null).variation("Error").build();nr.report(y),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){const y=new er().action("MediaProcessor").guid(this.uuid_).message(Pn.errors.writable_null).variation("Error").build();nr.report(y),r("[MediaProcessor] Writable is null.");return}let m=!1;this.pipeline_&&(m=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new Mc(this.transformers_),this.pipeline_.on("warn",y=>{this.emit("warn",y)}),this.pipeline_.on("error",y=>{this.emit("error",y)}),this.pipeline_.on("pipelineInfo",y=>{m&&(y==="pipeline_started"?y=fi.pipeline_restarted:y==="pipeline_started_with_error"&&(y=fi.pipeline_restarted_with_error)),this.emit("pipelineInfo",y)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(y=>{r(y)})})}setTransformers(n){const r=new er().action("MediaProcessor").guid(this.uuid_).message(Pn.updates.transformer_new).variation("Update").build();return nr.report(r),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(n=>{this.pipeline_&&this.pipeline_.destroy();const r=new er().action("MediaProcessor").guid(this.uuid_).variation("Delete").build();nr.report(r),n()})}}class Ac{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((r,m)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${y}`),m(y)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):m("kind not supported")}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${y}`),m(y)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class jc{constructor(n){this.insertableStreamHelper_=new Ac,this.mediaProcessor_=n}setTrack(n){return new Promise((r,m)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(y=>{m(y)})}).catch(y=>{m(y)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(m=>{r(m)}):r("no processor")})}}var Mr=(o=>(o.Low="Low",o.High="High",o))(Mr||{});const zc=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 Pc=function(){var o=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},m,y;r.ready=new Promise(function(et,ot){m=et,y=ot});var I={},H;for(H in r)r.hasOwnProperty(H)&&(I[H]=r[H]);var Y="./this.program",k=function(et,ot){throw ot},nt=!0,P="";function st(et){return r.locateFile?r.locateFile(et,P):P+et}var xt;typeof document<"u"&&document.currentScript&&(P=document.currentScript.src),o&&(P=o),P.indexOf("blob:")!==0?P=P.substr(0,P.replace(/[?#].*/,"").lastIndexOf("/")+1):P="";var Vt=r.print||console.log.bind(console),dt=r.printErr||console.warn.bind(console);for(H in I)I.hasOwnProperty(H)&&(r[H]=I[H]);I=null,r.arguments&&r.arguments,r.thisProgram&&(Y=r.thisProgram),r.quit&&(k=r.quit);var ht;r.wasmBinary&&(ht=r.wasmBinary);var Ft=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Lt,At=!1,_=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function Ee(et,ot,at){for(var _t=ot+at,ae=ot;et[ae]&&!(ae>=_t);)++ae;if(ae-ot>16&&et.subarray&&_)return _.decode(et.subarray(ot,ae));for(var ue="";ot<ae;){var Tt=et[ot++];if(!(Tt&128)){ue+=String.fromCharCode(Tt);continue}var me=et[ot++]&63;if((Tt&224)==192){ue+=String.fromCharCode((Tt&31)<<6|me);continue}var Ne=et[ot++]&63;if((Tt&240)==224?Tt=(Tt&15)<<12|me<<6|Ne:Tt=(Tt&7)<<18|me<<12|Ne<<6|et[ot++]&63,Tt<65536)ue+=String.fromCharCode(Tt);else{var qe=Tt-65536;ue+=String.fromCharCode(55296|qe>>10,56320|qe&1023)}}return ue}function an(et,ot){return et?Ee(gt,et,ot):""}function We(et,ot,at){for(var _t=0;_t<et.length;++_t)de[ot++>>0]=et.charCodeAt(_t);at||(de[ot>>0]=0)}function $t(et,ot){return et%ot>0&&(et+=ot-et%ot),et}var An,de,gt,pn;function jn(et){An=et,r.HEAP8=de=new Int8Array(et),r.HEAP16=new Int16Array(et),r.HEAP32=pn=new Int32Array(et),r.HEAPU8=gt=new Uint8Array(et),r.HEAPU16=new Uint16Array(et),r.HEAPU32=new Uint32Array(et),r.HEAPF32=new Float32Array(et),r.HEAPF64=new Float64Array(et)}r.INITIAL_MEMORY;var Re,Jt=[],Te=[],on=[],Xn=0;function Hn(){return Ft||Xn>0}function xn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());Qt(Jt)}function Nn(){Qt(Te)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Fn(r.postRun.shift());Qt(on)}function bn(et){Jt.unshift(et)}function kn(et){Te.unshift(et)}function Fn(et){on.unshift(et)}var Pe=0,Ae=null;function In(et){Pe++,r.monitorRunDependencies&&r.monitorRunDependencies(Pe)}function Vn(et){if(Pe--,r.monitorRunDependencies&&r.monitorRunDependencies(Pe),Pe==0&&Ae){var ot=Ae;Ae=null,ot()}}r.preloadedImages={},r.preloadedAudios={};function he(et){r.onAbort&&r.onAbort(et),et="Aborted("+et+")",dt(et),At=!0,et+=". Build with -s ASSERTIONS=1 for more info.";var ot=new WebAssembly.RuntimeError(et);throw y(ot),ot}var Ye="data:application/octet-stream;base64,";function Oe(et){return et.startsWith(Ye)}var ne;ne="tflite-simd.wasm",Oe(ne)||(ne=st(ne));function Ve(et){try{if(et==ne&&ht)return new Uint8Array(ht);if(!xt)throw"both async and sync fetching of the wasm failed"}catch(ot){he(ot)}}function sn(){return!ht&&nt&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(et){if(!et.ok)throw"failed to load wasm binary file at '"+ne+"'";return et.arrayBuffer()}).catch(function(){return Ve(ne)}):Promise.resolve().then(function(){return Ve(ne)})}function Me(){var et={a:fe};function ot(Tt,me){var Ne=Tt.exports;r.asm=Ne,Lt=r.asm.q,jn(Lt.buffer),Re=r.asm.E,kn(r.asm.r),Vn()}In();function at(Tt){ot(Tt.instance)}function _t(Tt){return sn().then(function(me){return WebAssembly.instantiate(me,et)}).then(function(me){return me}).then(Tt,function(me){dt("failed to asynchronously prepare wasm: "+me),he(me)})}function ae(){return!ht&&typeof WebAssembly.instantiateStreaming=="function"&&!Oe(ne)&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(Tt){var me=WebAssembly.instantiateStreaming(Tt,et);return me.then(at,function(Ne){return dt("wasm streaming compile failed: "+Ne),dt("falling back to ArrayBuffer instantiation"),_t(at)})}):_t(at)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(et,ot);return ue}catch(Tt){return dt("Module.instantiateWasm callback failed with error: "+Tt),!1}return ae().catch(y),{}}function Qt(et){for(;et.length>0;){var ot=et.shift();if(typeof ot=="function"){ot(r);continue}var at=ot.func;typeof at=="number"?ot.arg===void 0?Re.get(at)():Re.get(at)(ot.arg):at(ot.arg===void 0?null:ot.arg)}}function Ze(et,ot,at,_t){he("Assertion failed: "+an(et)+", at: "+[ot?an(ot):"unknown filename",at,_t?an(_t):"unknown function"])}function Ce(et,ot){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Bt(et,ot){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Ie(){he("")}var zt;zt=function(){return performance.now()};var ye=!0;function we(et){return pn[Nt()>>2]=et,et}function $e(et,ot){var at;if(et===0)at=Date.now();else if((et===1||et===4)&&ye)at=zt();else return we(28),-1;return pn[ot>>2]=at/1e3|0,pn[ot+4>>2]=at%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Pt(et,ot,at){gt.copyWithin(et,ot,ot+at)}function je(et){try{return Lt.grow(et-An.byteLength+65535>>>16),jn(Lt.buffer),1}catch{}}function _e(et){var ot=gt.length;et=et>>>0;var at=2147483648;if(et>at)return!1;for(var _t=1;_t<=4;_t*=2){var ae=ot*(1+.2/_t);ae=Math.min(ae,et+100663296);var ue=Math.min(at,$t(Math.max(et,ae),65536)),Tt=je(ue);if(Tt)return!0}return!1}function Se(et){for(var ot=zt();zt()-ot<et;);}var Wn={};function ln(){return Y||"./this.program"}function Qe(){if(!Qe.strings){var et=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",ot={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:et,_:ln()};for(var at in Wn)Wn[at]===void 0?delete ot[at]:ot[at]=Wn[at];var _t=[];for(var at in ot)_t.push(at+"="+ot[at]);Qe.strings=_t}return Qe.strings}var un={mappings:{},buffers:[null,[],[]],printChar:function(et,ot){var at=un.buffers[et];ot===0||ot===10?((et===1?Vt:dt)(Ee(at,0)),at.length=0):at.push(ot)},varargs:void 0,get:function(){un.varargs+=4;var et=pn[un.varargs-4>>2];return et},getStr:function(et){var ot=an(et);return ot},get64:function(et,ot){return et}};function ve(et,ot){var at=0;return Qe().forEach(function(_t,ae){var ue=ot+at;pn[et+ae*4>>2]=ue,We(_t,ue),at+=_t.length+1}),0}function Le(et,ot){var at=Qe();pn[et>>2]=at.length;var _t=0;return at.forEach(function(ae){_t+=ae.length+1}),pn[ot>>2]=_t,0}function Ge(et){ee(et)}function re(et){return 0}function De(et,ot,at,_t,ae){}function te(et,ot,at,_t){for(var ae=0,ue=0;ue<at;ue++){for(var Tt=pn[ot+ue*8>>2],me=pn[ot+(ue*8+4)>>2],Ne=0;Ne<me;Ne++)un.printChar(et,gt[Tt+Ne]);ae+=me}return pn[_t>>2]=ae,0}function Ot(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var et=new Uint8Array(1);return function(){return crypto.getRandomValues(et),et[0]}}else return function(){he("randomDevice")}}function hn(et,ot){hn.randomDevice||(hn.randomDevice=Ot());for(var at=0;at<ot;at++)de[et+at>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:Bt,b:Ie,n:$e,h:Xe,l:Pt,m:_e,p:Se,f:ve,g:Le,j:Ge,i:re,k:De,c:te,o:hn};Me(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Nt=r.___errno_location=function(){return(Nt=r.___errno_location=r.asm.F).apply(null,arguments)},Wt;function ie(et){this.name="ExitStatus",this.message="Program terminated with exit("+et+")",this.status=et}Ae=function et(){Wt||He(),Wt||(Ae=et)};function He(et){if(Pe>0||(xn(),Pe>0))return;function ot(){Wt||(Wt=!0,r.calledRun=!0,!At&&(Nn(),m(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),ot()},1)):ot()}r.run=He;function ee(et,ot){oe(et)}function oe(et){Hn()||(r.onExit&&r.onExit(et),At=!0),k(et,new ie(et))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return He(),n.ready}}();class Oc{constructor(){Rt(this,"selectedTFLite");Rt(this,"isSIMDSupported",!1);Rt(this,"isThreadsSupported",!1);Rt(this,"inputWidth",0);Rt(this,"inputHeight",0);Rt(this,"inputChannelCount",0);Rt(this,"inputMemoryOffset",0);Rt(this,"outputWidth",0);Rt(this,"outputHeight",0);Rt(this,"outputChannelCount",0);Rt(this,"outputMemoryOffset",0)}}const _c="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",Qc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function Dc(o=_c,n=Qc){let r=new Oc;var m=new Promise(function(y,I){async function H(){return Pc({locateFile:function(nt){return o+nt}})}async function Y(k){return new Promise(async(nt,P)=>{const st=k;if(typeof st>"u")return P("TFLite backend unavailable: wasmSimd");const xt="selfie_segmentation_landscape";console.log("Loading tflite model:",xt);let Vt=n+`${xt}.tflite`;console.log("TFLite modelUrl: "+Vt);try{const ht=await(await fetch(Vt)).arrayBuffer();console.log("Model buffer size:",ht.byteLength);const Ft=st._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Ft),console.log("Loading model buffer..."),st.HEAPU8.set(new Uint8Array(ht),Ft);const Lt=st._loadModel(ht.byteLength);if(console.log("Load model result:",Lt),Lt!==0){P("Cannot load model");return}r.inputWidth=st._getInputWidth(),r.inputHeight=st._getInputHeight(),r.inputChannelCount=st._getInputChannelCount(),r.inputMemoryOffset=st._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=st._getOutputMemoryOffset(),r.outputWidth=st._getOutputWidth(),r.outputHeight=st._getOutputHeight(),r.outputChannelCount=st._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=st}catch(dt){P(dt);return}nt()})}H().then(k=>{if(k===null)throw console.error("loadTFLite null"),"loadTFLite null";Y(k).then(nt=>{y(r)}).catch(nt=>{console.error("loadTFLiteModel error"),I("loadTFLiteModel error")})}).catch(k=>{console.error("loadTFLite error:",k),I("loadTFLite error:"+k)})});return m}class ks{constructor(){Rt(this,"canvas",new OffscreenCanvas(0,0));Rt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));Rt(this,"pixelCount",0);Rt(this,"inputOffset",0);Rt(this,"outputOffset",0);Rt(this,"infos");Rt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await Dc(n,r)}getOutputDimensions(){var n,r,m,y;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(y=(m=this.infos)==null?void 0:m.outputHeight)!=null?y:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,m=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,m);const y=this.context.getImageData(0,0,r,m),I=this.infos.selectedTFLite.HEAPF32;for(let H=0;H<this.pixelCount;H++){const Y=this.inputOffset+H*3;I[Y]=y.data[H*4]/255,I[Y+1]=y.data[H*4+1]/255,I[Y+2]=y.data[H*4+2]/255}this.infos.selectedTFLite._runInference();for(let H=0;H<this.pixelCount;H++){const Y=this.infos.selectedTFLite.HEAPF32[this.outputOffset+H];this.mask.data[H*4]=this.mask.data[H*4+3]=255*Y}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,m;return(m=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?m:!1}}async function $c(o,n){const{wasm:r,insertableStreams:m,simd:y,webgl:I}=await Es(o,n);if(!r.supported)throw r.message;if(!m.supported)throw m.message;if(!y.supported)throw y.message;if(!I.supported)throw I.message}async function Es(o,n){const r=new ks;await r.initWasm(o,n);const m={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await zc(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:qc()};try{await qn()}catch(y){m.insertableStreams.supported=!1,m.insertableStreams.message=y}return m}function qc(){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"}}const mi={};(function(){var o;function n(p){var V=0;return function(){return V<p.length?{done:!1,value:p[V++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,V,W){return p==Array.prototype||p==Object.prototype||(p[V]=W.value),p};function m(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var V=0;V<p.length;++V){var W=p[V];if(W&&W.Math==Math)return W}throw Error("Cannot find global object")}var y=m(this);function I(p,V){if(V)t:{var W=y;p=p.split(".");for(var E=0;E<p.length-1;E++){var O=p[E];if(!(O in W))break t;W=W[O]}p=p[p.length-1],E=W[p],V=V(E),V!=E&&V!=null&&r(W,p,{configurable:!0,writable:!0,value:V})}}I("Symbol",function(p){function V(lt){if(this instanceof V)throw new TypeError("Symbol is not a constructor");return new W(E+(lt||"")+"_"+O++,lt)}function W(lt,z){this.g=lt,r(this,"description",{configurable:!0,writable:!0,value:z})}if(p)return p;W.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return V}),I("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var V="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),W=0;W<V.length;W++){var E=y[V[W]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return p});function H(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function Y(p){var V=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return V?V.call(p):{next:n(p)}}function k(p){if(!(p instanceof Array)){p=Y(p);for(var V,W=[];!(V=p.next()).done;)W.push(V.value);p=W}return p}var nt=typeof Object.create=="function"?Object.create:function(p){function V(){}return V.prototype=p,new V},P;if(typeof Object.setPrototypeOf=="function")P=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}P=st?function(p,V){if(p.__proto__=V,p.__proto__!==V)throw new TypeError(p+" is not extensible");return p}:null}var dt=P;function ht(p,V){if(p.prototype=nt(V.prototype),p.prototype.constructor=p,dt)dt(p,V);else for(var W in V)if(W!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(V,W);E&&Object.defineProperty(p,W,E)}else p[W]=V[W];p.ea=V.prototype}function Ft(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Ft.prototype.o=function(p){this.h=p};function At(p,V){p.j={U:V,V:!0},p.g=p.m||p.s}Ft.prototype.return=function(p){this.j={return:p},this.g=this.s};function _(p,V,W){return p.g=W,{value:V}}function Ee(p){this.g=new Ft,this.h=p}function an(p,V){Lt(p.g);var W=p.g.i;return W?We(p,"return"in W?W.return:function(E){return{value:E,done:!0}},V,p.g.return):(p.g.return(V),$t(p))}function We(p,V,W,E){try{var O=V.call(p.g.i,W);if(!(O instanceof Object))throw new TypeError("Iterator result "+O+" is not an object");if(!O.done)return p.g.l=!1,O;var lt=O.value}catch(z){return p.g.i=null,At(p.g,z),$t(p)}return p.g.i=null,E.call(p.g,lt),$t(p)}function $t(p){for(;p.g.g;)try{var V=p.h(p.g);if(V)return p.g.l=!1,{value:V.value,done:!1}}catch(W){p.g.h=void 0,At(p.g,W)}if(p.g.l=!1,p.g.j){if(V=p.g.j,p.g.j=null,V.V)throw V.U;return{value:V.return,done:!0}}return{value:void 0,done:!0}}function An(p){this.next=function(V){return Lt(p.g),p.g.i?V=We(p,p.g.i.next,V,p.g.o):(p.g.o(V),V=$t(p)),V},this.throw=function(V){return Lt(p.g),p.g.i?V=We(p,p.g.i.throw,V,p.g.o):(At(p.g,V),V=$t(p)),V},this.return=function(V){return an(p,V)},this[Symbol.iterator]=function(){return this}}function de(p,V){return V=new An(new Ee(V)),dt&&p.prototype&&dt(V,p.prototype),V}function gt(p,V){p instanceof String&&(p+="");var W=0,E=!1,O={next:function(){if(!E&&W<p.length){var lt=W++;return{value:V(lt,p[lt]),done:!1}}return E=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var pn=typeof Object.assign=="function"?Object.assign:function(p,V){for(var W=1;W<arguments.length;W++){var E=arguments[W];if(E)for(var O in E)Object.prototype.hasOwnProperty.call(E,O)&&(p[O]=E[O])}return p};I("Object.assign",function(p){return p||pn}),I("Promise",function(p){function V(z){this.h=0,this.i=void 0,this.g=[],this.o=!1;var it=this.j();try{z(it.resolve,it.reject)}catch(bt){it.reject(bt)}}function W(){this.g=null}function E(z){return z instanceof V?z:new V(function(it){it(z)})}if(p)return p;W.prototype.h=function(z){if(this.g==null){this.g=[];var it=this;this.i(function(){it.l()})}this.g.push(z)};var O=y.setTimeout;W.prototype.i=function(z){O(z,0)},W.prototype.l=function(){for(;this.g&&this.g.length;){var z=this.g;this.g=[];for(var it=0;it<z.length;++it){var bt=z[it];z[it]=null;try{bt()}catch(It){this.j(It)}}}this.g=null},W.prototype.j=function(z){this.i(function(){throw z})},V.prototype.j=function(){function z(It){return function(Kt){bt||(bt=!0,It.call(it,Kt))}}var it=this,bt=!1;return{resolve:z(this.C),reject:z(this.l)}},V.prototype.C=function(z){if(z===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(z instanceof V)this.F(z);else{t:switch(typeof z){case"object":var it=z!=null;break t;case"function":it=!0;break t;default:it=!1}it?this.u(z):this.m(z)}},V.prototype.u=function(z){var it=void 0;try{it=z.then}catch(bt){this.l(bt);return}typeof it=="function"?this.G(it,z):this.m(z)},V.prototype.l=function(z){this.s(2,z)},V.prototype.m=function(z){this.s(1,z)},V.prototype.s=function(z,it){if(this.h!=0)throw Error("Cannot settle("+z+", "+it+"): Promise already settled in state"+this.h);this.h=z,this.i=it,this.h===2&&this.D(),this.A()},V.prototype.D=function(){var z=this;O(function(){if(z.B()){var it=y.console;typeof it<"u"&&it.error(z.i)}},1)},V.prototype.B=function(){if(this.o)return!1;var z=y.CustomEvent,it=y.Event,bt=y.dispatchEvent;return typeof bt>"u"?!0:(typeof z=="function"?z=new z("unhandledrejection",{cancelable:!0}):typeof it=="function"?z=new it("unhandledrejection",{cancelable:!0}):(z=y.document.createEvent("CustomEvent"),z.initCustomEvent("unhandledrejection",!1,!0,z)),z.promise=this,z.reason=this.i,bt(z))},V.prototype.A=function(){if(this.g!=null){for(var z=0;z<this.g.length;++z)lt.h(this.g[z]);this.g=null}};var lt=new W;return V.prototype.F=function(z){var it=this.j();z.J(it.resolve,it.reject)},V.prototype.G=function(z,it){var bt=this.j();try{z.call(it,bt.resolve,bt.reject)}catch(It){bt.reject(It)}},V.prototype.then=function(z,it){function bt(qt,Et){return typeof qt=="function"?function(wt){try{It(qt(wt))}catch(Ut){Kt(Ut)}}:Et}var It,Kt,kt=new V(function(qt,Et){It=qt,Kt=Et});return this.J(bt(z,It),bt(it,Kt)),kt},V.prototype.catch=function(z){return this.then(void 0,z)},V.prototype.J=function(z,it){function bt(){switch(It.h){case 1:z(It.i);break;case 2:it(It.i);break;default:throw Error("Unexpected state: "+It.h)}}var It=this;this.g==null?lt.h(bt):this.g.push(bt),this.o=!0},V.resolve=E,V.reject=function(z){return new V(function(it,bt){bt(z)})},V.race=function(z){return new V(function(it,bt){for(var It=Y(z),Kt=It.next();!Kt.done;Kt=It.next())E(Kt.value).J(it,bt)})},V.all=function(z){var it=Y(z),bt=it.next();return bt.done?E([]):new V(function(It,Kt){function kt(wt){return function(Ut){qt[wt]=Ut,Et--,Et==0&&It(qt)}}var qt=[],Et=0;do qt.push(void 0),Et++,E(bt.value).J(kt(qt.length-1),Kt),bt=it.next();while(!bt.done)})},V}),I("Object.is",function(p){return p||function(V,W){return V===W?V!==0||1/V===1/W:V!==V&&W!==W}}),I("Array.prototype.includes",function(p){return p||function(V,W){var E=this;E instanceof String&&(E=String(E));var O=E.length;for(W=W||0,0>W&&(W=Math.max(W+O,0));W<O;W++){var lt=E[W];if(lt===V||Object.is(lt,V))return!0}return!1}}),I("String.prototype.includes",function(p){return p||function(V,W){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(V instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(V,W||0)!==-1}}),I("Array.prototype.keys",function(p){return p||function(){return gt(this,function(V){return V})}});var jn=this||self;function Re(p,V){p=p.split(".");var W=jn;p[0]in W||typeof W.execScript>"u"||W.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||V===void 0?W[E]&&W[E]!==Object.prototype[E]?W=W[E]:W=W[E]={}:W[E]=V}function Jt(p,V){return V=String.fromCharCode.apply(null,V),p==null?V:p+V}var Te,on=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function xn(p){if(Hn)p=(Xn||(Xn=new TextEncoder)).encode(p);else{var V=void 0;V=V===void 0?!1:V;for(var W=0,E=new Uint8Array(3*p.length),O=0;O<p.length;O++){var lt=p.charCodeAt(O);if(128>lt)E[W++]=lt;else{if(2048>lt)E[W++]=lt>>6|192;else{if(55296<=lt&&57343>=lt){if(56319>=lt&&O<p.length){var z=p.charCodeAt(++O);if(56320<=z&&57343>=z){lt=1024*(lt-55296)+z-56320+65536,E[W++]=lt>>18|240,E[W++]=lt>>12&63|128,E[W++]=lt>>6&63|128,E[W++]=lt&63|128;continue}else O--}if(V)throw Error("Found an unpaired surrogate");lt=65533}E[W++]=lt>>12|224,E[W++]=lt>>6&63|128}E[W++]=lt&63|128}}p=E.subarray(0,W)}return p}var Nn={},dn=null;function bn(p,V){V===void 0&&(V=0),Pe(),V=Nn[V];for(var W=Array(Math.floor(p.length/3)),E=V[64]||"",O=0,lt=0;O<p.length-2;O+=3){var z=p[O],it=p[O+1],bt=p[O+2],It=V[z>>2];z=V[(z&3)<<4|it>>4],it=V[(it&15)<<2|bt>>6],bt=V[bt&63],W[lt++]=It+z+it+bt}switch(It=0,bt=E,p.length-O){case 2:It=p[O+1],bt=V[(It&15)<<2]||E;case 1:p=p[O],W[lt]=V[p>>2]+V[(p&3)<<4|It>>4]+bt+E}return W.join("")}function kn(p){var V=p.length,W=3*V/4;W%3?W=Math.floor(W):"=.".indexOf(p[V-1])!=-1&&(W="=.".indexOf(p[V-2])!=-1?W-2:W-1);var E=new Uint8Array(W),O=0;return Fn(p,function(lt){E[O++]=lt}),E.subarray(0,O)}function Fn(p,V){function W(bt){for(;E<p.length;){var It=p.charAt(E++),Kt=dn[It];if(Kt!=null)return Kt;if(!/^[\s\xa0]*$/.test(It))throw Error("Unknown base64 encoding at char: "+It)}return bt}Pe();for(var E=0;;){var O=W(-1),lt=W(0),z=W(64),it=W(64);if(it===64&&O===-1)break;V(O<<2|lt>>4),z!=64&&(V(lt<<4&240|z>>2),it!=64&&V(z<<6&192|it))}}function Pe(){if(!dn){dn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),V=["+/=","+/","-_=","-_.","-_"],W=0;5>W;W++){var E=p.concat(V[W].split(""));Nn[W]=E;for(var O=0;O<E.length;O++){var lt=E[O];dn[lt]===void 0&&(dn[lt]=O)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",In;function Vn(p,V,W){return V===W?In||(In=new Uint8Array(0)):Ae?p.slice(V,W):new Uint8Array(p.subarray(V,W))}var he=0,Ye=0;function Oe(p,V){V=V===void 0?{}:V,V=V.v===void 0?!1:V.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=V,p&&ne(this,p)}function ne(p,V){V=V.constructor===Uint8Array?V:V.constructor===ArrayBuffer?new Uint8Array(V):V.constructor===Array?new Uint8Array(V):V.constructor===String?kn(V):V instanceof Uint8Array?new Uint8Array(V.buffer,V.byteOffset,V.byteLength):new Uint8Array(0),p.h=V,p.j=0,p.i=p.h.length,p.g=p.j}Oe.prototype.reset=function(){this.g=this.j};function Ve(p){var V=p.h,W=V[p.g],E=W&127;return 128>W?(p.g+=1,E):(W=V[p.g+1],E|=(W&127)<<7,128>W?(p.g+=2,E):(W=V[p.g+2],E|=(W&127)<<14,128>W?(p.g+=3,E):(W=V[p.g+3],E|=(W&127)<<21,128>W?(p.g+=4,E):(W=V[p.g+4],E|=(W&15)<<28,128>W?(p.g+=5,E>>>0):(p.g+=5,128<=V[p.g++]&&128<=V[p.g++]&&128<=V[p.g++]&&128<=V[p.g++]&&p.g++,E)))))}function sn(p){var V=p.h[p.g],W=p.h[p.g+1],E=p.h[p.g+2],O=p.h[p.g+3];return p.g+=4,W=(V<<0|W<<8|E<<16|O<<24)>>>0,p=2*(W>>31)+1,V=W>>>23&255,W&=8388607,V==255?W?NaN:1/0*p:V==0?p*Math.pow(2,-149)*W:p*Math.pow(2,V-150)*(W+Math.pow(2,23))}var Me=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var V=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(V)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,V=this.h;return this.h=0,Vn(p,0,V)};function Ze(p,V){for(;127<V;)p.push(V&127|128),V>>>=7;p.push(V)}function Ce(p){var V={},W=V.N===void 0?!1:V.N;this.o={v:V.v===void 0?!1:V.v},this.N=W,V=this.o,Me.length?(W=Me.pop(),V&&(W.v=V.v),p&&ne(W,p),p=W):p=new Oe(p,V),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Bt(p){var V=p.g;if((V=V.g==V.i)||(V=p.j)||(V=p.g,V=V.l||0>V.g||V.g>V.i),V)return!1;p.m=p.g.g,V=Ve(p.g);var W=V&7;return W!=0&&W!=5&&W!=1&&W!=2&&W!=3&&W!=4?(p.j=!0,!1):(p.i=V,p.l=V>>>3,p.h=W,!0)}function Ie(p){switch(p.h){case 0:if(p.h!=0)Ie(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?Ie(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)Ie(p);else{var V=Ve(p.g);p=p.g,p.g+=V}break;case 5:p.h!=5?Ie(p):(p=p.g,p.g+=4);break;case 3:V=p.l;do{if(!Bt(p)){p.j=!0;break}if(p.h==4){p.l!=V&&(p.j=!0);break}Ie(p)}while(1);break;default:p.j=!0}}function zt(p,V,W){var E=p.g.i,O=Ve(p.g);return O=p.g.g+O,p.g.i=O,W(V,p),p.g.g=O,p.g.i=E,V}function ye(p){var V=Ve(p.g);p=p.g;var W=p.g;p.g+=V,p=p.h;var E;if(on)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(W,W+V));else{V=W+V;for(var O=[],lt=null,z,it,bt;W<V;)z=p[W++],128>z?O.push(z):224>z?W>=V?O.push(65533):(it=p[W++],194>z||(it&192)!==128?(W--,O.push(65533)):O.push((z&31)<<6|it&63)):240>z?W>=V-1?O.push(65533):(it=p[W++],(it&192)!==128||z===224&&160>it||z===237&&160<=it||((E=p[W++])&192)!==128?(W--,O.push(65533)):O.push((z&15)<<12|(it&63)<<6|E&63)):244>=z?W>=V-2?O.push(65533):(it=p[W++],(it&192)!==128||(z<<28)+(it-144)>>30!==0||((E=p[W++])&192)!==128||((bt=p[W++])&192)!==128?(W--,O.push(65533)):(z=(z&7)<<18|(it&63)<<12|(E&63)<<6|bt&63,z-=65536,O.push((z>>10&1023)+55296,(z&1023)+56320))):O.push(65533),8192<=O.length&&(lt=Jt(lt,O),O.length=0);E=Jt(lt,O)}return E}function we(){this.h=[],this.i=0,this.g=new Qt}function $e(p,V){V.length!==0&&(p.h.push(V),p.i+=V.length)}function Xe(p){var V=p.i+p.g.length();if(V===0)return new Uint8Array(0);V=new Uint8Array(V);for(var W=p.h,E=W.length,O=0,lt=0;lt<E;lt++){var z=W[lt];z.length!==0&&(V.set(z,O),O+=z.length)}return W=p.g,E=W.h,E!==0&&(V.set(W.g.subarray(0,E),O),W.h=0),p.h=[V],V}function Pt(p,V,W){if(W!=null){Ze(p.g,8*V+5),p=p.g;var E=W;E=(W=0>E?1:0)?-E:E,E===0?0<1/E?he=Ye=0:(Ye=0,he=2147483648):isNaN(E)?(Ye=0,he=2147483647):34028234663852886e22<E?(Ye=0,he=(W<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Ye=0,he=(W<<31|E)>>>0):(V=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-V),E=Math.round(8388608*E)&8388607,Ye=0,he=(W<<31|V+127<<23|E)>>>0),W=he,p.push(W>>>0&255),p.push(W>>>8&255),p.push(W>>>16&255),p.push(W>>>24&255)}}var je=typeof Uint8Array=="function";function _e(p,V,W){if(p!=null)return typeof p=="object"?je&&p instanceof Uint8Array?W(p):Se(p,V,W):V(p)}function Se(p,V,W){if(Array.isArray(p)){for(var E=Array(p.length),O=0;O<p.length;O++)E[O]=_e(p[O],V,W);return Array.isArray(p)&&p.W&&Qe(E),E}E={};for(O in p)E[O]=_e(p[O],V,W);return E}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var ln={W:{value:!0,configurable:!0}};function Qe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,ln),p}var un;function ve(p,V,W){var E=un;un=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}V!==void 0&&-1<V?(this.l=Math.max(V,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(W)for(V=0;V<W.length;V++)p=W[V],p<this.l?(p+=this.j,(E=this.g[p])?Qe(E):this.g[p]=Le):(Ge(this),(E=this.h[p])?Qe(E):this.h[p]=Le)}var Le=Object.freeze(Qe([]));function Ge(p){var V=p.l+p.j;p.g[V]||(p.h=p.g[V]={})}function re(p,V,W){return V===-1?null:(W===void 0?0:W)||V>=p.l?p.h?p.h[V]:void 0:p.g[V+p.j]}function De(p){var V=V===void 0?!1:V,W=re(p,1,V);return W==null&&(W=Le),W===Le&&(W=Qe([]),Ot(p,1,W,V)),W}function te(p,V,W){return p=re(p,V),p=p==null?p:+p,p==null?W===void 0?0:W:p}function Ot(p,V,W,E){(E===void 0?0:E)||V>=p.l?(Ge(p),p.h[V]=W):p.g[V+p.j]=W}function hn(p,V){p.i||(p.i={});var W=p.i[1];if(!W){var E=De(p);W=[];for(var O=0;O<E.length;O++)W[O]=new V(E[O]);p.i[1]=W}return W}function fe(p,V,W,E){var O=hn(p,W);V=V||new W,p=De(p),E!=null?(O.splice(E,0,V),p.splice(E,0,Nt(V))):(O.push(V),p.push(Nt(V)))}ve.prototype.toJSON=function(){var p=Nt(this);return Se(p,Wn,bn)};function Nt(p,V){if(p.i)for(var W in p.i){var E=p.i[W];if(Array.isArray(E))for(var O=0;O<E.length;O++)E[O]&&Nt(E[O]);else E&&Nt(E)}return p.g}ve.prototype.toString=function(){return Nt(this).toString()};function Wt(p,V){return p=re(p,V),p==null?0:p}function ie(p,V){return p=re(p,V),p==null?"":p}function He(p,V){if(p=p.m){$e(V,V.g.end());for(var W=0;W<p.length;W++)$e(V,p[W])}}function ee(p,V){if(V.h==4)return!1;var W=V.m;return Ie(V),V.N||(V=Vn(V.g.h,W,V.g.g),(W=p.m)?W.push(V):p.m=[V]),!0}function oe(p,V){var W=void 0;return new(W||(W=Promise))(function(E,O){function lt(bt){try{it(V.next(bt))}catch(It){O(It)}}function z(bt){try{it(V.throw(bt))}catch(It){O(It)}}function it(bt){bt.done?E(bt.value):new W(function(It){It(bt.value)}).then(lt,z)}it((V=V.apply(p,void 0)).next())})}function et(p){ve.call(this,p)}ht(et,ve);function ot(p,V){for(;Bt(V);)switch(V.i){case 8:var W=Ve(V.g);Ot(p,1,W);break;case 21:W=sn(V.g),Ot(p,2,W);break;case 26:W=ye(V),Ot(p,3,W);break;case 34:W=ye(V),Ot(p,4,W);break;default:if(!ee(p,V))return p}return p}function at(p){ve.call(this,p,-1,_t)}ht(at,ve),at.prototype.addClassification=function(p,V){fe(this,p,et,V)};var _t=[1];function ae(p){ve.call(this,p)}ht(ae,ve);function ue(p,V){for(;Bt(V);)switch(V.i){case 13:var W=sn(V.g);Ot(p,1,W);break;case 21:W=sn(V.g),Ot(p,2,W);break;case 29:W=sn(V.g),Ot(p,3,W);break;case 37:W=sn(V.g),Ot(p,4,W);break;case 45:W=sn(V.g),Ot(p,5,W);break;default:if(!ee(p,V))return p}return p}function Tt(p){ve.call(this,p,-1,me)}ht(Tt,ve);var me=[1];function Ne(p){ve.call(this,p)}ht(Ne,ve);function qe(p,V,W){if(W=p.createShader(W===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(W,V),p.compileShader(W),!p.getShaderParameter(W,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
1
|
+
(function(ze,qn){typeof exports=="object"&&typeof module<"u"?qn(exports):typeof define=="function"&&define.amd?define(["exports"],qn):(ze=typeof globalThis<"u"?globalThis:ze||self,qn(ze["ml-transformers"]={}))})(this,function(ze){"use strict";var rd=Object.defineProperty;var id=(ze,qn,On)=>qn in ze?rd(ze,qn,{enumerable:!0,configurable:!0,writable:!0,value:On}):ze[qn]=On;var Rt=(ze,qn,On)=>(id(ze,typeof qn!="symbol"?qn+"":qn,On),On);function qn(){return new Promise((o,n)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?n("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):o()})}class On{}On.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},On.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"};var _i={exports:{}},os=function(n,r){return function(){for(var y=new Array(arguments.length),I=0;I<y.length;I++)y[I]=arguments[I];return n.apply(r,y)}},gu=os,ur=Object.prototype.toString;function Qi(o){return Array.isArray(o)}function Di(o){return typeof o>"u"}function Zu(o){return o!==null&&!Di(o)&&o.constructor!==null&&!Di(o.constructor)&&typeof o.constructor.isBuffer=="function"&&o.constructor.isBuffer(o)}function ss(o){return ur.call(o)==="[object ArrayBuffer]"}function vu(o){return ur.call(o)==="[object FormData]"}function Gu(o){var n;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?n=ArrayBuffer.isView(o):n=o&&o.buffer&&ss(o.buffer),n}function Xu(o){return typeof o=="string"}function Vu(o){return typeof o=="number"}function ls(o){return o!==null&&typeof o=="object"}function qr(o){if(ur.call(o)!=="[object Object]")return!1;var n=Object.getPrototypeOf(o);return n===null||n===Object.prototype}function Wu(o){return ur.call(o)==="[object Date]"}function Ru(o){return ur.call(o)==="[object File]"}function xu(o){return ur.call(o)==="[object Blob]"}function us(o){return ur.call(o)==="[object Function]"}function Iu(o){return ls(o)&&us(o.pipe)}function Su(o){return ur.call(o)==="[object URLSearchParams]"}function Yu(o){return o.trim?o.trim():o.replace(/^\s+|\s+$/g,"")}function Tu(){return typeof navigator<"u"&&(navigator.product==="ReactNative"||navigator.product==="NativeScript"||navigator.product==="NS")?!1:typeof window<"u"&&typeof document<"u"}function $i(o,n){if(!(o===null||typeof o>"u"))if(typeof o!="object"&&(o=[o]),Qi(o))for(var r=0,m=o.length;r<m;r++)n.call(null,o[r],r,o);else for(var y in o)Object.prototype.hasOwnProperty.call(o,y)&&n.call(null,o[y],y,o)}function qi(){var o={};function n(y,I){qr(o[I])&&qr(y)?o[I]=qi(o[I],y):qr(y)?o[I]=qi({},y):Qi(y)?o[I]=y.slice():o[I]=y}for(var r=0,m=arguments.length;r<m;r++)$i(arguments[r],n);return o}function wu(o,n,r){return $i(n,function(y,I){r&&typeof y=="function"?o[I]=gu(y,r):o[I]=y}),o}function Lu(o){return o.charCodeAt(0)===65279&&(o=o.slice(1)),o}var Qn={isArray:Qi,isArrayBuffer:ss,isBuffer:Zu,isFormData:vu,isArrayBufferView:Gu,isString:Xu,isNumber:Vu,isObject:ls,isPlainObject:qr,isUndefined:Di,isDate:Wu,isFile:Ru,isBlob:xu,isFunction:us,isStream:Iu,isURLSearchParams:Su,isStandardBrowserEnv:Tu,forEach:$i,merge:qi,extend:wu,trim:Yu,stripBOM:Lu},Ir=Qn;function cs(o){return encodeURIComponent(o).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var as=function(n,r,m){if(!r)return n;var y;if(m)y=m(r);else if(Ir.isURLSearchParams(r))y=r.toString();else{var I=[];Ir.forEach(r,function(k,et){k===null||typeof k>"u"||(Ir.isArray(k)?et=et+"[]":k=[k],Ir.forEach(k,function(st){Ir.isDate(st)?st=st.toISOString():Ir.isObject(st)&&(st=JSON.stringify(st)),I.push(cs(et)+"="+cs(st))}))}),y=I.join("&")}if(y){var F=n.indexOf("#");F!==-1&&(n=n.slice(0,F)),n+=(n.indexOf("?")===-1?"?":"&")+y}return n},Fu=Qn;function ti(){this.handlers=[]}ti.prototype.use=function(n,r,m){return this.handlers.push({fulfilled:n,rejected:r,synchronous:m?m.synchronous:!1,runWhen:m?m.runWhen:null}),this.handlers.length-1},ti.prototype.eject=function(n){this.handlers[n]&&(this.handlers[n]=null)},ti.prototype.forEach=function(n){Fu.forEach(this.handlers,function(m){m!==null&&n(m)})};var Hu=ti,Cu=Qn,Nu=function(n,r){Cu.forEach(n,function(y,I){I!==r&&I.toUpperCase()===r.toUpperCase()&&(n[r]=y,delete n[I])})},ds=function(n,r,m,y,I){return n.config=r,m&&(n.code=m),n.request=y,n.response=I,n.isAxiosError=!0,n.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},n},Ju=ds,hs=function(n,r,m,y,I){var F=new Error(n);return Ju(F,r,m,y,I)},ku=hs,Eu=function(n,r,m){var y=m.config.validateStatus;!m.status||!y||y(m.status)?n(m):r(ku("Request failed with status code "+m.status,m.config,null,m.request,m))},ei=Qn,Ku=ei.isStandardBrowserEnv()?function(){return{write:function(r,m,y,I,F,Y){var k=[];k.push(r+"="+encodeURIComponent(m)),ei.isNumber(y)&&k.push("expires="+new Date(y).toGMTString()),ei.isString(I)&&k.push("path="+I),ei.isString(F)&&k.push("domain="+F),Y===!0&&k.push("secure"),document.cookie=k.join("; ")},read:function(r){var m=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return m?decodeURIComponent(m[3]):null},remove:function(r){this.write(r,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}(),Uu=function(n){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)},Mu=function(n,r){return r?n.replace(/\/+$/,"")+"/"+r.replace(/^\/+/,""):n},Bu=Uu,Au=Mu,ju=function(n,r){return n&&!Bu(r)?Au(n,r):r},to=Qn,zu=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],Ou=function(n){var r={},m,y,I;return n&&to.forEach(n.split(`
|
|
2
|
+
`),function(Y){if(I=Y.indexOf(":"),m=to.trim(Y.substr(0,I)).toLowerCase(),y=to.trim(Y.substr(I+1)),m){if(r[m]&&zu.indexOf(m)>=0)return;m==="set-cookie"?r[m]=(r[m]?r[m]:[]).concat([y]):r[m]=r[m]?r[m]+", "+y:y}}),r},fs=Qn,Pu=fs.isStandardBrowserEnv()?function(){var n=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a"),m;function y(I){var F=I;return n&&(r.setAttribute("href",F),F=r.href),r.setAttribute("href",F),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return m=y(window.location.href),function(F){var Y=fs.isString(F)?y(F):F;return Y.protocol===m.protocol&&Y.host===m.host}}():function(){return function(){return!0}}();function eo(o){this.message=o}eo.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},eo.prototype.__CANCEL__=!0;var ni=eo,ri=Qn,_u=Eu,Qu=Ku,Du=as,$u=ju,qu=Ou,tc=Pu,no=hs,ec=oi,nc=ni,ms=function(n){return new Promise(function(m,y){var I=n.data,F=n.headers,Y=n.responseType,k;function et(){n.cancelToken&&n.cancelToken.unsubscribe(k),n.signal&&n.signal.removeEventListener("abort",k)}ri.isFormData(I)&&delete F["Content-Type"];var O=new XMLHttpRequest;if(n.auth){var st=n.auth.username||"",xt=n.auth.password?unescape(encodeURIComponent(n.auth.password)):"";F.Authorization="Basic "+btoa(st+":"+xt)}var Vt=$u(n.baseURL,n.url);O.open(n.method.toUpperCase(),Du(Vt,n.params,n.paramsSerializer),!0),O.timeout=n.timeout;function dt(){if(!!O){var Ht="getAllResponseHeaders"in O?qu(O.getAllResponseHeaders()):null,Lt=!Y||Y==="text"||Y==="json"?O.responseText:O.response,At={data:Lt,status:O.status,statusText:O.statusText,headers:Ht,config:n,request:O};_u(function(Ee){m(Ee),et()},function(Ee){y(Ee),et()},At),O=null}}if("onloadend"in O?O.onloadend=dt:O.onreadystatechange=function(){!O||O.readyState!==4||O.status===0&&!(O.responseURL&&O.responseURL.indexOf("file:")===0)||setTimeout(dt)},O.onabort=function(){!O||(y(no("Request aborted",n,"ECONNABORTED",O)),O=null)},O.onerror=function(){y(no("Network Error",n,null,O)),O=null},O.ontimeout=function(){var Lt=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded",At=n.transitional||ec.transitional;n.timeoutErrorMessage&&(Lt=n.timeoutErrorMessage),y(no(Lt,n,At.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",O)),O=null},ri.isStandardBrowserEnv()){var ht=(n.withCredentials||tc(Vt))&&n.xsrfCookieName?Qu.read(n.xsrfCookieName):void 0;ht&&(F[n.xsrfHeaderName]=ht)}"setRequestHeader"in O&&ri.forEach(F,function(Lt,At){typeof I>"u"&&At.toLowerCase()==="content-type"?delete F[At]:O.setRequestHeader(At,Lt)}),ri.isUndefined(n.withCredentials)||(O.withCredentials=!!n.withCredentials),Y&&Y!=="json"&&(O.responseType=n.responseType),typeof n.onDownloadProgress=="function"&&O.addEventListener("progress",n.onDownloadProgress),typeof n.onUploadProgress=="function"&&O.upload&&O.upload.addEventListener("progress",n.onUploadProgress),(n.cancelToken||n.signal)&&(k=function(Ht){!O||(y(!Ht||Ht&&Ht.type?new nc("canceled"):Ht),O.abort(),O=null)},n.cancelToken&&n.cancelToken.subscribe(k),n.signal&&(n.signal.aborted?k():n.signal.addEventListener("abort",k))),I||(I=null),O.send(I)})},Kn=Qn,ps=Nu,rc=ds,ic={"Content-Type":"application/x-www-form-urlencoded"};function bs(o,n){!Kn.isUndefined(o)&&Kn.isUndefined(o["Content-Type"])&&(o["Content-Type"]=n)}function oc(){var o;return(typeof XMLHttpRequest<"u"||typeof process<"u"&&Object.prototype.toString.call(process)==="[object process]")&&(o=ms),o}function sc(o,n,r){if(Kn.isString(o))try{return(n||JSON.parse)(o),Kn.trim(o)}catch(m){if(m.name!=="SyntaxError")throw m}return(r||JSON.stringify)(o)}var ii={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:oc(),transformRequest:[function(n,r){return ps(r,"Accept"),ps(r,"Content-Type"),Kn.isFormData(n)||Kn.isArrayBuffer(n)||Kn.isBuffer(n)||Kn.isStream(n)||Kn.isFile(n)||Kn.isBlob(n)?n:Kn.isArrayBufferView(n)?n.buffer:Kn.isURLSearchParams(n)?(bs(r,"application/x-www-form-urlencoded;charset=utf-8"),n.toString()):Kn.isObject(n)||r&&r["Content-Type"]==="application/json"?(bs(r,"application/json"),sc(n)):n}],transformResponse:[function(n){var r=this.transitional||ii.transitional,m=r&&r.silentJSONParsing,y=r&&r.forcedJSONParsing,I=!m&&this.responseType==="json";if(I||y&&Kn.isString(n)&&n.length)try{return JSON.parse(n)}catch(F){if(I)throw F.name==="SyntaxError"?rc(F,this,"E_JSON_PARSE"):F}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(n){return n>=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Kn.forEach(["delete","get","head"],function(n){ii.headers[n]={}}),Kn.forEach(["post","put","patch"],function(n){ii.headers[n]=Kn.merge(ic)});var oi=ii,lc=Qn,uc=oi,cc=function(n,r,m){var y=this||uc;return lc.forEach(m,function(F){n=F.call(y,n,r)}),n},ys=function(n){return!!(n&&n.__CANCEL__)},gs=Qn,ro=cc,ac=ys,dc=oi,hc=ni;function io(o){if(o.cancelToken&&o.cancelToken.throwIfRequested(),o.signal&&o.signal.aborted)throw new hc("canceled")}var fc=function(n){io(n),n.headers=n.headers||{},n.data=ro.call(n,n.data,n.headers,n.transformRequest),n.headers=gs.merge(n.headers.common||{},n.headers[n.method]||{},n.headers),gs.forEach(["delete","get","head","post","put","patch","common"],function(y){delete n.headers[y]});var r=n.adapter||dc.adapter;return r(n).then(function(y){return io(n),y.data=ro.call(n,y.data,y.headers,n.transformResponse),y},function(y){return ac(y)||(io(n),y&&y.response&&(y.response.data=ro.call(n,y.response.data,y.response.headers,n.transformResponse))),Promise.reject(y)})},tr=Qn,Zs=function(n,r){r=r||{};var m={};function y(O,st){return tr.isPlainObject(O)&&tr.isPlainObject(st)?tr.merge(O,st):tr.isPlainObject(st)?tr.merge({},st):tr.isArray(st)?st.slice():st}function I(O){if(tr.isUndefined(r[O])){if(!tr.isUndefined(n[O]))return y(void 0,n[O])}else return y(n[O],r[O])}function F(O){if(!tr.isUndefined(r[O]))return y(void 0,r[O])}function Y(O){if(tr.isUndefined(r[O])){if(!tr.isUndefined(n[O]))return y(void 0,n[O])}else return y(void 0,r[O])}function k(O){if(O in r)return y(n[O],r[O]);if(O in n)return y(void 0,n[O])}var et={url:F,method:F,data:F,baseURL:Y,transformRequest:Y,transformResponse:Y,paramsSerializer:Y,timeout:Y,timeoutMessage:Y,withCredentials:Y,adapter:Y,responseType:Y,xsrfCookieName:Y,xsrfHeaderName:Y,onUploadProgress:Y,onDownloadProgress:Y,decompress:Y,maxContentLength:Y,maxBodyLength:Y,transport:Y,httpAgent:Y,httpsAgent:Y,cancelToken:Y,socketPath:Y,responseEncoding:Y,validateStatus:k};return tr.forEach(Object.keys(n).concat(Object.keys(r)),function(st){var xt=et[st]||I,Vt=xt(st);tr.isUndefined(Vt)&&xt!==k||(m[st]=Vt)}),m},vs={version:"0.25.0"},mc=vs.version,oo={};["object","boolean","number","function","string","symbol"].forEach(function(o,n){oo[o]=function(m){return typeof m===o||"a"+(n<1?"n ":" ")+o}});var Gs={};oo.transitional=function(n,r,m){function y(I,F){return"[Axios v"+mc+"] Transitional option '"+I+"'"+F+(m?". "+m:"")}return function(I,F,Y){if(n===!1)throw new Error(y(F," has been removed"+(r?" in "+r:"")));return r&&!Gs[F]&&(Gs[F]=!0,console.warn(y(F," has been deprecated since v"+r+" and will be removed in the near future"))),n?n(I,F,Y):!0}};function pc(o,n,r){if(typeof o!="object")throw new TypeError("options must be an object");for(var m=Object.keys(o),y=m.length;y-- >0;){var I=m[y],F=n[I];if(F){var Y=o[I],k=Y===void 0||F(Y,I,o);if(k!==!0)throw new TypeError("option "+I+" must be "+k);continue}if(r!==!0)throw Error("Unknown option "+I)}}var bc={assertOptions:pc,validators:oo},Xs=Qn,yc=as,Vs=Hu,Ws=fc,si=Zs,Rs=bc,Sr=Rs.validators;function Er(o){this.defaults=o,this.interceptors={request:new Vs,response:new Vs}}Er.prototype.request=function(n,r){if(typeof n=="string"?(r=r||{},r.url=n):r=n||{},!r.url)throw new Error("Provided config url is not valid");r=si(this.defaults,r),r.method?r.method=r.method.toLowerCase():this.defaults.method?r.method=this.defaults.method.toLowerCase():r.method="get";var m=r.transitional;m!==void 0&&Rs.assertOptions(m,{silentJSONParsing:Sr.transitional(Sr.boolean),forcedJSONParsing:Sr.transitional(Sr.boolean),clarifyTimeoutError:Sr.transitional(Sr.boolean)},!1);var y=[],I=!0;this.interceptors.request.forEach(function(Vt){typeof Vt.runWhen=="function"&&Vt.runWhen(r)===!1||(I=I&&Vt.synchronous,y.unshift(Vt.fulfilled,Vt.rejected))});var F=[];this.interceptors.response.forEach(function(Vt){F.push(Vt.fulfilled,Vt.rejected)});var Y;if(!I){var k=[Ws,void 0];for(Array.prototype.unshift.apply(k,y),k=k.concat(F),Y=Promise.resolve(r);k.length;)Y=Y.then(k.shift(),k.shift());return Y}for(var et=r;y.length;){var O=y.shift(),st=y.shift();try{et=O(et)}catch(xt){st(xt);break}}try{Y=Ws(et)}catch(xt){return Promise.reject(xt)}for(;F.length;)Y=Y.then(F.shift(),F.shift());return Y},Er.prototype.getUri=function(n){if(!n.url)throw new Error("Provided config url is not valid");return n=si(this.defaults,n),yc(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},Xs.forEach(["delete","get","head","options"],function(n){Er.prototype[n]=function(r,m){return this.request(si(m||{},{method:n,url:r,data:(m||{}).data}))}}),Xs.forEach(["post","put","patch"],function(n){Er.prototype[n]=function(r,m,y){return this.request(si(y||{},{method:n,url:r,data:m}))}});var gc=Er,Zc=ni;function Yr(o){if(typeof o!="function")throw new TypeError("executor must be a function.");var n;this.promise=new Promise(function(y){n=y});var r=this;this.promise.then(function(m){if(!!r._listeners){var y,I=r._listeners.length;for(y=0;y<I;y++)r._listeners[y](m);r._listeners=null}}),this.promise.then=function(m){var y,I=new Promise(function(F){r.subscribe(F),y=F}).then(m);return I.cancel=function(){r.unsubscribe(y)},I},o(function(y){r.reason||(r.reason=new Zc(y),n(r.reason))})}Yr.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Yr.prototype.subscribe=function(n){if(this.reason){n(this.reason);return}this._listeners?this._listeners.push(n):this._listeners=[n]},Yr.prototype.unsubscribe=function(n){if(!!this._listeners){var r=this._listeners.indexOf(n);r!==-1&&this._listeners.splice(r,1)}},Yr.source=function(){var n,r=new Yr(function(y){n=y});return{token:r,cancel:n}};var vc=Yr,Gc=function(n){return function(m){return n.apply(null,m)}},Xc=Qn,Vc=function(n){return Xc.isObject(n)&&n.isAxiosError===!0},xs=Qn,Wc=os,li=gc,Rc=Zs,xc=oi;function Is(o){var n=new li(o),r=Wc(li.prototype.request,n);return xs.extend(r,li.prototype,n),xs.extend(r,n),r.create=function(y){return Is(Rc(o,y))},r}var or=Is(xc);or.Axios=li,or.Cancel=ni,or.CancelToken=vc,or.isCancel=ys,or.VERSION=vs.version,or.all=function(n){return Promise.all(n)},or.spread=Gc,or.isAxiosError=Vc,_i.exports=or,_i.exports.default=or;var Ic=_i.exports;class xe{isEmpty(){return!this.isPresent()}static of(n){if(n!=null)return new Ss(n);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(n){return xe.of(n)}static ofNullable(n){return n!=null?new Ss(n):new Ys}static empty(){return new Ys}static from(n){switch(n.kind){case"present":return xe.of(n.value);case"empty":return xe.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class Ss extends xe{constructor(n){super(),this.payload=n}isPresent(){return!0}get(){return this.payload}ifPresent(n){n(this.payload)}ifPresentOrElse(n,r){n(this.payload)}filter(n){return n(this.payload)?this:xe.empty()}map(n){const r=n(this.payload);return xe.ofNullable(r)}flatMap(n){return n(this.payload)}or(n){return this}orElse(n){return this.payload}orElseGet(n){return this.payload}orElseThrow(n){return this.payload}orNull(){return this.payload}orUndefined(){return this.payload}toOption(){return{kind:"present",value:this.payload}}matches(n){return n.present(this.payload)}toJSON(n){return this.payload}}class Ys extends xe{isPresent(){return!1}constructor(){super()}get(){throw new TypeError("The optional is not present.")}ifPresent(n){}ifPresentOrElse(n,r){r()}filter(n){return this}map(n){return xe.empty()}flatMap(n){return xe.empty()}or(n){return n()}orElse(n){return n}orElseGet(n){return this.orElse(n())}orElseThrow(n){throw n()}orNull(){return null}orUndefined(){}toOption(){return{kind:"empty"}}matches(n){return n.empty()}toJSON(n){return null}}const Sc="2.0.0";function Yc(o){globalThis._vonageMediaProcessorMetadata=o}function Ts(){return globalThis._vonageMediaProcessorMetadata}class er{constructor(){const n=Ts();this._report={action:xe.empty(),applicationId:xe.ofNullable(n!==void 0&&n!=null?n.appId:null),timestamp:Date.now(),fps:xe.empty(),framesTransformed:xe.empty(),guid:xe.empty(),highestFrameTransformCpu:xe.empty(),message:xe.empty(),source:xe.ofNullable(n!==void 0&&n!=null?n.sourceType:null),transformedFps:xe.empty(),transformerType:xe.empty(),variation:xe.empty(),videoHeight:xe.empty(),videoWidth:xe.empty(),version:Sc,error:xe.empty(),proxyUrl:xe.ofNullable(n!==void 0&&n!=null?n.proxyUrl:null)}}action(n){return this._report.action=xe.ofNullable(n),this}framesTransformed(n){return this._report.framesTransformed=xe.ofNullable(n),this}fps(n){return this._report.fps=xe.ofNullable(n),this}guid(n){return this._report.guid=xe.ofNullable(n),this}message(n){return this._report.message=xe.ofNullable(n),this}transformedFps(n){return this._report.transformedFps=xe.ofNullable(n),this}transformerType(n){return this._report.transformerType=xe.ofNullable(n),this}variation(n){return this._report.variation=xe.ofNullable(n),this}videoHeight(n){return this._report.videoHeight=xe.ofNullable(n),this}videoWidth(n){return this._report.videoWidth=xe.ofNullable(n),this}error(n){return this._report.error=xe.ofNullable(n),this}build(){return this._report}}const Tc=o=>JSON.stringify(o,(n,r)=>{if(r!==null)return r});class nr{static report(n){return new Promise((r,m)=>{if(n.applicationId.isEmpty()||n.source.isEmpty()){r("success");return}let y=Ic.create(),I={timeout:1e4,timeoutErrorMessage:"Request timeout",headers:{"Content-Type":"application/json"}},F="hlg.tokbox.com/prod/logging/vcp_webrtc";if(n.proxyUrl.isEmpty())F="https://"+F;else{let Y;n.proxyUrl.get().slice(n.proxyUrl.get().length-1)!=="/"?Y=n.proxyUrl.get()+"/":Y=n.proxyUrl.get(),F=Y+F}y.post(F,Tc(n),I).then(Y=>{console.log(Y),r("success")}).catch(Y=>{console.log(Y),m(Y)})})}}var ui,wc=new Uint8Array(16);function Lc(){if(!ui&&(ui=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!ui))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ui(wc)}var Fc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Hc(o){return typeof o=="string"&&Fc.test(o)}for(var Un=[],so=0;so<256;++so)Un.push((so+256).toString(16).substr(1));function Cc(o){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=(Un[o[n+0]]+Un[o[n+1]]+Un[o[n+2]]+Un[o[n+3]]+"-"+Un[o[n+4]]+Un[o[n+5]]+"-"+Un[o[n+6]]+Un[o[n+7]]+"-"+Un[o[n+8]]+Un[o[n+9]]+"-"+Un[o[n+10]]+Un[o[n+11]]+Un[o[n+12]]+Un[o[n+13]]+Un[o[n+14]]+Un[o[n+15]]).toLowerCase();if(!Hc(r))throw TypeError("Stringified UUID is invalid");return r}function ws(o,n,r){o=o||{};var m=o.random||(o.rng||Lc)();if(m[6]=m[6]&15|64,m[8]=m[8]&63|128,n){r=r||0;for(var y=0;y<16;++y)n[r+y]=m[y];return n}return Cc(m)}const cr=new WeakMap,ci=new WeakMap,Kr=new WeakMap,lo=Symbol("anyProducer"),Ls=Promise.resolve(),ai=Symbol("listenerAdded"),di=Symbol("listenerRemoved");let uo=!1;function Tr(o){if(typeof o!="string"&&typeof o!="symbol")throw new TypeError("eventName must be a string or a symbol")}function hi(o){if(typeof o!="function")throw new TypeError("listener must be a function")}function wr(o,n){const r=ci.get(o);return r.has(n)||r.set(n,new Set),r.get(n)}function Ur(o,n){const r=typeof n=="string"||typeof n=="symbol"?n:lo,m=Kr.get(o);return m.has(r)||m.set(r,new Set),m.get(r)}function Nc(o,n,r){const m=Kr.get(o);if(m.has(n))for(const y of m.get(n))y.enqueue(r);if(m.has(lo)){const y=Promise.all([n,r]);for(const I of m.get(lo))I.enqueue(y)}}function Fs(o,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},y=[];const I={enqueue(F){y.push(F),m()},finish(){r=!0,m()}};for(const F of n)Ur(o,F).add(I);return{async next(){return y?y.length===0?r?(y=void 0,this.next()):(await new Promise(F=>{m=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const Y of n)Ur(o,Y).delete(I);return m(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Hs(o){if(o===void 0)return Cs;if(!Array.isArray(o))throw new TypeError("`methodNames` must be an array of strings");for(const n of o)if(!Cs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return o}const co=o=>o===ai||o===di;class gr{static mixin(n,r){return r=Hs(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const F of r)if(m.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const I=F=>function(...Y){return this[n][F](...Y)};for(const F of r)Object.defineProperty(m.prototype,F,{enumerable:!1,value:I(F)});return m}}static get isDebugEnabled(){if(typeof process!="object")return uo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||uo}static set isDebugEnabled(n){uo=n}constructor(n={}){cr.set(this,new Set),ci.set(this,new Map),Kr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,y,I)=>{I=JSON.stringify(I),typeof y=="symbol"&&(y=y.toString());const F=new Date,Y=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${Y}][emittery:${r}][${m}] Event Name: ${y}
|
|
3
|
+
data: ${I}`)})}logIfDebugEnabled(n,r,m){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const m of n)Tr(m),wr(this,m).add(r),this.logIfDebugEnabled("subscribe",m,void 0),co(m)||this.emit(ai,{eventName:m,listener:r});return this.off.bind(this,n,r)}off(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const m of n)Tr(m),wr(this,m).delete(r),this.logIfDebugEnabled("unsubscribe",m,void 0),co(m)||this.emit(di,{eventName:m,listener:r})}once(n){return new Promise(r=>{const m=this.on(n,y=>{m(),r(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Tr(r);return Fs(this,n)}async emit(n,r){Tr(n),this.logIfDebugEnabled("emit",n,r),Nc(this,n,r);const m=wr(this,n),y=cr.get(this),I=[...m],F=co(n)?[]:[...y];await Ls,await Promise.all([...I.map(async Y=>{if(m.has(Y))return Y(r)}),...F.map(async Y=>{if(y.has(Y))return Y(n,r)})])}async emitSerial(n,r){Tr(n),this.logIfDebugEnabled("emitSerial",n,r);const m=wr(this,n),y=cr.get(this),I=[...m],F=[...y];await Ls;for(const Y of I)m.has(Y)&&await Y(r);for(const Y of F)y.has(Y)&&await Y(n,r)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),cr.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Fs(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{listener:n}),cr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){wr(this,r).clear();const m=Ur(this,r);for(const y of m)y.finish();m.clear()}else{cr.get(this).clear();for(const m of ci.get(this).values())m.clear();for(const m of Kr.get(this).values()){for(const y of m)y.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const m of n){if(typeof m=="string"){r+=cr.get(this).size+wr(this,m).size+Ur(this,m).size+Ur(this).size;continue}typeof m<"u"&&Tr(m),r+=cr.get(this).size;for(const y of ci.get(this).values())r+=y.size;for(const y of Kr.get(this).values())r+=y.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Hs(r);for(const m of r){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const Cs=Object.getOwnPropertyNames(gr.prototype).filter(o=>o!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var ao=gr;function Jc(o){return typeof o=="object"&&o!==null&&"message"in o&&typeof o.message=="string"}function kc(o){if(Jc(o))return o;try{return new Error(JSON.stringify(o))}catch{return new Error(String(o))}}function ho(o){return kc(o).message}var Ns=(o=>(o.FPS_DROP="fps_drop",o))(Ns||{}),Js=(o=>(o.start="start",o.transform="transform",o.flush="flush",o))(Js||{}),fi=(o=>(o.pipeline_ended="pipeline_ended",o.pipeline_ended_with_error="pipeline_ended_with_error",o.pipeline_started="pipeline_started",o.pipeline_started_with_error="pipeline_started_with_error",o.pipeline_restarted="pipeline_restarted",o.pipeline_restarted_with_error="pipeline_restarted_with_error",o))(fi||{});const Ec=500,Kc=.8;class Uc extends ao{constructor(n,r){super(),this.index_=r,this.uuid_=ws(),this.framesTransformed_=0,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.framesFromSource_=0,this.fps_=0,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType());const m=new er().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();nr.report(m)}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){const m=new er().action("MediaTransformer").guid(this.uuid_).message(On.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error(ho(r)).build();nr.report(m);const y={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",y)}}async transform(n,r){var m,y,I,F;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(m=n==null?void 0:n.displayHeight)!=null?m:0,this.videoWidth_=(y=n==null?void 0:n.displayWidth)!=null?y:0),++this.framesFromSource_,this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else try{await((F=(I=this.transformer_).transform)==null?void 0:F.call(I,n,r)),++this.framesTransformed_,this.framesTransformed_===Ec&&this.mediaTransformerQosReport()}catch(Y){const k=new er().action("MediaTransformer").guid(this.uuid_).message(On.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error(ho(Y)).build();nr.report(k);const et={eventMetaData:{transformerIndex:this.index_},error:Y,function:"transform"};this.emit("error",et)}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(m){const y=new er().action("MediaTransformer").guid(this.uuid_).message(On.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error(ho(m)).build();nr.report(y);const I={eventMetaData:{transformerIndex:this.index_},error:m,function:"flush"};this.emit("error",I)}}this.mediaTransformerQosReport();const r=new er().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();nr.report(r)}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}mediaTransformerQosReport(){let n=(Date.now()-this.mediaTransformerQosReportStartTimestamp_)/1e3,r=this.framesFromSource_/n,m=this.framesTransformed_/n;if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*Kc>r){const I={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:r}};this.emit("warn",I)}const y=new er().action("MediaTransformer").fps(r).transformedFps(m).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();nr.report(y),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class Mc extends ao{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let m=new Uc(n[r],r);m.on("error",y=>{this.emit("error",y)}),m.on("warn",y=>{this.emit("warn",y)}),this.transformers_.push(m)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let m=n;for(let y of this.transformers_)n=n.pipeThrough(new TransformStream(y));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await m.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async y=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(I=>{console.error("[Pipeline] Error from stream transform:",I)}),await r.abort(y),await m.cancel(y),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class Bc extends ao{constructor(){super(),this.uuid_=ws(),this.trackExpectedRate_=-1;const n=new er().action("MediaProcessor").guid(this.uuid_).variation("Create").build();nr.report(n)}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise((n,r)=>{if(!this.transformers_||this.transformers_.length===0){const y=new er().action("MediaProcessor").guid(this.uuid_).message(On.errors.transformer_none).variation("Error").build();nr.report(y),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){const y=new er().action("MediaProcessor").guid(this.uuid_).message(On.errors.readable_null).variation("Error").build();nr.report(y),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){const y=new er().action("MediaProcessor").guid(this.uuid_).message(On.errors.writable_null).variation("Error").build();nr.report(y),r("[MediaProcessor] Writable is null.");return}let m=!1;this.pipeline_&&(m=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new Mc(this.transformers_),this.pipeline_.on("warn",y=>{this.emit("warn",y)}),this.pipeline_.on("error",y=>{this.emit("error",y)}),this.pipeline_.on("pipelineInfo",y=>{m&&(y==="pipeline_started"?y=fi.pipeline_restarted:y==="pipeline_started_with_error"&&(y=fi.pipeline_restarted_with_error)),this.emit("pipelineInfo",y)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(y=>{r(y)})})}setTransformers(n){const r=new er().action("MediaProcessor").guid(this.uuid_).message(On.updates.transformer_new).variation("Update").build();return nr.report(r),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(n=>{this.pipeline_&&this.pipeline_.destroy();const r=new er().action("MediaProcessor").guid(this.uuid_).variation("Delete").build();nr.report(r),n()})}}class Ac{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((r,m)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${y}`),m(y)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):m("kind not supported")}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${y}`),m(y)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class jc{constructor(n){this.insertableStreamHelper_=new Ac,this.mediaProcessor_=n}setTrack(n){return new Promise((r,m)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(y=>{m(y)})}).catch(y=>{m(y)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(m=>{r(m)}):r("no processor")})}}var Mr=(o=>(o.Low="Low",o.High="High",o))(Mr||{});const zc=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 Oc=function(){var o=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},m,y;r.ready=new Promise(function(nt,ot){m=nt,y=ot});var I={},F;for(F in r)r.hasOwnProperty(F)&&(I[F]=r[F]);var Y="./this.program",k=function(nt,ot){throw ot},et=!0,O="";function st(nt){return r.locateFile?r.locateFile(nt,O):O+nt}var xt;typeof document<"u"&&document.currentScript&&(O=document.currentScript.src),o&&(O=o),O.indexOf("blob:")!==0?O=O.substr(0,O.replace(/[?#].*/,"").lastIndexOf("/")+1):O="";var Vt=r.print||console.log.bind(console),dt=r.printErr||console.warn.bind(console);for(F in I)I.hasOwnProperty(F)&&(r[F]=I[F]);I=null,r.arguments&&r.arguments,r.thisProgram&&(Y=r.thisProgram),r.quit&&(k=r.quit);var ht;r.wasmBinary&&(ht=r.wasmBinary);var Ht=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Lt,At=!1,_=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function Ee(nt,ot,at){for(var _t=ot+at,ae=ot;nt[ae]&&!(ae>=_t);)++ae;if(ae-ot>16&&nt.subarray&&_)return _.decode(nt.subarray(ot,ae));for(var ue="";ot<ae;){var Tt=nt[ot++];if(!(Tt&128)){ue+=String.fromCharCode(Tt);continue}var me=nt[ot++]&63;if((Tt&224)==192){ue+=String.fromCharCode((Tt&31)<<6|me);continue}var Ne=nt[ot++]&63;if((Tt&240)==224?Tt=(Tt&15)<<12|me<<6|Ne:Tt=(Tt&7)<<18|me<<12|Ne<<6|nt[ot++]&63,Tt<65536)ue+=String.fromCharCode(Tt);else{var qe=Tt-65536;ue+=String.fromCharCode(55296|qe>>10,56320|qe&1023)}}return ue}function an(nt,ot){return nt?Ee(gt,nt,ot):""}function We(nt,ot,at){for(var _t=0;_t<nt.length;++_t)de[ot++>>0]=nt.charCodeAt(_t);at||(de[ot>>0]=0)}function $t(nt,ot){return nt%ot>0&&(nt+=ot-nt%ot),nt}var An,de,gt,pn;function jn(nt){An=nt,r.HEAP8=de=new Int8Array(nt),r.HEAP16=new Int16Array(nt),r.HEAP32=pn=new Int32Array(nt),r.HEAPU8=gt=new Uint8Array(nt),r.HEAPU16=new Uint16Array(nt),r.HEAPU32=new Uint32Array(nt),r.HEAPF32=new Float32Array(nt),r.HEAPF64=new Float64Array(nt)}r.INITIAL_MEMORY;var Re,Jt=[],Te=[],on=[],Xn=0;function Fn(){return Ht||Xn>0}function xn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());Qt(Jt)}function Nn(){Qt(Te)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Hn(r.postRun.shift());Qt(on)}function bn(nt){Jt.unshift(nt)}function kn(nt){Te.unshift(nt)}function Hn(nt){on.unshift(nt)}var Oe=0,Ae=null;function In(nt){Oe++,r.monitorRunDependencies&&r.monitorRunDependencies(Oe)}function Vn(nt){if(Oe--,r.monitorRunDependencies&&r.monitorRunDependencies(Oe),Oe==0&&Ae){var ot=Ae;Ae=null,ot()}}r.preloadedImages={},r.preloadedAudios={};function he(nt){r.onAbort&&r.onAbort(nt),nt="Aborted("+nt+")",dt(nt),At=!0,nt+=". Build with -s ASSERTIONS=1 for more info.";var ot=new WebAssembly.RuntimeError(nt);throw y(ot),ot}var Ye="data:application/octet-stream;base64,";function Pe(nt){return nt.startsWith(Ye)}var ne;ne="tflite-simd.wasm",Pe(ne)||(ne=st(ne));function Ve(nt){try{if(nt==ne&&ht)return new Uint8Array(ht);if(!xt)throw"both async and sync fetching of the wasm failed"}catch(ot){he(ot)}}function sn(){return!ht&&et&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(nt){if(!nt.ok)throw"failed to load wasm binary file at '"+ne+"'";return nt.arrayBuffer()}).catch(function(){return Ve(ne)}):Promise.resolve().then(function(){return Ve(ne)})}function Me(){var nt={a:fe};function ot(Tt,me){var Ne=Tt.exports;r.asm=Ne,Lt=r.asm.q,jn(Lt.buffer),Re=r.asm.E,kn(r.asm.r),Vn()}In();function at(Tt){ot(Tt.instance)}function _t(Tt){return sn().then(function(me){return WebAssembly.instantiate(me,nt)}).then(function(me){return me}).then(Tt,function(me){dt("failed to asynchronously prepare wasm: "+me),he(me)})}function ae(){return!ht&&typeof WebAssembly.instantiateStreaming=="function"&&!Pe(ne)&&typeof fetch=="function"?fetch(ne,{credentials:"same-origin"}).then(function(Tt){var me=WebAssembly.instantiateStreaming(Tt,nt);return me.then(at,function(Ne){return dt("wasm streaming compile failed: "+Ne),dt("falling back to ArrayBuffer instantiation"),_t(at)})}):_t(at)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(nt,ot);return ue}catch(Tt){return dt("Module.instantiateWasm callback failed with error: "+Tt),!1}return ae().catch(y),{}}function Qt(nt){for(;nt.length>0;){var ot=nt.shift();if(typeof ot=="function"){ot(r);continue}var at=ot.func;typeof at=="number"?ot.arg===void 0?Re.get(at)():Re.get(at)(ot.arg):at(ot.arg===void 0?null:ot.arg)}}function Ze(nt,ot,at,_t){he("Assertion failed: "+an(nt)+", at: "+[ot?an(ot):"unknown filename",at,_t?an(_t):"unknown function"])}function Ce(nt,ot){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Bt(nt,ot){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Ie(){he("")}var zt;zt=function(){return performance.now()};var ye=!0;function we(nt){return pn[Nt()>>2]=nt,nt}function $e(nt,ot){var at;if(nt===0)at=Date.now();else if((nt===1||nt===4)&&ye)at=zt();else return we(28),-1;return pn[ot>>2]=at/1e3|0,pn[ot+4>>2]=at%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(nt,ot,at){gt.copyWithin(nt,ot,ot+at)}function je(nt){try{return Lt.grow(nt-An.byteLength+65535>>>16),jn(Lt.buffer),1}catch{}}function _e(nt){var ot=gt.length;nt=nt>>>0;var at=2147483648;if(nt>at)return!1;for(var _t=1;_t<=4;_t*=2){var ae=ot*(1+.2/_t);ae=Math.min(ae,nt+100663296);var ue=Math.min(at,$t(Math.max(nt,ae),65536)),Tt=je(ue);if(Tt)return!0}return!1}function Se(nt){for(var ot=zt();zt()-ot<nt;);}var Wn={};function ln(){return Y||"./this.program"}function Qe(){if(!Qe.strings){var nt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",ot={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:nt,_:ln()};for(var at in Wn)Wn[at]===void 0?delete ot[at]:ot[at]=Wn[at];var _t=[];for(var at in ot)_t.push(at+"="+ot[at]);Qe.strings=_t}return Qe.strings}var un={mappings:{},buffers:[null,[],[]],printChar:function(nt,ot){var at=un.buffers[nt];ot===0||ot===10?((nt===1?Vt:dt)(Ee(at,0)),at.length=0):at.push(ot)},varargs:void 0,get:function(){un.varargs+=4;var nt=pn[un.varargs-4>>2];return nt},getStr:function(nt){var ot=an(nt);return ot},get64:function(nt,ot){return nt}};function ve(nt,ot){var at=0;return Qe().forEach(function(_t,ae){var ue=ot+at;pn[nt+ae*4>>2]=ue,We(_t,ue),at+=_t.length+1}),0}function Le(nt,ot){var at=Qe();pn[nt>>2]=at.length;var _t=0;return at.forEach(function(ae){_t+=ae.length+1}),pn[ot>>2]=_t,0}function Ge(nt){ee(nt)}function re(nt){return 0}function De(nt,ot,at,_t,ae){}function te(nt,ot,at,_t){for(var ae=0,ue=0;ue<at;ue++){for(var Tt=pn[ot+ue*8>>2],me=pn[ot+(ue*8+4)>>2],Ne=0;Ne<me;Ne++)un.printChar(nt,gt[Tt+Ne]);ae+=me}return pn[_t>>2]=ae,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var nt=new Uint8Array(1);return function(){return crypto.getRandomValues(nt),nt[0]}}else return function(){he("randomDevice")}}function hn(nt,ot){hn.randomDevice||(hn.randomDevice=Pt());for(var at=0;at<ot;at++)de[nt+at>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:Bt,b:Ie,n:$e,h:Xe,l:Ot,m:_e,p:Se,f:ve,g:Le,j:Ge,i:re,k:De,c:te,o:hn};Me(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Nt=r.___errno_location=function(){return(Nt=r.___errno_location=r.asm.F).apply(null,arguments)},Wt;function ie(nt){this.name="ExitStatus",this.message="Program terminated with exit("+nt+")",this.status=nt}Ae=function nt(){Wt||Fe(),Wt||(Ae=nt)};function Fe(nt){if(Oe>0||(xn(),Oe>0))return;function ot(){Wt||(Wt=!0,r.calledRun=!0,!At&&(Nn(),m(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),ot()},1)):ot()}r.run=Fe;function ee(nt,ot){oe(nt)}function oe(nt){Fn()||(r.onExit&&r.onExit(nt),At=!0),k(nt,new ie(nt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Fe(),n.ready}}();class Pc{constructor(){Rt(this,"selectedTFLite");Rt(this,"isSIMDSupported",!1);Rt(this,"isThreadsSupported",!1);Rt(this,"inputWidth",0);Rt(this,"inputHeight",0);Rt(this,"inputChannelCount",0);Rt(this,"inputMemoryOffset",0);Rt(this,"outputWidth",0);Rt(this,"outputHeight",0);Rt(this,"outputChannelCount",0);Rt(this,"outputMemoryOffset",0)}}const _c="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",Qc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function Dc(o=_c,n=Qc){let r=new Pc;var m=new Promise(function(y,I){async function F(){return Oc({locateFile:function(et){return o+et}})}async function Y(k){return new Promise(async(et,O)=>{const st=k;if(typeof st>"u")return O("TFLite backend unavailable: wasmSimd");const xt="selfie_segmentation_landscape";console.log("Loading tflite model:",xt);let Vt=n+`${xt}.tflite`;console.log("TFLite modelUrl: "+Vt);try{const ht=await(await fetch(Vt)).arrayBuffer();console.log("Model buffer size:",ht.byteLength);const Ht=st._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Ht),console.log("Loading model buffer..."),st.HEAPU8.set(new Uint8Array(ht),Ht);const Lt=st._loadModel(ht.byteLength);if(console.log("Load model result:",Lt),Lt!==0){O("Cannot load model");return}r.inputWidth=st._getInputWidth(),r.inputHeight=st._getInputHeight(),r.inputChannelCount=st._getInputChannelCount(),r.inputMemoryOffset=st._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=st._getOutputMemoryOffset(),r.outputWidth=st._getOutputWidth(),r.outputHeight=st._getOutputHeight(),r.outputChannelCount=st._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=st}catch(dt){O(dt);return}et()})}F().then(k=>{if(k===null)throw console.error("loadTFLite null"),"loadTFLite null";Y(k).then(et=>{y(r)}).catch(et=>{console.error("loadTFLiteModel error"),I("loadTFLiteModel error")})}).catch(k=>{console.error("loadTFLite error:",k),I("loadTFLite error:"+k)})});return m}class ks{constructor(){Rt(this,"canvas",new OffscreenCanvas(0,0));Rt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));Rt(this,"pixelCount",0);Rt(this,"inputOffset",0);Rt(this,"outputOffset",0);Rt(this,"infos");Rt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await Dc(n,r)}getOutputDimensions(){var n,r,m,y;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(y=(m=this.infos)==null?void 0:m.outputHeight)!=null?y:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,m=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,m);const y=this.context.getImageData(0,0,r,m),I=this.infos.selectedTFLite.HEAPF32;for(let F=0;F<this.pixelCount;F++){const Y=this.inputOffset+F*3;I[Y]=y.data[F*4]/255,I[Y+1]=y.data[F*4+1]/255,I[Y+2]=y.data[F*4+2]/255}this.infos.selectedTFLite._runInference();for(let F=0;F<this.pixelCount;F++){const Y=this.infos.selectedTFLite.HEAPF32[this.outputOffset+F];this.mask.data[F*4]=this.mask.data[F*4+3]=255*Y}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,m;return(m=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?m:!1}}async function $c(o,n){const{wasm:r,insertableStreams:m,simd:y,webgl:I}=await Es(o,n);if(!r.supported)throw r.message;if(!m.supported)throw m.message;if(!y.supported)throw y.message;if(!I.supported)throw I.message}async function Es(o,n){const r=new ks;await r.initWasm(o,n);const m={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await zc(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:qc()};try{await qn()}catch(y){m.insertableStreams.supported=!1,m.insertableStreams.message=y}return m}function qc(){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"}}const mi={};(function(){var o;function n(p){var V=0;return function(){return V<p.length?{done:!1,value:p[V++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,V,W){return p==Array.prototype||p==Object.prototype||(p[V]=W.value),p};function m(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var V=0;V<p.length;++V){var W=p[V];if(W&&W.Math==Math)return W}throw Error("Cannot find global object")}var y=m(this);function I(p,V){if(V)t:{var W=y;p=p.split(".");for(var E=0;E<p.length-1;E++){var P=p[E];if(!(P in W))break t;W=W[P]}p=p[p.length-1],E=W[p],V=V(E),V!=E&&V!=null&&r(W,p,{configurable:!0,writable:!0,value:V})}}I("Symbol",function(p){function V(lt){if(this instanceof V)throw new TypeError("Symbol is not a constructor");return new W(E+(lt||"")+"_"+P++,lt)}function W(lt,z){this.g=lt,r(this,"description",{configurable:!0,writable:!0,value:z})}if(p)return p;W.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",P=0;return V}),I("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var V="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),W=0;W<V.length;W++){var E=y[V[W]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return p});function F(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function Y(p){var V=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return V?V.call(p):{next:n(p)}}function k(p){if(!(p instanceof Array)){p=Y(p);for(var V,W=[];!(V=p.next()).done;)W.push(V.value);p=W}return p}var et=typeof Object.create=="function"?Object.create:function(p){function V(){}return V.prototype=p,new V},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(p,V){if(p.__proto__=V,p.__proto__!==V)throw new TypeError(p+" is not extensible");return p}:null}var dt=O;function ht(p,V){if(p.prototype=et(V.prototype),p.prototype.constructor=p,dt)dt(p,V);else for(var W in V)if(W!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(V,W);E&&Object.defineProperty(p,W,E)}else p[W]=V[W];p.ea=V.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Ht.prototype.o=function(p){this.h=p};function At(p,V){p.j={U:V,V:!0},p.g=p.m||p.s}Ht.prototype.return=function(p){this.j={return:p},this.g=this.s};function _(p,V,W){return p.g=W,{value:V}}function Ee(p){this.g=new Ht,this.h=p}function an(p,V){Lt(p.g);var W=p.g.i;return W?We(p,"return"in W?W.return:function(E){return{value:E,done:!0}},V,p.g.return):(p.g.return(V),$t(p))}function We(p,V,W,E){try{var P=V.call(p.g.i,W);if(!(P instanceof Object))throw new TypeError("Iterator result "+P+" is not an object");if(!P.done)return p.g.l=!1,P;var lt=P.value}catch(z){return p.g.i=null,At(p.g,z),$t(p)}return p.g.i=null,E.call(p.g,lt),$t(p)}function $t(p){for(;p.g.g;)try{var V=p.h(p.g);if(V)return p.g.l=!1,{value:V.value,done:!1}}catch(W){p.g.h=void 0,At(p.g,W)}if(p.g.l=!1,p.g.j){if(V=p.g.j,p.g.j=null,V.V)throw V.U;return{value:V.return,done:!0}}return{value:void 0,done:!0}}function An(p){this.next=function(V){return Lt(p.g),p.g.i?V=We(p,p.g.i.next,V,p.g.o):(p.g.o(V),V=$t(p)),V},this.throw=function(V){return Lt(p.g),p.g.i?V=We(p,p.g.i.throw,V,p.g.o):(At(p.g,V),V=$t(p)),V},this.return=function(V){return an(p,V)},this[Symbol.iterator]=function(){return this}}function de(p,V){return V=new An(new Ee(V)),dt&&p.prototype&&dt(V,p.prototype),V}function gt(p,V){p instanceof String&&(p+="");var W=0,E=!1,P={next:function(){if(!E&&W<p.length){var lt=W++;return{value:V(lt,p[lt]),done:!1}}return E=!0,{done:!0,value:void 0}}};return P[Symbol.iterator]=function(){return P},P}var pn=typeof Object.assign=="function"?Object.assign:function(p,V){for(var W=1;W<arguments.length;W++){var E=arguments[W];if(E)for(var P in E)Object.prototype.hasOwnProperty.call(E,P)&&(p[P]=E[P])}return p};I("Object.assign",function(p){return p||pn}),I("Promise",function(p){function V(z){this.h=0,this.i=void 0,this.g=[],this.o=!1;var it=this.j();try{z(it.resolve,it.reject)}catch(bt){it.reject(bt)}}function W(){this.g=null}function E(z){return z instanceof V?z:new V(function(it){it(z)})}if(p)return p;W.prototype.h=function(z){if(this.g==null){this.g=[];var it=this;this.i(function(){it.l()})}this.g.push(z)};var P=y.setTimeout;W.prototype.i=function(z){P(z,0)},W.prototype.l=function(){for(;this.g&&this.g.length;){var z=this.g;this.g=[];for(var it=0;it<z.length;++it){var bt=z[it];z[it]=null;try{bt()}catch(It){this.j(It)}}}this.g=null},W.prototype.j=function(z){this.i(function(){throw z})},V.prototype.j=function(){function z(It){return function(Ut){bt||(bt=!0,It.call(it,Ut))}}var it=this,bt=!1;return{resolve:z(this.C),reject:z(this.l)}},V.prototype.C=function(z){if(z===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(z instanceof V)this.F(z);else{t:switch(typeof z){case"object":var it=z!=null;break t;case"function":it=!0;break t;default:it=!1}it?this.u(z):this.m(z)}},V.prototype.u=function(z){var it=void 0;try{it=z.then}catch(bt){this.l(bt);return}typeof it=="function"?this.G(it,z):this.m(z)},V.prototype.l=function(z){this.s(2,z)},V.prototype.m=function(z){this.s(1,z)},V.prototype.s=function(z,it){if(this.h!=0)throw Error("Cannot settle("+z+", "+it+"): Promise already settled in state"+this.h);this.h=z,this.i=it,this.h===2&&this.D(),this.A()},V.prototype.D=function(){var z=this;P(function(){if(z.B()){var it=y.console;typeof it<"u"&&it.error(z.i)}},1)},V.prototype.B=function(){if(this.o)return!1;var z=y.CustomEvent,it=y.Event,bt=y.dispatchEvent;return typeof bt>"u"?!0:(typeof z=="function"?z=new z("unhandledrejection",{cancelable:!0}):typeof it=="function"?z=new it("unhandledrejection",{cancelable:!0}):(z=y.document.createEvent("CustomEvent"),z.initCustomEvent("unhandledrejection",!1,!0,z)),z.promise=this,z.reason=this.i,bt(z))},V.prototype.A=function(){if(this.g!=null){for(var z=0;z<this.g.length;++z)lt.h(this.g[z]);this.g=null}};var lt=new W;return V.prototype.F=function(z){var it=this.j();z.J(it.resolve,it.reject)},V.prototype.G=function(z,it){var bt=this.j();try{z.call(it,bt.resolve,bt.reject)}catch(It){bt.reject(It)}},V.prototype.then=function(z,it){function bt(qt,Et){return typeof qt=="function"?function(wt){try{It(qt(wt))}catch(Kt){Ut(Kt)}}:Et}var It,Ut,kt=new V(function(qt,Et){It=qt,Ut=Et});return this.J(bt(z,It),bt(it,Ut)),kt},V.prototype.catch=function(z){return this.then(void 0,z)},V.prototype.J=function(z,it){function bt(){switch(It.h){case 1:z(It.i);break;case 2:it(It.i);break;default:throw Error("Unexpected state: "+It.h)}}var It=this;this.g==null?lt.h(bt):this.g.push(bt),this.o=!0},V.resolve=E,V.reject=function(z){return new V(function(it,bt){bt(z)})},V.race=function(z){return new V(function(it,bt){for(var It=Y(z),Ut=It.next();!Ut.done;Ut=It.next())E(Ut.value).J(it,bt)})},V.all=function(z){var it=Y(z),bt=it.next();return bt.done?E([]):new V(function(It,Ut){function kt(wt){return function(Kt){qt[wt]=Kt,Et--,Et==0&&It(qt)}}var qt=[],Et=0;do qt.push(void 0),Et++,E(bt.value).J(kt(qt.length-1),Ut),bt=it.next();while(!bt.done)})},V}),I("Object.is",function(p){return p||function(V,W){return V===W?V!==0||1/V===1/W:V!==V&&W!==W}}),I("Array.prototype.includes",function(p){return p||function(V,W){var E=this;E instanceof String&&(E=String(E));var P=E.length;for(W=W||0,0>W&&(W=Math.max(W+P,0));W<P;W++){var lt=E[W];if(lt===V||Object.is(lt,V))return!0}return!1}}),I("String.prototype.includes",function(p){return p||function(V,W){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(V instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(V,W||0)!==-1}}),I("Array.prototype.keys",function(p){return p||function(){return gt(this,function(V){return V})}});var jn=this||self;function Re(p,V){p=p.split(".");var W=jn;p[0]in W||typeof W.execScript>"u"||W.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||V===void 0?W[E]&&W[E]!==Object.prototype[E]?W=W[E]:W=W[E]={}:W[E]=V}function Jt(p,V){return V=String.fromCharCode.apply(null,V),p==null?V:p+V}var Te,on=typeof TextDecoder<"u",Xn,Fn=typeof TextEncoder<"u";function xn(p){if(Fn)p=(Xn||(Xn=new TextEncoder)).encode(p);else{var V=void 0;V=V===void 0?!1:V;for(var W=0,E=new Uint8Array(3*p.length),P=0;P<p.length;P++){var lt=p.charCodeAt(P);if(128>lt)E[W++]=lt;else{if(2048>lt)E[W++]=lt>>6|192;else{if(55296<=lt&&57343>=lt){if(56319>=lt&&P<p.length){var z=p.charCodeAt(++P);if(56320<=z&&57343>=z){lt=1024*(lt-55296)+z-56320+65536,E[W++]=lt>>18|240,E[W++]=lt>>12&63|128,E[W++]=lt>>6&63|128,E[W++]=lt&63|128;continue}else P--}if(V)throw Error("Found an unpaired surrogate");lt=65533}E[W++]=lt>>12|224,E[W++]=lt>>6&63|128}E[W++]=lt&63|128}}p=E.subarray(0,W)}return p}var Nn={},dn=null;function bn(p,V){V===void 0&&(V=0),Oe(),V=Nn[V];for(var W=Array(Math.floor(p.length/3)),E=V[64]||"",P=0,lt=0;P<p.length-2;P+=3){var z=p[P],it=p[P+1],bt=p[P+2],It=V[z>>2];z=V[(z&3)<<4|it>>4],it=V[(it&15)<<2|bt>>6],bt=V[bt&63],W[lt++]=It+z+it+bt}switch(It=0,bt=E,p.length-P){case 2:It=p[P+1],bt=V[(It&15)<<2]||E;case 1:p=p[P],W[lt]=V[p>>2]+V[(p&3)<<4|It>>4]+bt+E}return W.join("")}function kn(p){var V=p.length,W=3*V/4;W%3?W=Math.floor(W):"=.".indexOf(p[V-1])!=-1&&(W="=.".indexOf(p[V-2])!=-1?W-2:W-1);var E=new Uint8Array(W),P=0;return Hn(p,function(lt){E[P++]=lt}),E.subarray(0,P)}function Hn(p,V){function W(bt){for(;E<p.length;){var It=p.charAt(E++),Ut=dn[It];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(It))throw Error("Unknown base64 encoding at char: "+It)}return bt}Oe();for(var E=0;;){var P=W(-1),lt=W(0),z=W(64),it=W(64);if(it===64&&P===-1)break;V(P<<2|lt>>4),z!=64&&(V(lt<<4&240|z>>2),it!=64&&V(z<<6&192|it))}}function Oe(){if(!dn){dn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),V=["+/=","+/","-_=","-_.","-_"],W=0;5>W;W++){var E=p.concat(V[W].split(""));Nn[W]=E;for(var P=0;P<E.length;P++){var lt=E[P];dn[lt]===void 0&&(dn[lt]=P)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",In;function Vn(p,V,W){return V===W?In||(In=new Uint8Array(0)):Ae?p.slice(V,W):new Uint8Array(p.subarray(V,W))}var he=0,Ye=0;function Pe(p,V){V=V===void 0?{}:V,V=V.v===void 0?!1:V.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=V,p&&ne(this,p)}function ne(p,V){V=V.constructor===Uint8Array?V:V.constructor===ArrayBuffer?new Uint8Array(V):V.constructor===Array?new Uint8Array(V):V.constructor===String?kn(V):V instanceof Uint8Array?new Uint8Array(V.buffer,V.byteOffset,V.byteLength):new Uint8Array(0),p.h=V,p.j=0,p.i=p.h.length,p.g=p.j}Pe.prototype.reset=function(){this.g=this.j};function Ve(p){var V=p.h,W=V[p.g],E=W&127;return 128>W?(p.g+=1,E):(W=V[p.g+1],E|=(W&127)<<7,128>W?(p.g+=2,E):(W=V[p.g+2],E|=(W&127)<<14,128>W?(p.g+=3,E):(W=V[p.g+3],E|=(W&127)<<21,128>W?(p.g+=4,E):(W=V[p.g+4],E|=(W&15)<<28,128>W?(p.g+=5,E>>>0):(p.g+=5,128<=V[p.g++]&&128<=V[p.g++]&&128<=V[p.g++]&&128<=V[p.g++]&&p.g++,E)))))}function sn(p){var V=p.h[p.g],W=p.h[p.g+1],E=p.h[p.g+2],P=p.h[p.g+3];return p.g+=4,W=(V<<0|W<<8|E<<16|P<<24)>>>0,p=2*(W>>31)+1,V=W>>>23&255,W&=8388607,V==255?W?NaN:1/0*p:V==0?p*Math.pow(2,-149)*W:p*Math.pow(2,V-150)*(W+Math.pow(2,23))}var Me=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var V=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(V)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,V=this.h;return this.h=0,Vn(p,0,V)};function Ze(p,V){for(;127<V;)p.push(V&127|128),V>>>=7;p.push(V)}function Ce(p){var V={},W=V.N===void 0?!1:V.N;this.o={v:V.v===void 0?!1:V.v},this.N=W,V=this.o,Me.length?(W=Me.pop(),V&&(W.v=V.v),p&&ne(W,p),p=W):p=new Pe(p,V),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Bt(p){var V=p.g;if((V=V.g==V.i)||(V=p.j)||(V=p.g,V=V.l||0>V.g||V.g>V.i),V)return!1;p.m=p.g.g,V=Ve(p.g);var W=V&7;return W!=0&&W!=5&&W!=1&&W!=2&&W!=3&&W!=4?(p.j=!0,!1):(p.i=V,p.l=V>>>3,p.h=W,!0)}function Ie(p){switch(p.h){case 0:if(p.h!=0)Ie(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?Ie(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)Ie(p);else{var V=Ve(p.g);p=p.g,p.g+=V}break;case 5:p.h!=5?Ie(p):(p=p.g,p.g+=4);break;case 3:V=p.l;do{if(!Bt(p)){p.j=!0;break}if(p.h==4){p.l!=V&&(p.j=!0);break}Ie(p)}while(1);break;default:p.j=!0}}function zt(p,V,W){var E=p.g.i,P=Ve(p.g);return P=p.g.g+P,p.g.i=P,W(V,p),p.g.g=P,p.g.i=E,V}function ye(p){var V=Ve(p.g);p=p.g;var W=p.g;p.g+=V,p=p.h;var E;if(on)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(W,W+V));else{V=W+V;for(var P=[],lt=null,z,it,bt;W<V;)z=p[W++],128>z?P.push(z):224>z?W>=V?P.push(65533):(it=p[W++],194>z||(it&192)!==128?(W--,P.push(65533)):P.push((z&31)<<6|it&63)):240>z?W>=V-1?P.push(65533):(it=p[W++],(it&192)!==128||z===224&&160>it||z===237&&160<=it||((E=p[W++])&192)!==128?(W--,P.push(65533)):P.push((z&15)<<12|(it&63)<<6|E&63)):244>=z?W>=V-2?P.push(65533):(it=p[W++],(it&192)!==128||(z<<28)+(it-144)>>30!==0||((E=p[W++])&192)!==128||((bt=p[W++])&192)!==128?(W--,P.push(65533)):(z=(z&7)<<18|(it&63)<<12|(E&63)<<6|bt&63,z-=65536,P.push((z>>10&1023)+55296,(z&1023)+56320))):P.push(65533),8192<=P.length&&(lt=Jt(lt,P),P.length=0);E=Jt(lt,P)}return E}function we(){this.h=[],this.i=0,this.g=new Qt}function $e(p,V){V.length!==0&&(p.h.push(V),p.i+=V.length)}function Xe(p){var V=p.i+p.g.length();if(V===0)return new Uint8Array(0);V=new Uint8Array(V);for(var W=p.h,E=W.length,P=0,lt=0;lt<E;lt++){var z=W[lt];z.length!==0&&(V.set(z,P),P+=z.length)}return W=p.g,E=W.h,E!==0&&(V.set(W.g.subarray(0,E),P),W.h=0),p.h=[V],V}function Ot(p,V,W){if(W!=null){Ze(p.g,8*V+5),p=p.g;var E=W;E=(W=0>E?1:0)?-E:E,E===0?0<1/E?he=Ye=0:(Ye=0,he=2147483648):isNaN(E)?(Ye=0,he=2147483647):34028234663852886e22<E?(Ye=0,he=(W<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Ye=0,he=(W<<31|E)>>>0):(V=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-V),E=Math.round(8388608*E)&8388607,Ye=0,he=(W<<31|V+127<<23|E)>>>0),W=he,p.push(W>>>0&255),p.push(W>>>8&255),p.push(W>>>16&255),p.push(W>>>24&255)}}var je=typeof Uint8Array=="function";function _e(p,V,W){if(p!=null)return typeof p=="object"?je&&p instanceof Uint8Array?W(p):Se(p,V,W):V(p)}function Se(p,V,W){if(Array.isArray(p)){for(var E=Array(p.length),P=0;P<p.length;P++)E[P]=_e(p[P],V,W);return Array.isArray(p)&&p.W&&Qe(E),E}E={};for(P in p)E[P]=_e(p[P],V,W);return E}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var ln={W:{value:!0,configurable:!0}};function Qe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,ln),p}var un;function ve(p,V,W){var E=un;un=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}V!==void 0&&-1<V?(this.l=Math.max(V,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(W)for(V=0;V<W.length;V++)p=W[V],p<this.l?(p+=this.j,(E=this.g[p])?Qe(E):this.g[p]=Le):(Ge(this),(E=this.h[p])?Qe(E):this.h[p]=Le)}var Le=Object.freeze(Qe([]));function Ge(p){var V=p.l+p.j;p.g[V]||(p.h=p.g[V]={})}function re(p,V,W){return V===-1?null:(W===void 0?0:W)||V>=p.l?p.h?p.h[V]:void 0:p.g[V+p.j]}function De(p){var V=V===void 0?!1:V,W=re(p,1,V);return W==null&&(W=Le),W===Le&&(W=Qe([]),Pt(p,1,W,V)),W}function te(p,V,W){return p=re(p,V),p=p==null?p:+p,p==null?W===void 0?0:W:p}function Pt(p,V,W,E){(E===void 0?0:E)||V>=p.l?(Ge(p),p.h[V]=W):p.g[V+p.j]=W}function hn(p,V){p.i||(p.i={});var W=p.i[1];if(!W){var E=De(p);W=[];for(var P=0;P<E.length;P++)W[P]=new V(E[P]);p.i[1]=W}return W}function fe(p,V,W,E){var P=hn(p,W);V=V||new W,p=De(p),E!=null?(P.splice(E,0,V),p.splice(E,0,Nt(V))):(P.push(V),p.push(Nt(V)))}ve.prototype.toJSON=function(){var p=Nt(this);return Se(p,Wn,bn)};function Nt(p,V){if(p.i)for(var W in p.i){var E=p.i[W];if(Array.isArray(E))for(var P=0;P<E.length;P++)E[P]&&Nt(E[P]);else E&&Nt(E)}return p.g}ve.prototype.toString=function(){return Nt(this).toString()};function Wt(p,V){return p=re(p,V),p==null?0:p}function ie(p,V){return p=re(p,V),p==null?"":p}function Fe(p,V){if(p=p.m){$e(V,V.g.end());for(var W=0;W<p.length;W++)$e(V,p[W])}}function ee(p,V){if(V.h==4)return!1;var W=V.m;return Ie(V),V.N||(V=Vn(V.g.h,W,V.g.g),(W=p.m)?W.push(V):p.m=[V]),!0}function oe(p,V){var W=void 0;return new(W||(W=Promise))(function(E,P){function lt(bt){try{it(V.next(bt))}catch(It){P(It)}}function z(bt){try{it(V.throw(bt))}catch(It){P(It)}}function it(bt){bt.done?E(bt.value):new W(function(It){It(bt.value)}).then(lt,z)}it((V=V.apply(p,void 0)).next())})}function nt(p){ve.call(this,p)}ht(nt,ve);function ot(p,V){for(;Bt(V);)switch(V.i){case 8:var W=Ve(V.g);Pt(p,1,W);break;case 21:W=sn(V.g),Pt(p,2,W);break;case 26:W=ye(V),Pt(p,3,W);break;case 34:W=ye(V),Pt(p,4,W);break;default:if(!ee(p,V))return p}return p}function at(p){ve.call(this,p,-1,_t)}ht(at,ve),at.prototype.addClassification=function(p,V){fe(this,p,nt,V)};var _t=[1];function ae(p){ve.call(this,p)}ht(ae,ve);function ue(p,V){for(;Bt(V);)switch(V.i){case 13:var W=sn(V.g);Pt(p,1,W);break;case 21:W=sn(V.g),Pt(p,2,W);break;case 29:W=sn(V.g),Pt(p,3,W);break;case 37:W=sn(V.g),Pt(p,4,W);break;case 45:W=sn(V.g),Pt(p,5,W);break;default:if(!ee(p,V))return p}return p}function Tt(p){ve.call(this,p,-1,me)}ht(Tt,ve);var me=[1];function Ne(p){ve.call(this,p)}ht(Ne,ve);function qe(p,V,W){if(W=p.createShader(W===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(W,V),p.compileShader(W),!p.getShaderParameter(W,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
4
4
|
|
|
5
|
-
`+p.getShaderInfoLog(W));return W}function tn(p){return hn(p,
|
|
5
|
+
`+p.getShaderInfoLog(W));return W}function tn(p){return hn(p,nt).map(function(V){return{index:Wt(V,1),Y:te(V,2),label:re(V,3)!=null?ie(V,3):void 0,displayName:re(V,4)!=null?ie(V,4):void 0}})}function fn(p){return{x:te(p,1),y:te(p,2),z:te(p,3),visibility:re(p,4)!=null?te(p,4):void 0}}function yn(p,V){this.h=p,this.g=V,this.l=0}function He(p,V,W){return en(p,V),typeof p.g.canvas.transferToImageBitmap=="function"?Promise.resolve(p.g.canvas.transferToImageBitmap()):W?Promise.resolve(p.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(p.g.canvas):(p.i===void 0&&(p.i=document.createElement("canvas")),new Promise(function(E){p.i.height=p.g.canvas.height,p.i.width=p.g.canvas.width,p.i.getContext("2d",{}).drawImage(p.g.canvas,0,0,p.g.canvas.width,p.g.canvas.height),E(p.i)}))}function en(p,V){var W=p.g;if(p.m===void 0){var E=qe(W,`
|
|
6
6
|
attribute vec2 aVertex;
|
|
7
7
|
attribute vec2 aTex;
|
|
8
8
|
varying vec2 vTex;
|
|
9
9
|
void main(void) {
|
|
10
10
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
11
11
|
vTex = aTex;
|
|
12
|
-
}`,0),
|
|
12
|
+
}`,0),P=qe(W,`
|
|
13
13
|
precision mediump float;
|
|
14
14
|
varying vec2 vTex;
|
|
15
15
|
uniform sampler2D sampler0;
|
|
16
16
|
void main(){
|
|
17
17
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
18
|
-
}`,1),lt=W.createProgram();if(W.attachShader(lt,E),W.attachShader(lt,
|
|
18
|
+
}`,1),lt=W.createProgram();if(W.attachShader(lt,E),W.attachShader(lt,P),W.linkProgram(lt),!W.getProgramParameter(lt,W.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
19
19
|
|
|
20
|
-
`+W.getProgramInfoLog(lt));E=p.m=lt,W.useProgram(E),O=W.getUniformLocation(E,"sampler0"),p.j={I:W.getAttribLocation(E,"aVertex"),H:W.getAttribLocation(E,"aTex"),da:O},p.s=W.createBuffer(),W.bindBuffer(W.ARRAY_BUFFER,p.s),W.enableVertexAttribArray(p.j.I),W.vertexAttribPointer(p.j.I,2,W.FLOAT,!1,0,0),W.bufferData(W.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),W.STATIC_DRAW),W.bindBuffer(W.ARRAY_BUFFER,null),p.o=W.createBuffer(),W.bindBuffer(W.ARRAY_BUFFER,p.o),W.enableVertexAttribArray(p.j.H),W.vertexAttribPointer(p.j.H,2,W.FLOAT,!1,0,0),W.bufferData(W.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),W.STATIC_DRAW),W.bindBuffer(W.ARRAY_BUFFER,null),W.uniform1i(O,0)}E=p.j,W.useProgram(p.m),W.canvas.width=V.width,W.canvas.height=V.height,W.viewport(0,0,V.width,V.height),W.activeTexture(W.TEXTURE0),p.h.bindTexture2d(V.glName),W.enableVertexAttribArray(E.I),W.bindBuffer(W.ARRAY_BUFFER,p.s),W.vertexAttribPointer(E.I,2,W.FLOAT,!1,0,0),W.enableVertexAttribArray(E.H),W.bindBuffer(W.ARRAY_BUFFER,p.o),W.vertexAttribPointer(E.H,2,W.FLOAT,!1,0,0),W.bindFramebuffer(W.DRAW_FRAMEBUFFER?W.DRAW_FRAMEBUFFER:W.FRAMEBUFFER,null),W.clearColor(0,0,0,0),W.clear(W.COLOR_BUFFER_BIT),W.colorMask(!0,!0,!0,!0),W.drawArrays(W.TRIANGLE_FAN,0,4),W.disableVertexAttribArray(E.I),W.disableVertexAttribArray(E.H),W.bindBuffer(W.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function zn(p){this.g=p}var nn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Je(p,V){return V+p}function Zn(p,V){window[p]=V}function Sn(p){var V=document.createElement("script");return V.setAttribute("src",p),V.setAttribute("crossorigin","anonymous"),new Promise(function(W){V.addEventListener("load",function(){W()},!1),V.addEventListener("error",function(){W()},!1),document.body.appendChild(V)})}function Be(){return oe(this,function p(){return de(p,function(V){switch(V.g){case 1:return V.m=2,_(V,WebAssembly.instantiate(nn),4);case 4:V.g=3,V.m=0;break;case 2:return V.m=0,V.j=null,V.return(!1);case 3:return V.return(!0)}})})}function En(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Je,typeof window=="object")var V=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")V=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=V,p.options){V=Y(Object.keys(p.options));for(var W=V.next();!W.done;W=V.next()){W=W.value;var E=p.options[W].default;E!==void 0&&(this.j[W]=typeof E=="function"?E():E)}}}o=En.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function rn(p,V){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(V):p.g.files}function vn(p){return oe(p,function V(){var W=this,E,O,lt,z,it,bt,It,Kt,kt,qt,Et;return de(V,function(wt){switch(wt.g){case 1:return E=W,W.R?(O=rn(W,W.j),_(wt,Be(),2)):wt.return();case 2:if(lt=wt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:W.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:W.locateFile}),bt=O.filter(function(Ut){return Ut.data!==void 0}),It=O.filter(function(Ut){return Ut.data===void 0}),Kt=Promise.all(bt.map(function(Ut){var Dt=cn(E,Ut.url);if(Ut.path!==void 0){var ce=Ut.path;Dt=Dt.then(function(pe){return E.overrideFile(ce,pe),Promise.resolve(pe)})}return Dt})),kt=Promise.all(It.map(function(Ut){return Ut.simd===void 0||Ut.simd&<||!Ut.simd&&!lt?Sn(E.locateFile(Ut.url,E.S)):Promise.resolve()})).then(function(){return oe(E,function Ut(){var Dt,ce,pe=this;return de(Ut,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ce=window.createMediapipeSolutionsPackedAssets,_(ge,Dt(ce),2);pe.h=ge.h,ge.g=0})})}),qt=function(){return oe(E,function Ut(){var Dt=this;return de(Ut,function(ce){return Dt.g.graph&&Dt.g.graph.url?ce=_(ce,cn(Dt,Dt.g.graph.url),0):(ce.g=0,ce=void 0),ce})})}(),_(wt,Promise.all([kt,Kt,qt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return z=O.filter(function(Ut){return Ut.simd===void 0||Ut.simd&<||!Ut.simd&&!lt}).map(function(Ut){return E.locateFile(Ut.url,E.S)}),importScripts.apply(null,k(z)),_(wt,createMediapipeSolutionsWasm(Module),6);case 6:W.h=wt.h,W.l=new OffscreenCanvas(1,1),W.h.canvas=W.l,it=W.h.GL.createContext(W.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),W.h.GL.makeContextCurrent(it),wt.g=4;break;case 7:if(W.l=document.createElement("canvas"),Et=W.l.getContext("webgl2",{}),!Et&&(Et=W.l.getContext("webgl",{}),!Et))return alert("Failed to create WebGL canvas context when passing video frame."),wt.return();W.D=Et,W.h.canvas=W.l,W.h.createContext(W.l,!0,!0,{});case 4:W.i=new W.h.SolutionWasm,W.R=!1,wt.g=0}})})}function Yn(p){return oe(p,function V(){var W=this,E,O,lt,z,it,bt,It,Kt;return de(V,function(kt){if(kt.g==1){if(W.g.graph&&W.g.graph.url&&W.P===W.g.graph.url)return kt.return();if(W.o=!0,!W.g.graph||!W.g.graph.url){kt.g=2;return}return W.P=W.g.graph.url,_(kt,cn(W,W.g.graph.url),3)}for(kt.g!=2&&(E=kt.h,W.i.loadGraph(E)),O=Y(Object.keys(W.B)),lt=O.next();!lt.done;lt=O.next())z=lt.value,W.i.overrideFile(z,W.B[z]);if(W.B={},W.g.listeners)for(it=Y(W.g.listeners),bt=it.next();!bt.done;bt=it.next())It=bt.value,$n(W,It);Kt=W.j,W.j={},W.setOptions(Kt),kt.g=0})})}o.reset=function(){return oe(this,function p(){var V=this;return de(p,function(W){V.i&&(V.i.reset(),V.m={},V.s={}),W.g=0})})},o.setOptions=function(p,V){var W=this;if(V=V||this.g.options){for(var E=[],O=[],lt={},z=Y(Object.keys(p)),it=z.next();!it.done;lt={K:lt.K,L:lt.L},it=z.next()){var bt=it.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],it=V[bt],it!==void 0&&(it.onChange&&(lt.K=it.onChange,lt.L=p[bt],E.push(function(It){return function(){return oe(W,function Kt(){var kt,qt=this;return de(Kt,function(Et){if(Et.g==1)return _(Et,It.K(It.L),2);kt=Et.h,kt===!0&&(qt.o=!0),Et.g=0})})}}(lt))),it.graphOptionXref&&(bt={valueNumber:it.type===1?p[bt]:0,valueBoolean:it.type===0?p[bt]:!1,valueString:it.type===2?p[bt]:""},it=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),it.graphOptionXref),bt),O.push(it))))}(E.length!==0||O.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(O),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Mn(p){return oe(p,function V(){var W=this,E,O,lt,z,it,bt,It;return de(V,function(Kt){switch(Kt.g){case 1:if(!W.o)return Kt.return();if(!W.u){Kt.g=2;break}E=Y(W.u),O=E.next();case 3:if(O.done){Kt.g=5;break}return lt=O.value,_(Kt,lt(),4);case 4:O=E.next(),Kt.g=3;break;case 5:W.u=void 0;case 2:if(W.A){for(z=new W.h.GraphOptionChangeRequestList,it=Y(W.A),bt=it.next();!bt.done;bt=it.next())It=bt.value,z.push_back(It);W.i.changeOptions(z),z.delete(),W.A=void 0}W.o=!1,Kt.g=0}})})}o.initialize=function(){return oe(this,function p(){var V=this;return de(p,function(W){return W.g==1?_(W,vn(V),2):W.g!=3?_(W,Yn(V),3):_(W,Mn(V),0)})})};function cn(p,V){return oe(p,function W(){var E=this,O,lt;return de(W,function(z){return V in E.F?z.return(E.F[V]):(O=E.locateFile(V,""),lt=fetch(O).then(function(it){return it.arrayBuffer()}),E.F[V]=lt,z.return(lt))})})}o.overrideFile=function(p,V){this.i?this.i.overrideFile(p,V):this.B[p]=V},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(p,V){return oe(this,function W(){var E=this,O,lt,z,it,bt,It,Kt,kt,qt;return de(W,function(Et){switch(Et.g){case 1:return E.g.inputs?(O=1e3*(V==null?performance.now():V),_(Et,E.C,2)):Et.return();case 2:return _(Et,E.initialize(),3);case 3:for(lt=new E.h.PacketDataList,z=Y(Object.keys(p)),it=z.next();!it.done;it=z.next())if(bt=it.value,It=E.g.inputs[bt]){t:{var wt=E,Ut=p[bt];switch(It.type){case"video":var Dt=wt.m[It.stream];if(Dt||(Dt=new yn(wt.h,wt.D),wt.m[It.stream]=Dt),wt=Dt,wt.l===0&&(wt.l=wt.h.createTexture()),typeof HTMLVideoElement<"u"&&Ut instanceof HTMLVideoElement){var ce=Ut.videoWidth;Dt=Ut.videoHeight}else typeof HTMLImageElement<"u"&&Ut instanceof HTMLImageElement?(ce=Ut.naturalWidth,Dt=Ut.naturalHeight):(ce=Ut.width,Dt=Ut.height);Dt={glName:wt.l,width:ce,height:Dt},ce=wt.g,ce.canvas.width=Dt.width,ce.canvas.height=Dt.height,ce.activeTexture(ce.TEXTURE0),wt.h.bindTexture2d(wt.l),ce.texImage2D(ce.TEXTURE_2D,0,ce.RGBA,ce.RGBA,ce.UNSIGNED_BYTE,Ut),wt.h.bindTexture2d(0),wt=Dt;break t;case"detections":for(Dt=wt.m[It.stream],Dt||(Dt=new zn(wt.h),wt.m[It.stream]=Dt),wt=Dt,wt.data||(wt.data=new wt.g.DetectionListData),wt.data.reset(Ut.length),Dt=0;Dt<Ut.length;++Dt){ce=Ut[Dt];var pe=wt.data,ge=pe.setBoundingBox,ke=Dt,h=ce.T,g=new Ne;Ot(g,1,h.Z),Ot(g,2,h.$),Ot(g,3,h.height),Ot(g,4,h.width),Ot(g,5,h.rotation),Ot(g,6,h.X);var G=h=new we;Pt(G,1,re(g,1)),Pt(G,2,re(g,2)),Pt(G,3,re(g,3)),Pt(G,4,re(g,4)),Pt(G,5,re(g,5));var C=re(g,6);if(C!=null&&C!=null){Ze(G.g,48);var M=G.g,Q=C;C=0>Q,Q=Math.abs(Q);var B=Q>>>0;for(Q=Math.floor((Q-B)/4294967296),Q>>>=0,C&&(Q=~Q>>>0,B=(~B>>>0)+1,4294967295<B&&(B=0,Q++,4294967295<Q&&(Q=0))),he=B,Ye=Q,C=he,B=Ye;0<B||127<C;)M.push(C&127|128),C=(C>>>7|B<<25)>>>0,B>>>=7;M.push(C)}if(He(g,G),h=Xe(h),ge.call(pe,ke,h),ce.O)for(pe=0;pe<ce.O.length;++pe)g=ce.O[pe],G=!!g.visibility,ge=wt.data,ke=ge.addNormalizedLandmark,h=Dt,g=Object.assign(Object.assign({},g),{visibility:G?g.visibility:0}),G=new ae,Ot(G,1,g.x),Ot(G,2,g.y),Ot(G,3,g.z),g.visibility&&Ot(G,4,g.visibility),M=g=new we,Pt(M,1,re(G,1)),Pt(M,2,re(G,2)),Pt(M,3,re(G,3)),Pt(M,4,re(G,4)),Pt(M,5,re(G,5)),He(G,M),g=Xe(g),ke.call(ge,h,g);if(ce.M)for(pe=0;pe<ce.M.length;++pe){if(ge=wt.data,ke=ge.addClassification,h=Dt,g=ce.M[pe],G=new et,Ot(G,2,g.Y),g.index&&Ot(G,1,g.index),g.label&&Ot(G,3,g.label),g.displayName&&Ot(G,4,g.displayName),M=g=new we,B=re(G,1),B!=null&&B!=null)if(Ze(M.g,8),C=M.g,0<=B)Ze(C,B);else{for(Q=0;9>Q;Q++)C.push(B&127|128),B>>=7;C.push(1)}Pt(M,2,re(G,2)),C=re(G,3),C!=null&&(C=xn(C),Ze(M.g,26),Ze(M.g,C.length),$e(M,M.g.end()),$e(M,C)),C=re(G,4),C!=null&&(C=xn(C),Ze(M.g,34),Ze(M.g,C.length),$e(M,M.g.end()),$e(M,C)),He(G,M),g=Xe(g),ke.call(ge,h,g)}}wt=wt.data;break t;default:wt={}}}switch(Kt=wt,kt=It.stream,It.type){case"video":lt.pushTexture2d(Object.assign(Object.assign({},Kt),{stream:kt,timestamp:O}));break;case"detections":qt=Kt,qt.stream=kt,qt.timestamp=O,lt.pushDetectionList(qt);break;default:throw Error("Unknown input config type: '"+It.type+"'")}}return E.i.send(lt),_(Et,E.C,4);case 4:lt.delete(),Et.g=0}})})};function Tn(p,V,W){return oe(p,function E(){var O,lt,z,it,bt,It,Kt=this,kt,qt,Et,wt,Ut,Dt,ce,pe;return de(E,function(ge){switch(ge.g){case 1:if(!W)return ge.return(V);for(O={},lt=0,z=Y(Object.keys(W)),it=z.next();!it.done;it=z.next())bt=it.value,It=W[bt],typeof It!="string"&&It.type==="texture"&&V[It.stream]!==void 0&&++lt;1<lt&&(Kt.G=!1),kt=Y(Object.keys(W)),it=kt.next();case 2:if(it.done){ge.g=4;break}if(qt=it.value,Et=W[qt],typeof Et=="string")return ce=O,pe=qt,_(ge,Dn(Kt,qt,V[Et]),14);if(wt=V[Et.stream],Et.type==="detection_list"){if(wt){for(var ke=wt.getRectList(),h=wt.getLandmarksList(),g=wt.getClassificationsList(),G=[],C=0;C<ke.size();++C){var M=ke.get(C);t:{var Q=new Ne;for(M=new Ce(M);Bt(M);)switch(M.i){case 13:var B=sn(M.g);Ot(Q,1,B);break;case 21:B=sn(M.g),Ot(Q,2,B);break;case 29:B=sn(M.g),Ot(Q,3,B);break;case 37:B=sn(M.g),Ot(Q,4,B);break;case 45:B=sn(M.g),Ot(Q,5,B);break;case 48:for(var tt=M.g,ct=128,s=0,X=B=0;4>X&&128<=ct;X++)ct=tt.h[tt.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=tt.h[tt.g++],s|=(ct&127)<<28,B|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=tt.h[tt.g++],B|=(ct&127)<<7*X+3;128>ct?(tt=s>>>0,ct=B>>>0,(B=ct&2147483648)&&(tt=~tt+1>>>0,ct=~ct>>>0,tt==0&&(ct=ct+1>>>0)),tt=4294967296*ct+(tt>>>0),B=B?-tt:tt):(tt.l=!0,B=void 0),Ot(Q,6,B);break;default:if(!ee(Q,M))break t}}Q={Z:te(Q,1),$:te(Q,2),height:te(Q,3),width:te(Q,4),rotation:te(Q,5,0),X:Wt(Q,6)},B=h.get(C);t:for(M=new Tt,B=new Ce(B);Bt(B);)switch(B.i){case 10:tt=zt(B,new ae,ue),fe(M,tt,ae,void 0);break;default:if(!ee(M,B))break t}M=hn(M,ae).map(fn),tt=g.get(C);t:for(B=new at,tt=new Ce(tt);Bt(tt);)switch(tt.i){case 10:B.addClassification(zt(tt,new et,ot));break;default:if(!ee(B,tt))break t}Q={T:Q,O:M,M:tn(B)},G.push(Q)}ke=G}else ke=[];O[qt]=ke,ge.g=7;break}if(Et.type==="proto_list"){if(wt){for(ke=Array(wt.size()),h=0;h<wt.size();h++)ke[h]=wt.get(h);wt.delete()}else ke=[];O[qt]=ke,ge.g=7;break}if(wt===void 0){ge.g=3;break}if(Et.type==="float_list"){O[qt]=wt,ge.g=7;break}if(Et.type==="proto"){O[qt]=wt,ge.g=7;break}if(Et.type!=="texture")throw Error("Unknown output config type: '"+Et.type+"'");return Ut=Kt.s[qt],Ut||(Ut=new yn(Kt.h,Kt.D),Kt.s[qt]=Ut),_(ge,Fe(Ut,wt,Kt.G),13);case 13:Dt=ge.h,O[qt]=Dt;case 7:Et.transform&&O[qt]&&(O[qt]=Et.transform(O[qt])),ge.g=3;break;case 14:ce[pe]=ge.h;case 3:it=kt.next(),ge.g=2;break;case 4:return ge.return(O)}})})}function Dn(p,V,W){return oe(p,function E(){var O=this,lt;return de(E,function(z){return typeof W=="number"||W instanceof Uint8Array||W instanceof O.h.Uint8BlobList?z.return(W):W instanceof O.h.Texture2dDataOut?(lt=O.s[V],lt||(lt=new yn(O.h,O.D),O.s[V]=lt),z.return(Fe(lt,W,O.G))):z.return(void 0)})})}function $n(p,V){for(var W=V.name||"$",E=[].concat(k(V.wants)),O=new p.h.StringList,lt=Y(V.wants),z=lt.next();!z.done;z=lt.next())O.push_back(z.value);lt=p.h.PacketListener.implement({onResults:function(it){for(var bt={},It=0;It<V.wants.length;++It)bt[E[It]]=it.get(It);var Kt=p.listeners[W];Kt&&(p.C=Tn(p,bt,V.outs).then(function(kt){kt=Kt(kt);for(var qt=0;qt<V.wants.length;++qt){var Et=bt[E[qt]];typeof Et=="object"&&Et.hasOwnProperty&&Et.hasOwnProperty("delete")&&Et.delete()}kt&&(p.C=kt)}))}}),p.i.attachMultiListener(O,lt),O.delete()}o.onResults=function(p,V){this.listeners[V||"$"]=p},Re("Solution",En),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Cn(p){var V=this;p=p||{},this.g=new En({locateFile:p.locateFile,files:function(W){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:wn(W.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(W){return oe(V,function E(){var O,lt,z=this,it;return de(E,function(bt){return bt.g==1?(O=wn(W),lt="third_party/mediapipe/modules/selfie_segmentation/"+O,_(bt,cn(z.g,O),2)):(it=bt.h,z.g.overrideFile(lt,it),bt.return(!0))})})}}}})}o=Cn.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(p){this.g.onResults(p)},o.initialize=function(){return oe(this,function p(){var V=this;return de(p,function(W){return _(W,V.g.initialize(),0)})})},o.reset=function(){this.g.reset()},o.send=function(p){return oe(this,function V(){var W=this;return de(V,function(E){return _(E,W.g.send(p),0)})})},o.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(mi);const pi={};(function(){var o;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function m(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var x=l[v];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var y=m(this);function I(l,v){if(v)t:{var x=y;l=l.split(".");for(var T=0;T<l.length-1;T++){var J=l[T];if(!(J in x))break t;x=x[J]}l=l[l.length-1],T=x[l],v=v(T),v!=T&&v!=null&&r(x,l,{configurable:!0,writable:!0,value:v})}}I("Symbol",function(l){function v(i){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(T+(i||"")+"_"+J++,i)}function x(i,d){this.g=i,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var T="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return v}),I("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<v.length;x++){var T=y[v[x]];typeof T=="function"&&typeof T.prototype[l]!="function"&&r(T.prototype,l,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return l});function H(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function Y(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function k(l){if(!(l instanceof Array)){l=Y(l);for(var v,x=[];!(v=l.next()).done;)x.push(v.value);l=x}return l}var nt=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},P;if(typeof Object.setPrototypeOf=="function")P=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}P=st?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var dt=P;function ht(l,v){if(l.prototype=nt(v.prototype),l.prototype.constructor=l,dt)dt(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var T=Object.getOwnPropertyDescriptor(v,x);T&&Object.defineProperty(l,x,T)}else l[x]=v[x];l.ra=v.prototype}function Ft(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Lt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Ft.prototype.s=function(l){this.h=l};function At(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Ft.prototype.return=function(l){this.j={return:l},this.g=this.u};function _(l,v,x){return l.g=x,{value:v}}function Ee(l){this.g=new Ft,this.h=l}function an(l,v){Lt(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(T){return{value:T,done:!0}},v,l.g.return):(l.g.return(v),$t(l))}function We(l,v,x,T){try{var J=v.call(l.g.i,x);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return l.g.l=!1,J;var i=J.value}catch(d){return l.g.i=null,At(l.g,d),$t(l)}return l.g.i=null,T.call(l.g,i),$t(l)}function $t(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(x){l.g.h=void 0,At(l.g,x)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function An(l){this.next=function(v){return Lt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=$t(l)),v},this.throw=function(v){return Lt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(At(l.g,v),v=$t(l)),v},this.return=function(v){return an(l,v)},this[Symbol.iterator]=function(){return this}}function de(l){function v(T){return l.next(T)}function x(T){return l.throw(T)}return new Promise(function(T,J){function i(d){d.done?T(d.value):Promise.resolve(d.value).then(v,x).then(i,J)}i(l.next())})}function gt(l){return de(new An(new Ee(l)))}I("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var Z=this.j();try{d(Z.resolve,Z.reject)}catch(e){Z.reject(e)}}function x(){this.g=null}function T(d){return d instanceof v?d:new v(function(Z){Z(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var Z=this;this.i(function(){Z.l()})}this.g.push(d)};var J=y.setTimeout;x.prototype.i=function(d){J(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var Z=0;Z<d.length;++Z){var e=d[Z];d[Z]=null;try{e()}catch(c){this.j(c)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(c){return function(f){e||(e=!0,c.call(Z,f))}}var Z=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var Z=d!=null;break t;case"function":Z=!0;break t;default:Z=!1}Z?this.A(d):this.o(d)}},v.prototype.A=function(d){var Z=void 0;try{Z=d.then}catch(e){this.l(e);return}typeof Z=="function"?this.I(Z,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,Z){if(this.h!=0)throw Error("Cannot settle("+d+", "+Z+"): Promise already settled in state"+this.h);this.h=d,this.i=Z,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;J(function(){if(d.C()){var Z=y.console;typeof Z<"u"&&Z.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=y.CustomEvent,Z=y.Event,e=y.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof Z=="function"?d=new Z("unhandledrejection",{cancelable:!0}):(d=y.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)i.h(this.g[d]);this.g=null}};var i=new x;return v.prototype.H=function(d){var Z=this.j();d.M(Z.resolve,Z.reject)},v.prototype.I=function(d,Z){var e=this.j();try{d.call(Z,e.resolve,e.reject)}catch(c){e.reject(c)}},v.prototype.then=function(d,Z){function e(u,a){return typeof u=="function"?function(b){try{c(u(b))}catch(S){f(S)}}:a}var c,f,t=new v(function(u,a){c=u,f=a});return this.M(e(d,c),e(Z,f)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,Z){function e(){switch(c.h){case 1:d(c.i);break;case 2:Z(c.i);break;default:throw Error("Unexpected state: "+c.h)}}var c=this;this.g==null?i.h(e):this.g.push(e),this.s=!0},v.resolve=T,v.reject=function(d){return new v(function(Z,e){e(d)})},v.race=function(d){return new v(function(Z,e){for(var c=Y(d),f=c.next();!f.done;f=c.next())T(f.value).M(Z,e)})},v.all=function(d){var Z=Y(d),e=Z.next();return e.done?T([]):new v(function(c,f){function t(b){return function(S){u[b]=S,a--,a==0&&c(u)}}var u=[],a=0;do u.push(void 0),a++,T(e.value).M(t(u.length-1),f),e=Z.next();while(!e.done)})},v});function pn(l,v){l instanceof String&&(l+="");var x=0,T=!1,J={next:function(){if(!T&&x<l.length){var i=x++;return{value:v(i,l[i]),done:!1}}return T=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var jn=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var T=arguments[x];if(T)for(var J in T)Object.prototype.hasOwnProperty.call(T,J)&&(l[J]=T[J])}return l};I("Object.assign",function(l){return l||jn}),I("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),I("Array.prototype.includes",function(l){return l||function(v,x){var T=this;T instanceof String&&(T=String(T));var J=T.length;for(x=x||0,0>x&&(x=Math.max(x+J,0));x<J;x++){var i=T[x];if(i===v||Object.is(i,v))return!0}return!1}}),I("String.prototype.includes",function(l){return l||function(v,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,x||0)!==-1}}),I("Array.prototype.keys",function(l){return l||function(){return pn(this,function(v){return v})}});var Re=this||self;function Jt(l,v){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var T;l.length&&(T=l.shift());)l.length||v===void 0?x[T]&&x[T]!==Object.prototype[T]?x=x[T]:x=x[T]={}:x[T]=v}function Te(){throw Error("Invalid UTF8")}function on(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Xn,Hn=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function kn(l){var v;v===void 0&&(v=0),Ae(),v=dn[v];for(var x=Array(Math.floor(l.length/3)),T=v[64]||"",J=0,i=0;J<l.length-2;J+=3){var d=l[J],Z=l[J+1],e=l[J+2],c=v[d>>2];d=v[(d&3)<<4|Z>>4],Z=v[(Z&15)<<2|e>>6],e=v[e&63],x[i++]=c+d+Z+e}switch(c=0,e=T,l.length-J){case 2:c=l[J+1],e=v[(c&15)<<2]||T;case 1:l=l[J],x[i]=v[l>>2]+v[(l&3)<<4|c>>4]+e+T}return x.join("")}function Fn(l){var v=l.length,x=3*v/4;x%3?x=Math.floor(x):"=.".indexOf(l[v-1])!=-1&&(x="=.".indexOf(l[v-2])!=-1?x-2:x-1);var T=new Uint8Array(x),J=0;return Pe(l,function(i){T[J++]=i}),J!==x?T.subarray(0,J):T}function Pe(l,v){function x(e){for(;T<l.length;){var c=l.charAt(T++),f=bn[c];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(c))throw Error("Unknown base64 encoding at char: "+c)}return e}Ae();for(var T=0;;){var J=x(-1),i=x(0),d=x(64),Z=x(64);if(Z===64&&J===-1)break;v(J<<2|i>>4),d!=64&&(v(i<<4&240|d>>2),Z!=64&&v(d<<6&192|Z))}}function Ae(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var T=l.concat(v[x].split(""));dn[x]=T;for(var J=0;J<T.length;J++){var i=T[J];bn[i]===void 0&&(bn[i]=J)}}}}var In=typeof Uint8Array=="function";function Vn(l){return In&&l!=null&&l instanceof Uint8Array}var he;function Ye(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",ne=0,Ve=0;function sn(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Fn(l);if(l.constructor===Ye)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Vn(v)?v:typeof v=="string"?Fn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Me(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Ce(this,l)}function Ce(l,v){l.h=sn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Bt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function Ie(l){var v=l.h,x=v[l.g],T=x&127;if(128>x)return l.g+=1,Bt(l),T;if(x=v[l.g+1],T|=(x&127)<<7,128>x)return l.g+=2,Bt(l),T;if(x=v[l.g+2],T|=(x&127)<<14,128>x)return l.g+=3,Bt(l),T;if(x=v[l.g+3],T|=(x&127)<<21,128>x)return l.g+=4,Bt(l),T;if(x=v[l.g+4],l.g+=5,T|=(x&15)<<28,128>x)return Bt(l),T;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Bt(l),T}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function we(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function $e(l){var v={},x=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=x,v=this.l,zt.length?(x=zt.pop(),v&&(x.v=v.v),l&&Ce(x,l),l=x):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var x=Ie(l.g)>>>0;if(v=x>>>3,x&=7,!(0<=x&&5>=x))throw Me(x,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=x,!0}function Pt(l){switch(l.h){case 0:if(l.h!=0)Pt(l);else t:{l=l.g;for(var v=l.g,x=v+10;v<x;)if((l.h[v++]&128)===0){l.g=v,Bt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Bt(l);break;case 2:l.h!=2?Pt(l):(v=Ie(l.g)>>>0,l=l.g,l.g+=v,Bt(l));break;case 5:l=l.g,l.g+=4,Bt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Pt(l)}while(1);break;default:throw Me(l.h,l.j)}}var je=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Se(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Wn(l,v){if(v=v.ca){Se(l,l.g.end());for(var x=0;x<v.length;x++)Se(l,v[x])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(l,v){Object.isFrozen(l)||(ln?l[ln]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function un(l){var v;return ln?v=l[ln]:v=l.N,v==null?0:v}function ve(l){return Qe(l,1),l}function Le(l){return Array.isArray(l)?!!(un(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Qe(l,2)}function re(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var De=Object.freeze(ve([]));function te(l){if(Le(l.m))throw Error("Cannot mutate an immutable Message")}var Ot=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,x){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[v],x!=null)?x:l.m[v+l.h]}function Nt(l,v,x,T){T=T===void 0?!1:T,te(l),v<l.i&&!T?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Wt(l,v,x,T){x=x===void 0?!0:x,T=T===void 0?!1:T;var J=fe(l,v,T);return J==null&&(J=De),Le(l.m)?x&&(Ge(J),Object.freeze(J)):(J===De||Le(J))&&(J=ve(J.slice()),Nt(l,v,J,T)),J}function ie(l,v,x){return l=fe(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function He(l,v,x,T){l.j||(l.j={});var J=Le(l.m),i=l.j[x];if(!i){T=Wt(l,x,!0,T===void 0?!1:T),i=[],J=J||Le(T);for(var d=0;d<T.length;d++)i[d]=new v(T[d]),J&&Ge(i[d].m);J&&(Ge(i),Object.freeze(i)),l.j[x]=i}return i}function ee(l,v,x,T,J){var i=i===void 0?!1:i;return te(l),i=He(l,x,v,i),x=T||new x,l=Wt(l,v),J!=null?(i.splice(J,0,x),l.splice(J,0,x.m)):(i.push(x),l.push(x.m)),x}function oe(l,v){return l=fe(l,v),l==null?0:l}function et(l,v){return l=fe(l,v),l==null?"":l}function ot(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Vn(l))return kn(l);if(l instanceof Ye){var v=l.L;return v=v==null||typeof v=="string"?v:In&&v instanceof Uint8Array?kn(v):null,(l.L=v)||""}}}return l}function at(l){var v=ue;return v=v===void 0?Tt:v,ae(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=ae(l,v);else if(re(l)){var x={},T;for(T in l)x[T]=_t(l[T],v);l=x}else l=v(l);return l}}function ae(l,v){for(var x=l.slice(),T=0;T<x.length;T++)x[T]=_t(x[T],v);return Array.isArray(l)&&un(l)&1&&ve(x),x}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=ot(l),Array.isArray(l)?at(l):l)}function Tt(l){return Vn(l)?new Uint8Array(l):l}function me(l,v,x){l||(l=Ne),Ne=null;var T=this.constructor.h;l||(l=T?[T]:[]),this.h=(T?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(T=this.m.length,l=T-1,T&&(T=this.m[l],re(T))){this.i=l-this.h,this.g=T;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(v=0;v<x.length;v++)if(l=x[v],l<this.i)l+=this.h,(T=this.m[l])?Array.isArray(T)&&ve(T):this.m[l]=De;else{T=this.g||(this.g=this.m[this.i+this.h]={});var J=T[l];J?Array.isArray(J)&&ve(J):T[l]=De}}me.prototype.toJSON=function(){return at(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ne;function qe(){me.apply(this,arguments)}if(ht(qe,me),Ot){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(l,v,x){if(x){var T={},J;for(J in x){var i=x[J],d=i.ja;d||(T.F=i.pa||i.ha.P,i.ba?(T.U=Sn(i.ba),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.U)}}(T)):i.da?(T.T=Be(i.X.g,i.da),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.T)}}(T)):d=T.F,i.ja=d),d(v,l,i.X),T={F:T.F,U:T.U,T:T.T}}}Wn(v,l)}var yn=Symbol();function Fe(l,v,x){return l[yn]||(l[yn]=function(T,J){return v(T,J,x)})}function en(l){var v=l[yn];if(!v){var x=p(l);v=function(T,J){return V(T,J,x)},l[yn]=v}return v}function zn(l){var v=l.ba;if(v)return en(v);if(v=l.oa)return Fe(l.X.g,v,l.da)}function nn(l){var v=zn(l),x=l.X,T=l.ha.O;return v?function(J,i){return T(J,i,x,v)}:function(J,i){return T(J,i,x)}}function Je(l,v,x,T,J,i){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(v,l[0]),d++);d<l.length;){x=l[d++];for(var Z=d+1;Z<l.length&&typeof l[Z]!="number";)Z++;var e=l[d++];switch(Z-=d,Z){case 0:T(v,x,e);break;case 1:T(v,x,e,l[d++]);break;case 2:J(v,x,e,l[d++],l[d++]);break;case 3:Z=l[d++];var c=l[d++],f=l[d++];Array.isArray(f)?J(v,x,e,Z,c,f):i(v,x,e,Z,c,f);break;case 4:i(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+Z)}}return v}var Zn=Symbol();function Sn(l){var v=l[Zn];if(!v){var x=cn(l);v=function(T,J){return E(T,J,x)},l[Zn]=v}return v}function Be(l,v){var x=l[Zn];return x||(x=function(T,J){return fn(T,J,v)},l[Zn]=x),x}var En=Symbol();function rn(l,v){l.push(v)}function vn(l,v,x){l.push(v,x.P)}function Yn(l,v,x,T,J){var i=Sn(J),d=x.P;l.push(v,function(Z,e,c){return d(Z,e,c,T,i)})}function Mn(l,v,x,T,J,i){var d=Be(T,i),Z=x.P;l.push(v,function(e,c,f){return Z(e,c,f,T,d)})}function cn(l){var v=l[En];return v||Je(l,l[En]=[],rn,vn,Yn,Mn)}var Tn=Symbol();function Dn(l,v){l[0]=v}function $n(l,v,x,T){var J=x.O;l[v]=T?function(i,d,Z){return J(i,d,Z,T)}:J}function wn(l,v,x,T,J,i){var d=x.O,Z=en(J);l[v]=function(e,c,f){return d(e,c,f,T,Z,i)}}function Cn(l,v,x,T,J,i,d){var Z=x.O,e=Fe(T,J,i);l[v]=function(c,f,t){return Z(c,f,t,T,e,d)}}function p(l){var v=l[Tn];return v||Je(l,l[Tn]={},Dn,$n,wn,Cn)}function V(l,v,x){for(;Xe(v)&&v.h!=4;){var T=v.i,J=x[T];if(!J){var i=x[0];i&&(i=i[T])&&(J=x[T]=nn(i))}if((!J||!J(v,l,T))&&(J=v,T=l,i=J.j,Pt(J),!J.W)){var d=J.g.h;J=J.g.g,J=i===J?he||(he=new Uint8Array(0)):Oe?d.slice(i,J):new Uint8Array(d.subarray(i,J)),(i=T.ca)?i.push(J):T.ca=[J]}}return l}function W(l,v,x){if(je.length){var T=je.pop();l&&(Ce(T.g,l),T.i=-1,T.h=-1),l=T}else l=new $e(l);try{return V(new v,l,p(x))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>je.length&&je.push(l)}}function E(l,v,x){for(var T=x.length,J=T%2==1,i=J?1:0;i<T;i+=2)(0,x[i+1])(v,l,x[i]);fn(l,v,J?x[0]:void 0)}function O(l,v){var x=new _e;E(l,x,cn(v)),Se(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var T=v.length,J=0,i=0;i<T;i++){var d=v[i];l.set(d,J),J+=d.length}return x.i=[l],l}function lt(l,v){return{O:l,P:v}}var z=lt(function(l,v,x){if(l.h!==5)return!1;l=l.g;var T=l.h[l.g],J=l.h[l.g+1],i=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Bt(l),J=(T<<0|J<<8|i<<16|d<<24)>>>0,l=2*(J>>31)+1,T=J>>>23&255,J&=8388607,Nt(v,x,T==255?J?NaN:1/0*l:T==0?l*Math.pow(2,-149)*J:l*Math.pow(2,T-150)*(J+Math.pow(2,23))),!0},function(l,v,x){if(v=fe(v,x),v!=null){we(l.g,8*x+5),l=l.g;var T=v;T=(x=0>T?1:0)?-T:T,T===0?0<1/T?ne=Ve=0:(Ve=0,ne=2147483648):isNaN(T)?(Ve=0,ne=2147483647):34028234663852886e22<T?(Ve=0,ne=(x<<31|2139095040)>>>0):11754943508222875e-54>T?(T=Math.round(T/Math.pow(2,-149)),Ve=0,ne=(x<<31|T)>>>0):(v=Math.floor(Math.log(T)/Math.LN2),T*=Math.pow(2,-v),T=Math.round(8388608*T),16777216<=T&&++v,Ve=0,ne=(x<<31|v+127<<23|T&8388607)>>>0),x=ne,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),it=lt(function(l,v,x){if(l.h!==0)return!1;for(var T=l.g,J=128,i=0,d=l=0;4>d&&128<=J;d++)J=T.h[T.g++],Bt(T),i|=(J&127)<<7*d;if(128<=J&&(J=T.h[T.g++],Bt(T),i|=(J&127)<<28,l|=(J&127)>>4),128<=J)for(d=0;5>d&&128<=J;d++)J=T.h[T.g++],Bt(T),l|=(J&127)<<7*d+3;if(128>J)T=i>>>0,J=l>>>0,(l=J&2147483648)&&(T=~T+1>>>0,J=~J>>>0,T==0&&(J=J+1>>>0)),T=4294967296*J+(T>>>0);else throw Qt();return Nt(v,x,l?-T:T),!0},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null){we(l.g,8*x),l=l.g;var T=v;for(x=0>T,T=Math.abs(T),v=T>>>0,T=Math.floor((T-v)/4294967296),T>>>=0,x&&(T=~T>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,T++,4294967295<T&&(T=0))),ne=v,Ve=T,x=ne,v=Ve;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=lt(function(l,v,x){return l.h!==0?!1:(Nt(v,x,Ie(l.g)),!0)},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null)if(we(l.g,8*x),l=l.g,x=v,0<=x)we(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),It=lt(function(l,v,x){if(l.h!==2)return!1;var T=Ie(l.g)>>>0;l=l.g;var J=l.g;l.g+=T,Bt(l),l=l.h;var i;if(Hn)(i=Xn)||(i=Xn=new TextDecoder("utf-8",{fatal:!0})),i=i.decode(l.subarray(J,J+T));else{T=J+T;for(var d=[],Z=null,e,c,f;J<T;)e=l[J++],128>e?d.push(e):224>e?J>=T?Te():(c=l[J++],194>e||(c&192)!==128?(J--,Te()):d.push((e&31)<<6|c&63)):240>e?J>=T-1?Te():(c=l[J++],(c&192)!==128||e===224&&160>c||e===237&&160<=c||((i=l[J++])&192)!==128?(J--,Te()):d.push((e&15)<<12|(c&63)<<6|i&63)):244>=e?J>=T-2?Te():(c=l[J++],(c&192)!==128||(e<<28)+(c-144)>>30!==0||((i=l[J++])&192)!==128||((f=l[J++])&192)!==128?(J--,Te()):(e=(e&7)<<18|(c&63)<<12|(i&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(Z=on(Z,d),d.length=0);i=on(Z,d)}return Nt(v,x,i),!0},function(l,v,x){if(v=fe(v,x),v!=null){var T=!1;if(T=T===void 0?!1:T,Nn){if(T&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(xn||(xn=new TextEncoder)).encode(v)}else{for(var J=0,i=new Uint8Array(3*v.length),d=0;d<v.length;d++){var Z=v.charCodeAt(d);if(128>Z)i[J++]=Z;else{if(2048>Z)i[J++]=Z>>6|192;else{if(55296<=Z&&57343>=Z){if(56319>=Z&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){Z=1024*(Z-55296)+e-56320+65536,i[J++]=Z>>18|240,i[J++]=Z>>12&63|128,i[J++]=Z>>6&63|128,i[J++]=Z&63|128;continue}else d--}if(T)throw Error("Found an unpaired surrogate");Z=65533}i[J++]=Z>>12|224,i[J++]=Z>>6&63|128}i[J++]=Z&63|128}}v=i.subarray(0,J)}we(l.g,8*x+2),we(l.g,v.length),Se(l,l.g.end()),Se(l,v)}}),Kt=lt(function(l,v,x,T,J){if(l.h!==2)return!1;v=ee(v,x,T),x=l.g.i,T=Ie(l.g)>>>0;var i=l.g.g+T,d=i-x;if(0>=d&&(l.g.i=i,J(v,l),d=i-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(T+" bytes, instead read "+(T-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=i,l.g.i=x,!0},function(l,v,x,T,J){if(v=He(v,T,x),v!=null)for(T=0;T<v.length;T++){var i=l;we(i.g,8*x+2);var d=i.g.end();Se(i,d),d.push(i.h),i=d,J(v[T],l),d=l;var Z=i.pop();for(Z=d.h+d.g.length()-Z;127<Z;)i.push(Z&127|128),Z>>>=7,d.h++;i.push(Z),d.h++}});function kt(){qe.apply(this,arguments)}if(ht(kt,qe),Ot){var qt={};Object.defineProperties(kt,(qt[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),qt))}function Et(l){kt.call(this,l)}ht(Et,kt);function wt(){return[1,bt,2,z,3,It,4,It]}function Ut(l){kt.call(this,l,-1,ce)}ht(Ut,kt),Ut.prototype.addClassification=function(l,v){return ee(this,1,Et,l,v),this};function Dt(){return[1,Kt,Et,wt]}var ce=[1];function pe(l){kt.call(this,l)}ht(pe,kt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function ke(l){kt.call(this,l,-1,g)}ht(ke,kt);function h(){return[1,Kt,pe,ge]}var g=[1];function G(l){kt.call(this,l)}ht(G,kt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,it]}function M(l,v,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,v),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
20
|
+
`+W.getProgramInfoLog(lt));E=p.m=lt,W.useProgram(E),P=W.getUniformLocation(E,"sampler0"),p.j={I:W.getAttribLocation(E,"aVertex"),H:W.getAttribLocation(E,"aTex"),da:P},p.s=W.createBuffer(),W.bindBuffer(W.ARRAY_BUFFER,p.s),W.enableVertexAttribArray(p.j.I),W.vertexAttribPointer(p.j.I,2,W.FLOAT,!1,0,0),W.bufferData(W.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),W.STATIC_DRAW),W.bindBuffer(W.ARRAY_BUFFER,null),p.o=W.createBuffer(),W.bindBuffer(W.ARRAY_BUFFER,p.o),W.enableVertexAttribArray(p.j.H),W.vertexAttribPointer(p.j.H,2,W.FLOAT,!1,0,0),W.bufferData(W.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),W.STATIC_DRAW),W.bindBuffer(W.ARRAY_BUFFER,null),W.uniform1i(P,0)}E=p.j,W.useProgram(p.m),W.canvas.width=V.width,W.canvas.height=V.height,W.viewport(0,0,V.width,V.height),W.activeTexture(W.TEXTURE0),p.h.bindTexture2d(V.glName),W.enableVertexAttribArray(E.I),W.bindBuffer(W.ARRAY_BUFFER,p.s),W.vertexAttribPointer(E.I,2,W.FLOAT,!1,0,0),W.enableVertexAttribArray(E.H),W.bindBuffer(W.ARRAY_BUFFER,p.o),W.vertexAttribPointer(E.H,2,W.FLOAT,!1,0,0),W.bindFramebuffer(W.DRAW_FRAMEBUFFER?W.DRAW_FRAMEBUFFER:W.FRAMEBUFFER,null),W.clearColor(0,0,0,0),W.clear(W.COLOR_BUFFER_BIT),W.colorMask(!0,!0,!0,!0),W.drawArrays(W.TRIANGLE_FAN,0,4),W.disableVertexAttribArray(E.I),W.disableVertexAttribArray(E.H),W.bindBuffer(W.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function zn(p){this.g=p}var nn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Je(p,V){return V+p}function Zn(p,V){window[p]=V}function Sn(p){var V=document.createElement("script");return V.setAttribute("src",p),V.setAttribute("crossorigin","anonymous"),new Promise(function(W){V.addEventListener("load",function(){W()},!1),V.addEventListener("error",function(){W()},!1),document.body.appendChild(V)})}function Be(){return oe(this,function p(){return de(p,function(V){switch(V.g){case 1:return V.m=2,_(V,WebAssembly.instantiate(nn),4);case 4:V.g=3,V.m=0;break;case 2:return V.m=0,V.j=null,V.return(!1);case 3:return V.return(!0)}})})}function En(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Je,typeof window=="object")var V=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")V=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=V,p.options){V=Y(Object.keys(p.options));for(var W=V.next();!W.done;W=V.next()){W=W.value;var E=p.options[W].default;E!==void 0&&(this.j[W]=typeof E=="function"?E():E)}}}o=En.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function rn(p,V){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(V):p.g.files}function vn(p){return oe(p,function V(){var W=this,E,P,lt,z,it,bt,It,Ut,kt,qt,Et;return de(V,function(wt){switch(wt.g){case 1:return E=W,W.R?(P=rn(W,W.j),_(wt,Be(),2)):wt.return();case 2:if(lt=wt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:W.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:W.locateFile}),bt=P.filter(function(Kt){return Kt.data!==void 0}),It=P.filter(function(Kt){return Kt.data===void 0}),Ut=Promise.all(bt.map(function(Kt){var Dt=cn(E,Kt.url);if(Kt.path!==void 0){var ce=Kt.path;Dt=Dt.then(function(pe){return E.overrideFile(ce,pe),Promise.resolve(pe)})}return Dt})),kt=Promise.all(It.map(function(Kt){return Kt.simd===void 0||Kt.simd&<||!Kt.simd&&!lt?Sn(E.locateFile(Kt.url,E.S)):Promise.resolve()})).then(function(){return oe(E,function Kt(){var Dt,ce,pe=this;return de(Kt,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ce=window.createMediapipeSolutionsPackedAssets,_(ge,Dt(ce),2);pe.h=ge.h,ge.g=0})})}),qt=function(){return oe(E,function Kt(){var Dt=this;return de(Kt,function(ce){return Dt.g.graph&&Dt.g.graph.url?ce=_(ce,cn(Dt,Dt.g.graph.url),0):(ce.g=0,ce=void 0),ce})})}(),_(wt,Promise.all([kt,Ut,qt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return z=P.filter(function(Kt){return Kt.simd===void 0||Kt.simd&<||!Kt.simd&&!lt}).map(function(Kt){return E.locateFile(Kt.url,E.S)}),importScripts.apply(null,k(z)),_(wt,createMediapipeSolutionsWasm(Module),6);case 6:W.h=wt.h,W.l=new OffscreenCanvas(1,1),W.h.canvas=W.l,it=W.h.GL.createContext(W.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),W.h.GL.makeContextCurrent(it),wt.g=4;break;case 7:if(W.l=document.createElement("canvas"),Et=W.l.getContext("webgl2",{}),!Et&&(Et=W.l.getContext("webgl",{}),!Et))return alert("Failed to create WebGL canvas context when passing video frame."),wt.return();W.D=Et,W.h.canvas=W.l,W.h.createContext(W.l,!0,!0,{});case 4:W.i=new W.h.SolutionWasm,W.R=!1,wt.g=0}})})}function Yn(p){return oe(p,function V(){var W=this,E,P,lt,z,it,bt,It,Ut;return de(V,function(kt){if(kt.g==1){if(W.g.graph&&W.g.graph.url&&W.P===W.g.graph.url)return kt.return();if(W.o=!0,!W.g.graph||!W.g.graph.url){kt.g=2;return}return W.P=W.g.graph.url,_(kt,cn(W,W.g.graph.url),3)}for(kt.g!=2&&(E=kt.h,W.i.loadGraph(E)),P=Y(Object.keys(W.B)),lt=P.next();!lt.done;lt=P.next())z=lt.value,W.i.overrideFile(z,W.B[z]);if(W.B={},W.g.listeners)for(it=Y(W.g.listeners),bt=it.next();!bt.done;bt=it.next())It=bt.value,$n(W,It);Ut=W.j,W.j={},W.setOptions(Ut),kt.g=0})})}o.reset=function(){return oe(this,function p(){var V=this;return de(p,function(W){V.i&&(V.i.reset(),V.m={},V.s={}),W.g=0})})},o.setOptions=function(p,V){var W=this;if(V=V||this.g.options){for(var E=[],P=[],lt={},z=Y(Object.keys(p)),it=z.next();!it.done;lt={K:lt.K,L:lt.L},it=z.next()){var bt=it.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],it=V[bt],it!==void 0&&(it.onChange&&(lt.K=it.onChange,lt.L=p[bt],E.push(function(It){return function(){return oe(W,function Ut(){var kt,qt=this;return de(Ut,function(Et){if(Et.g==1)return _(Et,It.K(It.L),2);kt=Et.h,kt===!0&&(qt.o=!0),Et.g=0})})}}(lt))),it.graphOptionXref&&(bt={valueNumber:it.type===1?p[bt]:0,valueBoolean:it.type===0?p[bt]:!1,valueString:it.type===2?p[bt]:""},it=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),it.graphOptionXref),bt),P.push(it))))}(E.length!==0||P.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(P),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Mn(p){return oe(p,function V(){var W=this,E,P,lt,z,it,bt,It;return de(V,function(Ut){switch(Ut.g){case 1:if(!W.o)return Ut.return();if(!W.u){Ut.g=2;break}E=Y(W.u),P=E.next();case 3:if(P.done){Ut.g=5;break}return lt=P.value,_(Ut,lt(),4);case 4:P=E.next(),Ut.g=3;break;case 5:W.u=void 0;case 2:if(W.A){for(z=new W.h.GraphOptionChangeRequestList,it=Y(W.A),bt=it.next();!bt.done;bt=it.next())It=bt.value,z.push_back(It);W.i.changeOptions(z),z.delete(),W.A=void 0}W.o=!1,Ut.g=0}})})}o.initialize=function(){return oe(this,function p(){var V=this;return de(p,function(W){return W.g==1?_(W,vn(V),2):W.g!=3?_(W,Yn(V),3):_(W,Mn(V),0)})})};function cn(p,V){return oe(p,function W(){var E=this,P,lt;return de(W,function(z){return V in E.F?z.return(E.F[V]):(P=E.locateFile(V,""),lt=fetch(P).then(function(it){return it.arrayBuffer()}),E.F[V]=lt,z.return(lt))})})}o.overrideFile=function(p,V){this.i?this.i.overrideFile(p,V):this.B[p]=V},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(p,V){return oe(this,function W(){var E=this,P,lt,z,it,bt,It,Ut,kt,qt;return de(W,function(Et){switch(Et.g){case 1:return E.g.inputs?(P=1e3*(V==null?performance.now():V),_(Et,E.C,2)):Et.return();case 2:return _(Et,E.initialize(),3);case 3:for(lt=new E.h.PacketDataList,z=Y(Object.keys(p)),it=z.next();!it.done;it=z.next())if(bt=it.value,It=E.g.inputs[bt]){t:{var wt=E,Kt=p[bt];switch(It.type){case"video":var Dt=wt.m[It.stream];if(Dt||(Dt=new yn(wt.h,wt.D),wt.m[It.stream]=Dt),wt=Dt,wt.l===0&&(wt.l=wt.h.createTexture()),typeof HTMLVideoElement<"u"&&Kt instanceof HTMLVideoElement){var ce=Kt.videoWidth;Dt=Kt.videoHeight}else typeof HTMLImageElement<"u"&&Kt instanceof HTMLImageElement?(ce=Kt.naturalWidth,Dt=Kt.naturalHeight):(ce=Kt.width,Dt=Kt.height);Dt={glName:wt.l,width:ce,height:Dt},ce=wt.g,ce.canvas.width=Dt.width,ce.canvas.height=Dt.height,ce.activeTexture(ce.TEXTURE0),wt.h.bindTexture2d(wt.l),ce.texImage2D(ce.TEXTURE_2D,0,ce.RGBA,ce.RGBA,ce.UNSIGNED_BYTE,Kt),wt.h.bindTexture2d(0),wt=Dt;break t;case"detections":for(Dt=wt.m[It.stream],Dt||(Dt=new zn(wt.h),wt.m[It.stream]=Dt),wt=Dt,wt.data||(wt.data=new wt.g.DetectionListData),wt.data.reset(Kt.length),Dt=0;Dt<Kt.length;++Dt){ce=Kt[Dt];var pe=wt.data,ge=pe.setBoundingBox,ke=Dt,h=ce.T,g=new Ne;Pt(g,1,h.Z),Pt(g,2,h.$),Pt(g,3,h.height),Pt(g,4,h.width),Pt(g,5,h.rotation),Pt(g,6,h.X);var G=h=new we;Ot(G,1,re(g,1)),Ot(G,2,re(g,2)),Ot(G,3,re(g,3)),Ot(G,4,re(g,4)),Ot(G,5,re(g,5));var C=re(g,6);if(C!=null&&C!=null){Ze(G.g,48);var M=G.g,Q=C;C=0>Q,Q=Math.abs(Q);var B=Q>>>0;for(Q=Math.floor((Q-B)/4294967296),Q>>>=0,C&&(Q=~Q>>>0,B=(~B>>>0)+1,4294967295<B&&(B=0,Q++,4294967295<Q&&(Q=0))),he=B,Ye=Q,C=he,B=Ye;0<B||127<C;)M.push(C&127|128),C=(C>>>7|B<<25)>>>0,B>>>=7;M.push(C)}if(Fe(g,G),h=Xe(h),ge.call(pe,ke,h),ce.O)for(pe=0;pe<ce.O.length;++pe)g=ce.O[pe],G=!!g.visibility,ge=wt.data,ke=ge.addNormalizedLandmark,h=Dt,g=Object.assign(Object.assign({},g),{visibility:G?g.visibility:0}),G=new ae,Pt(G,1,g.x),Pt(G,2,g.y),Pt(G,3,g.z),g.visibility&&Pt(G,4,g.visibility),M=g=new we,Ot(M,1,re(G,1)),Ot(M,2,re(G,2)),Ot(M,3,re(G,3)),Ot(M,4,re(G,4)),Ot(M,5,re(G,5)),Fe(G,M),g=Xe(g),ke.call(ge,h,g);if(ce.M)for(pe=0;pe<ce.M.length;++pe){if(ge=wt.data,ke=ge.addClassification,h=Dt,g=ce.M[pe],G=new nt,Pt(G,2,g.Y),g.index&&Pt(G,1,g.index),g.label&&Pt(G,3,g.label),g.displayName&&Pt(G,4,g.displayName),M=g=new we,B=re(G,1),B!=null&&B!=null)if(Ze(M.g,8),C=M.g,0<=B)Ze(C,B);else{for(Q=0;9>Q;Q++)C.push(B&127|128),B>>=7;C.push(1)}Ot(M,2,re(G,2)),C=re(G,3),C!=null&&(C=xn(C),Ze(M.g,26),Ze(M.g,C.length),$e(M,M.g.end()),$e(M,C)),C=re(G,4),C!=null&&(C=xn(C),Ze(M.g,34),Ze(M.g,C.length),$e(M,M.g.end()),$e(M,C)),Fe(G,M),g=Xe(g),ke.call(ge,h,g)}}wt=wt.data;break t;default:wt={}}}switch(Ut=wt,kt=It.stream,It.type){case"video":lt.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:kt,timestamp:P}));break;case"detections":qt=Ut,qt.stream=kt,qt.timestamp=P,lt.pushDetectionList(qt);break;default:throw Error("Unknown input config type: '"+It.type+"'")}}return E.i.send(lt),_(Et,E.C,4);case 4:lt.delete(),Et.g=0}})})};function Tn(p,V,W){return oe(p,function E(){var P,lt,z,it,bt,It,Ut=this,kt,qt,Et,wt,Kt,Dt,ce,pe;return de(E,function(ge){switch(ge.g){case 1:if(!W)return ge.return(V);for(P={},lt=0,z=Y(Object.keys(W)),it=z.next();!it.done;it=z.next())bt=it.value,It=W[bt],typeof It!="string"&&It.type==="texture"&&V[It.stream]!==void 0&&++lt;1<lt&&(Ut.G=!1),kt=Y(Object.keys(W)),it=kt.next();case 2:if(it.done){ge.g=4;break}if(qt=it.value,Et=W[qt],typeof Et=="string")return ce=P,pe=qt,_(ge,Dn(Ut,qt,V[Et]),14);if(wt=V[Et.stream],Et.type==="detection_list"){if(wt){for(var ke=wt.getRectList(),h=wt.getLandmarksList(),g=wt.getClassificationsList(),G=[],C=0;C<ke.size();++C){var M=ke.get(C);t:{var Q=new Ne;for(M=new Ce(M);Bt(M);)switch(M.i){case 13:var B=sn(M.g);Pt(Q,1,B);break;case 21:B=sn(M.g),Pt(Q,2,B);break;case 29:B=sn(M.g),Pt(Q,3,B);break;case 37:B=sn(M.g),Pt(Q,4,B);break;case 45:B=sn(M.g),Pt(Q,5,B);break;case 48:for(var tt=M.g,ct=128,s=0,X=B=0;4>X&&128<=ct;X++)ct=tt.h[tt.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=tt.h[tt.g++],s|=(ct&127)<<28,B|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=tt.h[tt.g++],B|=(ct&127)<<7*X+3;128>ct?(tt=s>>>0,ct=B>>>0,(B=ct&2147483648)&&(tt=~tt+1>>>0,ct=~ct>>>0,tt==0&&(ct=ct+1>>>0)),tt=4294967296*ct+(tt>>>0),B=B?-tt:tt):(tt.l=!0,B=void 0),Pt(Q,6,B);break;default:if(!ee(Q,M))break t}}Q={Z:te(Q,1),$:te(Q,2),height:te(Q,3),width:te(Q,4),rotation:te(Q,5,0),X:Wt(Q,6)},B=h.get(C);t:for(M=new Tt,B=new Ce(B);Bt(B);)switch(B.i){case 10:tt=zt(B,new ae,ue),fe(M,tt,ae,void 0);break;default:if(!ee(M,B))break t}M=hn(M,ae).map(fn),tt=g.get(C);t:for(B=new at,tt=new Ce(tt);Bt(tt);)switch(tt.i){case 10:B.addClassification(zt(tt,new nt,ot));break;default:if(!ee(B,tt))break t}Q={T:Q,O:M,M:tn(B)},G.push(Q)}ke=G}else ke=[];P[qt]=ke,ge.g=7;break}if(Et.type==="proto_list"){if(wt){for(ke=Array(wt.size()),h=0;h<wt.size();h++)ke[h]=wt.get(h);wt.delete()}else ke=[];P[qt]=ke,ge.g=7;break}if(wt===void 0){ge.g=3;break}if(Et.type==="float_list"){P[qt]=wt,ge.g=7;break}if(Et.type==="proto"){P[qt]=wt,ge.g=7;break}if(Et.type!=="texture")throw Error("Unknown output config type: '"+Et.type+"'");return Kt=Ut.s[qt],Kt||(Kt=new yn(Ut.h,Ut.D),Ut.s[qt]=Kt),_(ge,He(Kt,wt,Ut.G),13);case 13:Dt=ge.h,P[qt]=Dt;case 7:Et.transform&&P[qt]&&(P[qt]=Et.transform(P[qt])),ge.g=3;break;case 14:ce[pe]=ge.h;case 3:it=kt.next(),ge.g=2;break;case 4:return ge.return(P)}})})}function Dn(p,V,W){return oe(p,function E(){var P=this,lt;return de(E,function(z){return typeof W=="number"||W instanceof Uint8Array||W instanceof P.h.Uint8BlobList?z.return(W):W instanceof P.h.Texture2dDataOut?(lt=P.s[V],lt||(lt=new yn(P.h,P.D),P.s[V]=lt),z.return(He(lt,W,P.G))):z.return(void 0)})})}function $n(p,V){for(var W=V.name||"$",E=[].concat(k(V.wants)),P=new p.h.StringList,lt=Y(V.wants),z=lt.next();!z.done;z=lt.next())P.push_back(z.value);lt=p.h.PacketListener.implement({onResults:function(it){for(var bt={},It=0;It<V.wants.length;++It)bt[E[It]]=it.get(It);var Ut=p.listeners[W];Ut&&(p.C=Tn(p,bt,V.outs).then(function(kt){kt=Ut(kt);for(var qt=0;qt<V.wants.length;++qt){var Et=bt[E[qt]];typeof Et=="object"&&Et.hasOwnProperty&&Et.hasOwnProperty("delete")&&Et.delete()}kt&&(p.C=kt)}))}}),p.i.attachMultiListener(P,lt),P.delete()}o.onResults=function(p,V){this.listeners[V||"$"]=p},Re("Solution",En),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Cn(p){var V=this;p=p||{},this.g=new En({locateFile:p.locateFile,files:function(W){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:wn(W.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(W){return oe(V,function E(){var P,lt,z=this,it;return de(E,function(bt){return bt.g==1?(P=wn(W),lt="third_party/mediapipe/modules/selfie_segmentation/"+P,_(bt,cn(z.g,P),2)):(it=bt.h,z.g.overrideFile(lt,it),bt.return(!0))})})}}}})}o=Cn.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(p){this.g.onResults(p)},o.initialize=function(){return oe(this,function p(){var V=this;return de(p,function(W){return _(W,V.g.initialize(),0)})})},o.reset=function(){this.g.reset()},o.send=function(p){return oe(this,function V(){var W=this;return de(V,function(E){return _(E,W.g.send(p),0)})})},o.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(mi);const pi={};(function(){var o;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function m(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var x=l[v];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var y=m(this);function I(l,v){if(v)t:{var x=y;l=l.split(".");for(var T=0;T<l.length-1;T++){var J=l[T];if(!(J in x))break t;x=x[J]}l=l[l.length-1],T=x[l],v=v(T),v!=T&&v!=null&&r(x,l,{configurable:!0,writable:!0,value:v})}}I("Symbol",function(l){function v(i){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(T+(i||"")+"_"+J++,i)}function x(i,d){this.g=i,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var T="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return v}),I("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<v.length;x++){var T=y[v[x]];typeof T=="function"&&typeof T.prototype[l]!="function"&&r(T.prototype,l,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return l});function F(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function Y(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function k(l){if(!(l instanceof Array)){l=Y(l);for(var v,x=[];!(v=l.next()).done;)x.push(v.value);l=x}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var dt=O;function ht(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,dt)dt(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var T=Object.getOwnPropertyDescriptor(v,x);T&&Object.defineProperty(l,x,T)}else l[x]=v[x];l.ra=v.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Lt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Ht.prototype.s=function(l){this.h=l};function At(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Ht.prototype.return=function(l){this.j={return:l},this.g=this.u};function _(l,v,x){return l.g=x,{value:v}}function Ee(l){this.g=new Ht,this.h=l}function an(l,v){Lt(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(T){return{value:T,done:!0}},v,l.g.return):(l.g.return(v),$t(l))}function We(l,v,x,T){try{var J=v.call(l.g.i,x);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return l.g.l=!1,J;var i=J.value}catch(d){return l.g.i=null,At(l.g,d),$t(l)}return l.g.i=null,T.call(l.g,i),$t(l)}function $t(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(x){l.g.h=void 0,At(l.g,x)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function An(l){this.next=function(v){return Lt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=$t(l)),v},this.throw=function(v){return Lt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(At(l.g,v),v=$t(l)),v},this.return=function(v){return an(l,v)},this[Symbol.iterator]=function(){return this}}function de(l){function v(T){return l.next(T)}function x(T){return l.throw(T)}return new Promise(function(T,J){function i(d){d.done?T(d.value):Promise.resolve(d.value).then(v,x).then(i,J)}i(l.next())})}function gt(l){return de(new An(new Ee(l)))}I("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var Z=this.j();try{d(Z.resolve,Z.reject)}catch(e){Z.reject(e)}}function x(){this.g=null}function T(d){return d instanceof v?d:new v(function(Z){Z(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var Z=this;this.i(function(){Z.l()})}this.g.push(d)};var J=y.setTimeout;x.prototype.i=function(d){J(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var Z=0;Z<d.length;++Z){var e=d[Z];d[Z]=null;try{e()}catch(c){this.j(c)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(c){return function(f){e||(e=!0,c.call(Z,f))}}var Z=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var Z=d!=null;break t;case"function":Z=!0;break t;default:Z=!1}Z?this.A(d):this.o(d)}},v.prototype.A=function(d){var Z=void 0;try{Z=d.then}catch(e){this.l(e);return}typeof Z=="function"?this.I(Z,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,Z){if(this.h!=0)throw Error("Cannot settle("+d+", "+Z+"): Promise already settled in state"+this.h);this.h=d,this.i=Z,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;J(function(){if(d.C()){var Z=y.console;typeof Z<"u"&&Z.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=y.CustomEvent,Z=y.Event,e=y.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof Z=="function"?d=new Z("unhandledrejection",{cancelable:!0}):(d=y.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)i.h(this.g[d]);this.g=null}};var i=new x;return v.prototype.H=function(d){var Z=this.j();d.M(Z.resolve,Z.reject)},v.prototype.I=function(d,Z){var e=this.j();try{d.call(Z,e.resolve,e.reject)}catch(c){e.reject(c)}},v.prototype.then=function(d,Z){function e(u,a){return typeof u=="function"?function(b){try{c(u(b))}catch(S){f(S)}}:a}var c,f,t=new v(function(u,a){c=u,f=a});return this.M(e(d,c),e(Z,f)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,Z){function e(){switch(c.h){case 1:d(c.i);break;case 2:Z(c.i);break;default:throw Error("Unexpected state: "+c.h)}}var c=this;this.g==null?i.h(e):this.g.push(e),this.s=!0},v.resolve=T,v.reject=function(d){return new v(function(Z,e){e(d)})},v.race=function(d){return new v(function(Z,e){for(var c=Y(d),f=c.next();!f.done;f=c.next())T(f.value).M(Z,e)})},v.all=function(d){var Z=Y(d),e=Z.next();return e.done?T([]):new v(function(c,f){function t(b){return function(S){u[b]=S,a--,a==0&&c(u)}}var u=[],a=0;do u.push(void 0),a++,T(e.value).M(t(u.length-1),f),e=Z.next();while(!e.done)})},v});function pn(l,v){l instanceof String&&(l+="");var x=0,T=!1,J={next:function(){if(!T&&x<l.length){var i=x++;return{value:v(i,l[i]),done:!1}}return T=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var jn=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var T=arguments[x];if(T)for(var J in T)Object.prototype.hasOwnProperty.call(T,J)&&(l[J]=T[J])}return l};I("Object.assign",function(l){return l||jn}),I("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),I("Array.prototype.includes",function(l){return l||function(v,x){var T=this;T instanceof String&&(T=String(T));var J=T.length;for(x=x||0,0>x&&(x=Math.max(x+J,0));x<J;x++){var i=T[x];if(i===v||Object.is(i,v))return!0}return!1}}),I("String.prototype.includes",function(l){return l||function(v,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,x||0)!==-1}}),I("Array.prototype.keys",function(l){return l||function(){return pn(this,function(v){return v})}});var Re=this||self;function Jt(l,v){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var T;l.length&&(T=l.shift());)l.length||v===void 0?x[T]&&x[T]!==Object.prototype[T]?x=x[T]:x=x[T]={}:x[T]=v}function Te(){throw Error("Invalid UTF8")}function on(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Xn,Fn=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function kn(l){var v;v===void 0&&(v=0),Ae(),v=dn[v];for(var x=Array(Math.floor(l.length/3)),T=v[64]||"",J=0,i=0;J<l.length-2;J+=3){var d=l[J],Z=l[J+1],e=l[J+2],c=v[d>>2];d=v[(d&3)<<4|Z>>4],Z=v[(Z&15)<<2|e>>6],e=v[e&63],x[i++]=c+d+Z+e}switch(c=0,e=T,l.length-J){case 2:c=l[J+1],e=v[(c&15)<<2]||T;case 1:l=l[J],x[i]=v[l>>2]+v[(l&3)<<4|c>>4]+e+T}return x.join("")}function Hn(l){var v=l.length,x=3*v/4;x%3?x=Math.floor(x):"=.".indexOf(l[v-1])!=-1&&(x="=.".indexOf(l[v-2])!=-1?x-2:x-1);var T=new Uint8Array(x),J=0;return Oe(l,function(i){T[J++]=i}),J!==x?T.subarray(0,J):T}function Oe(l,v){function x(e){for(;T<l.length;){var c=l.charAt(T++),f=bn[c];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(c))throw Error("Unknown base64 encoding at char: "+c)}return e}Ae();for(var T=0;;){var J=x(-1),i=x(0),d=x(64),Z=x(64);if(Z===64&&J===-1)break;v(J<<2|i>>4),d!=64&&(v(i<<4&240|d>>2),Z!=64&&v(d<<6&192|Z))}}function Ae(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var T=l.concat(v[x].split(""));dn[x]=T;for(var J=0;J<T.length;J++){var i=T[J];bn[i]===void 0&&(bn[i]=J)}}}}var In=typeof Uint8Array=="function";function Vn(l){return In&&l!=null&&l instanceof Uint8Array}var he;function Ye(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Pe=typeof Uint8Array.prototype.slice=="function",ne=0,Ve=0;function sn(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Hn(l);if(l.constructor===Ye)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Vn(v)?v:typeof v=="string"?Hn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Me(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Ce(this,l)}function Ce(l,v){l.h=sn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Bt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function Ie(l){var v=l.h,x=v[l.g],T=x&127;if(128>x)return l.g+=1,Bt(l),T;if(x=v[l.g+1],T|=(x&127)<<7,128>x)return l.g+=2,Bt(l),T;if(x=v[l.g+2],T|=(x&127)<<14,128>x)return l.g+=3,Bt(l),T;if(x=v[l.g+3],T|=(x&127)<<21,128>x)return l.g+=4,Bt(l),T;if(x=v[l.g+4],l.g+=5,T|=(x&15)<<28,128>x)return Bt(l),T;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Bt(l),T}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function we(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function $e(l){var v={},x=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=x,v=this.l,zt.length?(x=zt.pop(),v&&(x.v=v.v),l&&Ce(x,l),l=x):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var x=Ie(l.g)>>>0;if(v=x>>>3,x&=7,!(0<=x&&5>=x))throw Me(x,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=x,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var v=l.g,x=v+10;v<x;)if((l.h[v++]&128)===0){l.g=v,Bt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Bt(l);break;case 2:l.h!=2?Ot(l):(v=Ie(l.g)>>>0,l=l.g,l.g+=v,Bt(l));break;case 5:l=l.g,l.g+=4,Bt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Me(l.h,l.j)}}var je=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Se(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Wn(l,v){if(v=v.ca){Se(l,l.g.end());for(var x=0;x<v.length;x++)Se(l,v[x])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(l,v){Object.isFrozen(l)||(ln?l[ln]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function un(l){var v;return ln?v=l[ln]:v=l.N,v==null?0:v}function ve(l){return Qe(l,1),l}function Le(l){return Array.isArray(l)?!!(un(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Qe(l,2)}function re(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var De=Object.freeze(ve([]));function te(l){if(Le(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,x){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[v],x!=null)?x:l.m[v+l.h]}function Nt(l,v,x,T){T=T===void 0?!1:T,te(l),v<l.i&&!T?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Wt(l,v,x,T){x=x===void 0?!0:x,T=T===void 0?!1:T;var J=fe(l,v,T);return J==null&&(J=De),Le(l.m)?x&&(Ge(J),Object.freeze(J)):(J===De||Le(J))&&(J=ve(J.slice()),Nt(l,v,J,T)),J}function ie(l,v,x){return l=fe(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Fe(l,v,x,T){l.j||(l.j={});var J=Le(l.m),i=l.j[x];if(!i){T=Wt(l,x,!0,T===void 0?!1:T),i=[],J=J||Le(T);for(var d=0;d<T.length;d++)i[d]=new v(T[d]),J&&Ge(i[d].m);J&&(Ge(i),Object.freeze(i)),l.j[x]=i}return i}function ee(l,v,x,T,J){var i=i===void 0?!1:i;return te(l),i=Fe(l,x,v,i),x=T||new x,l=Wt(l,v),J!=null?(i.splice(J,0,x),l.splice(J,0,x.m)):(i.push(x),l.push(x.m)),x}function oe(l,v){return l=fe(l,v),l==null?0:l}function nt(l,v){return l=fe(l,v),l==null?"":l}function ot(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Vn(l))return kn(l);if(l instanceof Ye){var v=l.L;return v=v==null||typeof v=="string"?v:In&&v instanceof Uint8Array?kn(v):null,(l.L=v)||""}}}return l}function at(l){var v=ue;return v=v===void 0?Tt:v,ae(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=ae(l,v);else if(re(l)){var x={},T;for(T in l)x[T]=_t(l[T],v);l=x}else l=v(l);return l}}function ae(l,v){for(var x=l.slice(),T=0;T<x.length;T++)x[T]=_t(x[T],v);return Array.isArray(l)&&un(l)&1&&ve(x),x}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=ot(l),Array.isArray(l)?at(l):l)}function Tt(l){return Vn(l)?new Uint8Array(l):l}function me(l,v,x){l||(l=Ne),Ne=null;var T=this.constructor.h;l||(l=T?[T]:[]),this.h=(T?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(T=this.m.length,l=T-1,T&&(T=this.m[l],re(T))){this.i=l-this.h,this.g=T;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(v=0;v<x.length;v++)if(l=x[v],l<this.i)l+=this.h,(T=this.m[l])?Array.isArray(T)&&ve(T):this.m[l]=De;else{T=this.g||(this.g=this.m[this.i+this.h]={});var J=T[l];J?Array.isArray(J)&&ve(J):T[l]=De}}me.prototype.toJSON=function(){return at(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ne;function qe(){me.apply(this,arguments)}if(ht(qe,me),Pt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(l,v,x){if(x){var T={},J;for(J in x){var i=x[J],d=i.ja;d||(T.F=i.pa||i.ha.P,i.ba?(T.U=Sn(i.ba),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.U)}}(T)):i.da?(T.T=Be(i.X.g,i.da),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.T)}}(T)):d=T.F,i.ja=d),d(v,l,i.X),T={F:T.F,U:T.U,T:T.T}}}Wn(v,l)}var yn=Symbol();function He(l,v,x){return l[yn]||(l[yn]=function(T,J){return v(T,J,x)})}function en(l){var v=l[yn];if(!v){var x=p(l);v=function(T,J){return V(T,J,x)},l[yn]=v}return v}function zn(l){var v=l.ba;if(v)return en(v);if(v=l.oa)return He(l.X.g,v,l.da)}function nn(l){var v=zn(l),x=l.X,T=l.ha.O;return v?function(J,i){return T(J,i,x,v)}:function(J,i){return T(J,i,x)}}function Je(l,v,x,T,J,i){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(v,l[0]),d++);d<l.length;){x=l[d++];for(var Z=d+1;Z<l.length&&typeof l[Z]!="number";)Z++;var e=l[d++];switch(Z-=d,Z){case 0:T(v,x,e);break;case 1:T(v,x,e,l[d++]);break;case 2:J(v,x,e,l[d++],l[d++]);break;case 3:Z=l[d++];var c=l[d++],f=l[d++];Array.isArray(f)?J(v,x,e,Z,c,f):i(v,x,e,Z,c,f);break;case 4:i(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+Z)}}return v}var Zn=Symbol();function Sn(l){var v=l[Zn];if(!v){var x=cn(l);v=function(T,J){return E(T,J,x)},l[Zn]=v}return v}function Be(l,v){var x=l[Zn];return x||(x=function(T,J){return fn(T,J,v)},l[Zn]=x),x}var En=Symbol();function rn(l,v){l.push(v)}function vn(l,v,x){l.push(v,x.P)}function Yn(l,v,x,T,J){var i=Sn(J),d=x.P;l.push(v,function(Z,e,c){return d(Z,e,c,T,i)})}function Mn(l,v,x,T,J,i){var d=Be(T,i),Z=x.P;l.push(v,function(e,c,f){return Z(e,c,f,T,d)})}function cn(l){var v=l[En];return v||Je(l,l[En]=[],rn,vn,Yn,Mn)}var Tn=Symbol();function Dn(l,v){l[0]=v}function $n(l,v,x,T){var J=x.O;l[v]=T?function(i,d,Z){return J(i,d,Z,T)}:J}function wn(l,v,x,T,J,i){var d=x.O,Z=en(J);l[v]=function(e,c,f){return d(e,c,f,T,Z,i)}}function Cn(l,v,x,T,J,i,d){var Z=x.O,e=He(T,J,i);l[v]=function(c,f,t){return Z(c,f,t,T,e,d)}}function p(l){var v=l[Tn];return v||Je(l,l[Tn]={},Dn,$n,wn,Cn)}function V(l,v,x){for(;Xe(v)&&v.h!=4;){var T=v.i,J=x[T];if(!J){var i=x[0];i&&(i=i[T])&&(J=x[T]=nn(i))}if((!J||!J(v,l,T))&&(J=v,T=l,i=J.j,Ot(J),!J.W)){var d=J.g.h;J=J.g.g,J=i===J?he||(he=new Uint8Array(0)):Pe?d.slice(i,J):new Uint8Array(d.subarray(i,J)),(i=T.ca)?i.push(J):T.ca=[J]}}return l}function W(l,v,x){if(je.length){var T=je.pop();l&&(Ce(T.g,l),T.i=-1,T.h=-1),l=T}else l=new $e(l);try{return V(new v,l,p(x))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>je.length&&je.push(l)}}function E(l,v,x){for(var T=x.length,J=T%2==1,i=J?1:0;i<T;i+=2)(0,x[i+1])(v,l,x[i]);fn(l,v,J?x[0]:void 0)}function P(l,v){var x=new _e;E(l,x,cn(v)),Se(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var T=v.length,J=0,i=0;i<T;i++){var d=v[i];l.set(d,J),J+=d.length}return x.i=[l],l}function lt(l,v){return{O:l,P:v}}var z=lt(function(l,v,x){if(l.h!==5)return!1;l=l.g;var T=l.h[l.g],J=l.h[l.g+1],i=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Bt(l),J=(T<<0|J<<8|i<<16|d<<24)>>>0,l=2*(J>>31)+1,T=J>>>23&255,J&=8388607,Nt(v,x,T==255?J?NaN:1/0*l:T==0?l*Math.pow(2,-149)*J:l*Math.pow(2,T-150)*(J+Math.pow(2,23))),!0},function(l,v,x){if(v=fe(v,x),v!=null){we(l.g,8*x+5),l=l.g;var T=v;T=(x=0>T?1:0)?-T:T,T===0?0<1/T?ne=Ve=0:(Ve=0,ne=2147483648):isNaN(T)?(Ve=0,ne=2147483647):34028234663852886e22<T?(Ve=0,ne=(x<<31|2139095040)>>>0):11754943508222875e-54>T?(T=Math.round(T/Math.pow(2,-149)),Ve=0,ne=(x<<31|T)>>>0):(v=Math.floor(Math.log(T)/Math.LN2),T*=Math.pow(2,-v),T=Math.round(8388608*T),16777216<=T&&++v,Ve=0,ne=(x<<31|v+127<<23|T&8388607)>>>0),x=ne,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),it=lt(function(l,v,x){if(l.h!==0)return!1;for(var T=l.g,J=128,i=0,d=l=0;4>d&&128<=J;d++)J=T.h[T.g++],Bt(T),i|=(J&127)<<7*d;if(128<=J&&(J=T.h[T.g++],Bt(T),i|=(J&127)<<28,l|=(J&127)>>4),128<=J)for(d=0;5>d&&128<=J;d++)J=T.h[T.g++],Bt(T),l|=(J&127)<<7*d+3;if(128>J)T=i>>>0,J=l>>>0,(l=J&2147483648)&&(T=~T+1>>>0,J=~J>>>0,T==0&&(J=J+1>>>0)),T=4294967296*J+(T>>>0);else throw Qt();return Nt(v,x,l?-T:T),!0},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null){we(l.g,8*x),l=l.g;var T=v;for(x=0>T,T=Math.abs(T),v=T>>>0,T=Math.floor((T-v)/4294967296),T>>>=0,x&&(T=~T>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,T++,4294967295<T&&(T=0))),ne=v,Ve=T,x=ne,v=Ve;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=lt(function(l,v,x){return l.h!==0?!1:(Nt(v,x,Ie(l.g)),!0)},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null)if(we(l.g,8*x),l=l.g,x=v,0<=x)we(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),It=lt(function(l,v,x){if(l.h!==2)return!1;var T=Ie(l.g)>>>0;l=l.g;var J=l.g;l.g+=T,Bt(l),l=l.h;var i;if(Fn)(i=Xn)||(i=Xn=new TextDecoder("utf-8",{fatal:!0})),i=i.decode(l.subarray(J,J+T));else{T=J+T;for(var d=[],Z=null,e,c,f;J<T;)e=l[J++],128>e?d.push(e):224>e?J>=T?Te():(c=l[J++],194>e||(c&192)!==128?(J--,Te()):d.push((e&31)<<6|c&63)):240>e?J>=T-1?Te():(c=l[J++],(c&192)!==128||e===224&&160>c||e===237&&160<=c||((i=l[J++])&192)!==128?(J--,Te()):d.push((e&15)<<12|(c&63)<<6|i&63)):244>=e?J>=T-2?Te():(c=l[J++],(c&192)!==128||(e<<28)+(c-144)>>30!==0||((i=l[J++])&192)!==128||((f=l[J++])&192)!==128?(J--,Te()):(e=(e&7)<<18|(c&63)<<12|(i&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(Z=on(Z,d),d.length=0);i=on(Z,d)}return Nt(v,x,i),!0},function(l,v,x){if(v=fe(v,x),v!=null){var T=!1;if(T=T===void 0?!1:T,Nn){if(T&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(xn||(xn=new TextEncoder)).encode(v)}else{for(var J=0,i=new Uint8Array(3*v.length),d=0;d<v.length;d++){var Z=v.charCodeAt(d);if(128>Z)i[J++]=Z;else{if(2048>Z)i[J++]=Z>>6|192;else{if(55296<=Z&&57343>=Z){if(56319>=Z&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){Z=1024*(Z-55296)+e-56320+65536,i[J++]=Z>>18|240,i[J++]=Z>>12&63|128,i[J++]=Z>>6&63|128,i[J++]=Z&63|128;continue}else d--}if(T)throw Error("Found an unpaired surrogate");Z=65533}i[J++]=Z>>12|224,i[J++]=Z>>6&63|128}i[J++]=Z&63|128}}v=i.subarray(0,J)}we(l.g,8*x+2),we(l.g,v.length),Se(l,l.g.end()),Se(l,v)}}),Ut=lt(function(l,v,x,T,J){if(l.h!==2)return!1;v=ee(v,x,T),x=l.g.i,T=Ie(l.g)>>>0;var i=l.g.g+T,d=i-x;if(0>=d&&(l.g.i=i,J(v,l),d=i-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(T+" bytes, instead read "+(T-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=i,l.g.i=x,!0},function(l,v,x,T,J){if(v=Fe(v,T,x),v!=null)for(T=0;T<v.length;T++){var i=l;we(i.g,8*x+2);var d=i.g.end();Se(i,d),d.push(i.h),i=d,J(v[T],l),d=l;var Z=i.pop();for(Z=d.h+d.g.length()-Z;127<Z;)i.push(Z&127|128),Z>>>=7,d.h++;i.push(Z),d.h++}});function kt(){qe.apply(this,arguments)}if(ht(kt,qe),Pt){var qt={};Object.defineProperties(kt,(qt[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),qt))}function Et(l){kt.call(this,l)}ht(Et,kt);function wt(){return[1,bt,2,z,3,It,4,It]}function Kt(l){kt.call(this,l,-1,ce)}ht(Kt,kt),Kt.prototype.addClassification=function(l,v){return ee(this,1,Et,l,v),this};function Dt(){return[1,Ut,Et,wt]}var ce=[1];function pe(l){kt.call(this,l)}ht(pe,kt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function ke(l){kt.call(this,l,-1,g)}ht(ke,kt);function h(){return[1,Ut,pe,ge]}var g=[1];function G(l){kt.call(this,l)}ht(G,kt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,it]}function M(l,v,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,v),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
21
21
|
|
|
22
|
-
`+l.getShaderInfoLog(x));return x}function Q(l){return
|
|
22
|
+
`+l.getShaderInfoLog(x));return x}function Q(l){return Fe(l,Et,1).map(function(v){return{index:oe(v,1),score:ie(v,2),label:fe(v,3)!=null?nt(v,3):void 0,displayName:fe(v,4)!=null?nt(v,4):void 0}})}function B(l){return{x:ie(l,1),y:ie(l,2),z:ie(l,3),visibility:fe(l,4)!=null?ie(l,4):void 0}}function tt(l){return l.map(function(v){return Fe(W(v,ke,h),pe,1).map(B)})}function ct(l,v){this.h=l,this.g=v,this.l=0}function s(l,v,x){return X(l,v),typeof l.g.canvas.transferToImageBitmap=="function"?Promise.resolve(l.g.canvas.transferToImageBitmap()):x?Promise.resolve(l.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(l.g.canvas):(l.i===void 0&&(l.i=document.createElement("canvas")),new Promise(function(T){l.i.height=l.g.canvas.height,l.i.width=l.g.canvas.width,l.i.getContext("2d",{}).drawImage(l.g.canvas,0,0,l.g.canvas.width,l.g.canvas.height),T(l.i)}))}function X(l,v){var x=l.g;if(l.o===void 0){var T=M(x,`
|
|
23
23
|
attribute vec2 aVertex;
|
|
24
24
|
attribute vec2 aTex;
|
|
25
25
|
varying vec2 vTex;
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
35
35
|
}`,1),i=x.createProgram();if(x.attachShader(i,T),x.attachShader(i,J),x.linkProgram(i),!x.getProgramParameter(i,x.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
36
36
|
|
|
37
|
-
`+x.getProgramInfoLog(i));T=l.o=i,x.useProgram(T),J=x.getUniformLocation(T,"sampler0"),l.j={K:x.getAttribLocation(T,"aVertex"),J:x.getAttribLocation(T,"aTex"),qa:J},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(J,0)}T=l.j,x.useProgram(l.o),x.canvas.width=v.width,x.canvas.height=v.height,x.viewport(0,0,v.width,v.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(v.glName),x.enableVertexAttribArray(T.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(T.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(T.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(T.K),x.disableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var w=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function N(l,v){return v+l}function A(l,v){window[l]=v}function K(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(x){v.addEventListener("load",function(){x()},!1),v.addEventListener("error",function(){x()},!1),document.body.appendChild(v)})}function rt(){return gt(function(l){switch(l.g){case 1:return l.o=2,_(l,WebAssembly.instantiate(w),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function q(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||N,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=Y(Object.keys(l.options));for(var x=v.next();!x.done;x=v.next()){x=x.value;var T=l.options[x].default;T!==void 0&&(this.j[x]=typeof T=="function"?T():T)}}}o=q.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,T,J,i,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,_(u,rt(),2)):u.return();case 2:if(x=u.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),Z=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=St(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(L){return l.overrideFile(S,L),Promise.resolve(L)})}return b})),c=Promise.all(Z.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?K(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return gt(function(L){if(L.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,_(L,a(b),2);S.h=L.h,L.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=_(a,St(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),_(u,Promise.all([c,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return T=v.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,k(T)),J=l,_(u,createMediapipeSolutionsWasm(Module),6);case 6:J.h=u.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,i=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(i),u.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),u.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,u.g=0}})}function Gt(l){var v,x,T,J,i,d,Z,e;return gt(function(c){if(c.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return c.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){c.g=2;return}return l.Z=l.g.graph.url,_(c,St(l,l.g.graph.url),3)}for(c.g!=2&&(v=c.h,l.i.loadGraph(v)),x=Y(Object.keys(l.C)),T=x.next();!T.done;T=x.next())J=T.value,l.i.overrideFile(J,l.C[J]);if(l.C={},l.g.listeners)for(i=Y(l.g.listeners),d=i.next();!d.done;d=i.next())Z=d.value,Yt(l,Z);e=l.j,l.j={},l.setOptions(e),c.g=0})}o.reset=function(){var l=this;return gt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},o.setOptions=function(l,v){var x=this;if(v=v||this.g.options){for(var T=[],J=[],i={},d=Y(Object.keys(l)),Z=d.next();!Z.done;i={R:i.R,S:i.S},Z=d.next()){var e=Z.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],Z=v[e],Z!==void 0&&(Z.onChange&&(i.R=Z.onChange,i.S=l[e],T.push(function(c){return function(){var f;return gt(function(t){if(t.g==1)return _(t,c.R(c.S),2);f=t.h,f===!0&&(x.s=!0),t.g=0})}}(i))),Z.graphOptionXref&&(e={valueNumber:Z.type===1?l[e]:0,valueBoolean:Z.type===0?l[e]:!1,valueString:Z.type===2?l[e]:""},Z=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),Z.graphOptionXref),e),J.push(Z))))}(T.length!==0||J.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(J),this.A=(this.A===void 0?[]:this.A).concat(T))}};function Mt(l){var v,x,T,J,i,d,Z;return gt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=Y(l.A),x=v.next();case 3:if(x.done){e.g=5;break}return T=x.value,_(e,T(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(J=new l.h.GraphOptionChangeRequestList,i=Y(l.B),d=i.next();!d.done;d=i.next())Z=d.value,J.push_back(Z);l.i.changeOptions(J),J.delete(),l.B=void 0}l.s=!1,e.g=0}})}o.initialize=function(){var l=this;return gt(function(v){return v.g==1?_(v,yt(l),2):v.g!=3?_(v,Gt(l),3):_(v,Mt(l),0)})};function St(l,v){var x,T;return gt(function(J){return v in l.H?J.return(l.H[v]):(x=l.locateFile(v,""),T=fetch(x).then(function(i){return i.arrayBuffer()}),l.H[v]=T,J.return(T))})}o.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(l,v){var x=this,T,J,i,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return x.g.inputs?(T=1e3*(v==null?performance.now():v),_(u,x.D,2)):u.return();case 2:return _(u,x.initialize(),3);case 3:for(J=new x.h.PacketDataList,i=Y(Object.keys(l)),d=i.next();!d.done;d=i.next())if(Z=d.value,e=x.g.inputs[Z]){t:{var a=l[Z];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new ct(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,L=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,L=a.naturalHeight):(S=a.width,L=a.height);L={glName:b.l,width:S,height:L},S=b.g,S.canvas.width=L.width,S.canvas.height=L.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=L;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),L=0;L<a.length;++L){S=a[L];var F=b.data,U=F.setBoundingBox,j=L,D=S.ea,$=new G;if(Nt($,1,D.ka),Nt($,2,D.la),Nt($,3,D.height),Nt($,4,D.width),Nt($,5,D.rotation),Nt($,6,D.ia),D=O($,C),U.call(F,j,D),S.Y)for(F=0;F<S.Y.length;++F){$=S.Y[F];var ut=!!$.visibility;U=b.data,j=U.addNormalizedLandmark,D=L,$=Object.assign(Object.assign({},$),{visibility:ut?$.visibility:0}),ut=new pe,Nt(ut,1,$.x),Nt(ut,2,$.y),Nt(ut,3,$.z),$.visibility&&Nt(ut,4,$.visibility),$=O(ut,ge),j.call(U,D,$)}if(S.V)for(F=0;F<S.V.length;++F)U=b.data,j=U.addClassification,D=L,$=S.V[F],ut=new Et,Nt(ut,2,$.score),$.index&&Nt(ut,1,$.index),$.label&&Nt(ut,3,$.label),$.displayName&&Nt(ut,4,$.displayName),$=O(ut,wt),j.call(U,D,$)}b=b.data;break t;default:b={}}}switch(c=b,f=e.stream,e.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},c),{stream:f,timestamp:T}));break;case"detections":t=c,t.stream=f,t.timestamp=T,J.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(J),_(u,x.D,4);case 4:J.delete(),u.g=0}})};function ft(l,v,x){var T,J,i,d,Z,e,c,f,t,u,a,b,S,L;return gt(function(F){switch(F.g){case 1:if(!x)return F.return(v);for(T={},J=0,i=Y(Object.keys(x)),d=i.next();!d.done;d=i.next())Z=d.value,e=x[Z],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++J;1<J&&(l.I=!1),c=Y(Object.keys(x)),d=c.next();case 2:if(d.done){F.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return S=T,L=f,_(F,Xt(l,f,v[t]),14);if(u=v[t.stream],t.type==="detection_list"){if(u){for(var U=u.getRectList(),j=u.getLandmarksList(),D=u.getClassificationsList(),$=[],ut=0;ut<U.size();++ut){var mt=W(U.get(ut),G,C);mt={ea:{ka:ie(mt,1),la:ie(mt,2),height:ie(mt,3),width:ie(mt,4),rotation:ie(mt,5,0),ia:oe(mt,6)},Y:He(W(j.get(ut),ke,h),pe,1).map(B),V:Q(W(D.get(ut),Ut,Dt))},$.push(mt)}U=$}else U=[];T[f]=U,F.g=7;break}if(t.type==="proto_list"){if(u){for(U=Array(u.size()),j=0;j<u.size();j++)U[j]=u.get(j);u.delete()}else U=[];T[f]=U,F.g=7;break}if(u===void 0){F.g=3;break}if(t.type==="float_list"){T[f]=u,F.g=7;break}if(t.type==="proto"){T[f]=u,F.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new ct(l.h,l.G),l.u[f]=a),_(F,s(a,u,l.I),13);case 13:b=F.h,T[f]=b;case 7:t.transform&&T[f]&&(T[f]=t.transform(T[f])),F.g=3;break;case 14:S[L]=F.h;case 3:d=c.next(),F.g=2;break;case 4:return F.return(T)}})}function Xt(l,v,x){var T;return gt(function(J){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?J.return(x):x instanceof l.h.Texture2dDataOut?(T=l.u[v],T||(T=new ct(l.h,l.G),l.u[v]=T),J.return(s(T,x,l.I))):J.return(void 0)})}function Yt(l,v){for(var x=v.name||"$",T=[].concat(k(v.wants)),J=new l.h.StringList,i=Y(v.wants),d=i.next();!d.done;d=i.next())J.push_back(d.value);i=l.h.PacketListener.implement({onResults:function(Z){for(var e={},c=0;c<v.wants.length;++c)e[T[c]]=Z.get(c);var f=l.listeners[x];f&&(l.D=ft(l,e,v.outs).then(function(t){t=f(t);for(var u=0;u<v.wants.length;++u){var a=e[T[u]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(J,i),J.delete()}o.onResults=function(l,v){this.listeners[v||"$"]=l},Jt("Solution",q),Jt("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Ht(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ct(l){var v=this;l=l||{},this.g=new q({locateFile:l.locateFile,files:function(x){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:Ht(x.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:tt},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:tt},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(T){return Q(W(T,Ut,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(x){var T,J,i;return gt(function(d){return d.g==1?(T=Ht(x),J="third_party/mediapipe/modules/hand_landmark/"+T,_(d,St(v.g,T),2)):(i=d.h,v.g.overrideFile(J,i),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}o=Ct.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(l){this.g.onResults(l)},o.initialize=function(){var l=this;return gt(function(v){return _(v,l.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(l){var v=this;return gt(function(x){return _(x,v.g.send(l),0)})},o.setOptions=function(l){this.g.setOptions(l)},Jt("Hands",Ct),Jt("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]]),Jt("VERSION","0.4.1646424915")}).call(pi);var bi={};(function(){var o;function n(e){var c=0;return function(){return c<e.length?{done:!1,value:e[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,c,f){return e==Array.prototype||e==Object.prototype||(e[c]=f.value),e};function m(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<e.length;++c){var f=e[c];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var y=m(this);function I(e,c){if(c)t:{var f=y;e=e.split(".");for(var t=0;t<e.length-1;t++){var u=e[t];if(!(u in f))break t;f=f[u]}e=e[e.length-1],t=f[e],c=c(t),c!=t&&c!=null&&r(f,e,{configurable:!0,writable:!0,value:c})}}I("Symbol",function(e){function c(a){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+u++,a)}function f(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return c}),I("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),f=0;f<c.length;f++){var t=y[c[f]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return e});function H(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function Y(e){var c=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return c?c.call(e):{next:n(e)}}function k(e){if(!(e instanceof Array)){e=Y(e);for(var c,f=[];!(c=e.next()).done;)f.push(c.value);e=f}return e}var nt=typeof Object.create=="function"?Object.create:function(e){function c(){}return c.prototype=e,new c},P;if(typeof Object.setPrototypeOf=="function")P=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}P=st?function(e,c){if(e.__proto__=c,e.__proto__!==c)throw new TypeError(e+" is not extensible");return e}:null}var dt=P;function ht(e,c){if(e.prototype=nt(c.prototype),e.prototype.constructor=e,dt)dt(e,c);else for(var f in c)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(c,f);t&&Object.defineProperty(e,f,t)}else e[f]=c[f];e.da=c.prototype}function Ft(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Ft.prototype.o=function(e){this.h=e};function At(e,c){e.j={U:c,V:!0},e.g=e.m||e.s}Ft.prototype.return=function(e){this.j={return:e},this.g=this.s};function _(e,c,f){return e.g=f,{value:c}}function Ee(e){this.g=new Ft,this.h=e}function an(e,c){Lt(e.g);var f=e.g.i;return f?We(e,"return"in f?f.return:function(t){return{value:t,done:!0}},c,e.g.return):(e.g.return(c),$t(e))}function We(e,c,f,t){try{var u=c.call(e.g.i,f);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return e.g.l=!1,u;var a=u.value}catch(b){return e.g.i=null,At(e.g,b),$t(e)}return e.g.i=null,t.call(e.g,a),$t(e)}function $t(e){for(;e.g.g;)try{var c=e.h(e.g);if(c)return e.g.l=!1,{value:c.value,done:!1}}catch(f){e.g.h=void 0,At(e.g,f)}if(e.g.l=!1,e.g.j){if(c=e.g.j,e.g.j=null,c.V)throw c.U;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function An(e){this.next=function(c){return Lt(e.g),e.g.i?c=We(e,e.g.i.next,c,e.g.o):(e.g.o(c),c=$t(e)),c},this.throw=function(c){return Lt(e.g),e.g.i?c=We(e,e.g.i.throw,c,e.g.o):(At(e.g,c),c=$t(e)),c},this.return=function(c){return an(e,c)},this[Symbol.iterator]=function(){return this}}function de(e){function c(t){return e.next(t)}function f(t){return e.throw(t)}return new Promise(function(t,u){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(c,f).then(a,u)}a(e.next())})}function gt(e){return de(new An(new Ee(e)))}I("Promise",function(e){function c(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(L){S.reject(L)}}function f(){this.g=null}function t(b){return b instanceof c?b:new c(function(S){S(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var u=y.setTimeout;f.prototype.i=function(b){u(b,0)},f.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var L=b[S];b[S]=null;try{L()}catch(F){this.j(F)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},c.prototype.j=function(){function b(F){return function(U){L||(L=!0,F.call(S,U))}}var S=this,L=!1;return{resolve:b(this.C),reject:b(this.l)}},c.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof c)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},c.prototype.v=function(b){var S=void 0;try{S=b.then}catch(L){this.l(L);return}typeof S=="function"?this.G(S,b):this.m(b)},c.prototype.l=function(b){this.s(2,b)},c.prototype.m=function(b){this.s(1,b)},c.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},c.prototype.D=function(){var b=this;u(function(){if(b.B()){var S=y.console;typeof S<"u"&&S.error(b.i)}},1)},c.prototype.B=function(){if(this.o)return!1;var b=y.CustomEvent,S=y.Event,L=y.dispatchEvent;return typeof L>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=y.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,L(b))},c.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new f;return c.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},c.prototype.G=function(b,S){var L=this.j();try{b.call(S,L.resolve,L.reject)}catch(F){L.reject(F)}},c.prototype.then=function(b,S){function L(D,$){return typeof D=="function"?function(ut){try{F(D(ut))}catch(mt){U(mt)}}:$}var F,U,j=new c(function(D,$){F=D,U=$});return this.J(L(b,F),L(S,U)),j},c.prototype.catch=function(b){return this.then(void 0,b)},c.prototype.J=function(b,S){function L(){switch(F.h){case 1:b(F.i);break;case 2:S(F.i);break;default:throw Error("Unexpected state: "+F.h)}}var F=this;this.g==null?a.h(L):this.g.push(L),this.o=!0},c.resolve=t,c.reject=function(b){return new c(function(S,L){L(b)})},c.race=function(b){return new c(function(S,L){for(var F=Y(b),U=F.next();!U.done;U=F.next())t(U.value).J(S,L)})},c.all=function(b){var S=Y(b),L=S.next();return L.done?t([]):new c(function(F,U){function j(ut){return function(mt){D[ut]=mt,$--,$==0&&F(D)}}var D=[],$=0;do D.push(void 0),$++,t(L.value).J(j(D.length-1),U),L=S.next();while(!L.done)})},c});function pn(e,c){e instanceof String&&(e+="");var f=0,t=!1,u={next:function(){if(!t&&f<e.length){var a=f++;return{value:c(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var jn=typeof Object.assign=="function"?Object.assign:function(e,c){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u])}return e};I("Object.assign",function(e){return e||jn}),I("Object.is",function(e){return e||function(c,f){return c===f?c!==0||1/c===1/f:c!==c&&f!==f}}),I("Array.prototype.includes",function(e){return e||function(c,f){var t=this;t instanceof String&&(t=String(t));var u=t.length;for(f=f||0,0>f&&(f=Math.max(f+u,0));f<u;f++){var a=t[f];if(a===c||Object.is(a,c))return!0}return!1}}),I("String.prototype.includes",function(e){return e||function(c,f){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,f||0)!==-1}}),I("Array.prototype.keys",function(e){return e||function(){return pn(this,function(c){return c})}});var Re=this||self;function Jt(e,c){e=e.split(".");var f=Re;e[0]in f||typeof f.execScript>"u"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||c===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=c}function Te(e){Re.setTimeout(function(){throw e},0)}function on(e){Te(e)}function Xn(e,c){on(Error("Invalid wire type: "+e+" (at position "+c+")"))}function Hn(){on(Error("Failed to read varint, encoding is invalid."))}function xn(e,c){return c=String.fromCharCode.apply(null,c),e==null?c:e+c}var Nn,dn=typeof TextDecoder<"u",bn,kn=typeof TextEncoder<"u";function Fn(e){if(kn)e=(bn||(bn=new TextEncoder)).encode(e);else{var c=void 0;c=c===void 0?!1:c;for(var f=0,t=new Uint8Array(3*e.length),u=0;u<e.length;u++){var a=e.charCodeAt(u);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&u<e.length){var b=e.charCodeAt(++u);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else u--}if(c)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var Pe={},Ae=null;function In(e){var c;c===void 0&&(c=0),Ye(),c=Pe[c];for(var f=Array(Math.floor(e.length/3)),t=c[64]||"",u=0,a=0;u<e.length-2;u+=3){var b=e[u],S=e[u+1],L=e[u+2],F=c[b>>2];b=c[(b&3)<<4|S>>4],S=c[(S&15)<<2|L>>6],L=c[L&63],f[a++]=F+b+S+L}switch(F=0,L=t,e.length-u){case 2:F=e[u+1],L=c[(F&15)<<2]||t;case 1:e=e[u],f[a]=c[e>>2]+c[(e&3)<<4|F>>4]+L+t}return f.join("")}function Vn(e){var c=e.length,f=3*c/4;f%3?f=Math.floor(f):"=.".indexOf(e[c-1])!=-1&&(f="=.".indexOf(e[c-2])!=-1?f-2:f-1);var t=new Uint8Array(f),u=0;return he(e,function(a){t[u++]=a}),t.subarray(0,u)}function he(e,c){function f(L){for(;t<e.length;){var F=e.charAt(t++),U=Ae[F];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(F))throw Error("Unknown base64 encoding at char: "+F)}return L}Ye();for(var t=0;;){var u=f(-1),a=f(0),b=f(64),S=f(64);if(S===64&&u===-1)break;c(u<<2|a>>4),b!=64&&(c(a<<4&240|b>>2),S!=64&&c(b<<6&192|S))}}function Ye(){if(!Ae){Ae={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(c[f].split(""));Pe[f]=t;for(var u=0;u<t.length;u++){var a=t[u];Ae[a]===void 0&&(Ae[a]=u)}}}}var Oe=typeof Uint8Array=="function",ne;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Oe&&e instanceof Uint8Array?In(e):null;return e};var sn=typeof Uint8Array.prototype.slice=="function";function Me(e,c,f){return c===f?ne||(ne=new Uint8Array(0)):sn?e.slice(c,f):new Uint8Array(e.subarray(c,f))}var Qt=0,Ze=0;function Ce(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Vn(e);if(e.constructor===Ve){if(e.g==null)var c=ne||(ne=new Uint8Array(0));else{c=Uint8Array;var f=e.g;f=f==null||Oe&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Vn(f):null,e=e.g=f,c=new c(e)}return c}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Bt(e,c){c=c===void 0?{}:c,c=c.u===void 0?!1:c.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=c,e&&Ie(this,e)}function Ie(e,c){e.h=Ce(c),e.m=0,e.i=e.h.length,e.g=e.m}Bt.prototype.reset=function(){this.g=this.m};function zt(e){for(var c=128,f=0,t=0,u=0;4>u&&128<=c;u++)c=e.h[e.g++],f|=(c&127)<<7*u;if(128<=c&&(c=e.h[e.g++],f|=(c&127)<<28,t|=(c&127)>>4),128<=c)for(u=0;5>u&&128<=c;u++)c=e.h[e.g++],t|=(c&127)<<7*u+3;if(128>c)return e=f>>>0,c=t>>>0,(t=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0),t?-e:e;e.l=!0,Hn()}function ye(e){e.g>e.i&&(e.l=!0,on(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Bt.prototype.j=function(){var e=this.h,c=e[this.g],f=c&127;return 128>c?(this.g+=1,ye(this),f):(c=e[this.g+1],f|=(c&127)<<7,128>c?(this.g+=2,ye(this),f):(c=e[this.g+2],f|=(c&127)<<14,128>c?(this.g+=3,ye(this),f):(c=e[this.g+3],f|=(c&127)<<21,128>c?(this.g+=4,ye(this),f):(c=e[this.g+4],f|=(c&15)<<28,128>c?(this.g+=5,ye(this),f>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Hn(),f):(ye(this),f))))))},Bt.prototype.o=function(){var e=this.h[this.g],c=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),f=(e<<0|c<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,c=f>>>23&255,f&=8388607,c==255?f?NaN:1/0*e:c==0?e*Math.pow(2,-149)*f:e*Math.pow(2,c-150)*(f+Math.pow(2,23))};var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(e,c){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=c}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var e=this.g,c=this.h;return this.h=0,Me(e,0,c)};function Pt(e,c){for(;127<c;)Xe(e,c&127|128),c>>>=7;Xe(e,c)}function je(e){var c={},f=c.N===void 0?!1:c.N;this.m={u:c.u===void 0?!1:c.u},this.N=f,c=this.m,we.length?(f=we.pop(),c&&(f.u=c.u),e&&Ie(f,e),e=f):e=new Bt(e,c),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(e){var c=e.g;if((c=c.g==c.i)||(c=e.j)||(c=e.g,c=c.l||0>c.g||c.g>c.i),c)return!1;e.l=e.g.g;var f=e.g.j();return c=f>>>3,f&=7,0<=f&&5>=f?(e.i=c,e.h=f,!0):(e.j=!0,Xn(f,e.l),!1)}function Se(e){switch(e.h){case 0:if(e.h!=0)Se(e);else t:{e=e.g;for(var c=e.g,f=0;10>f;f++){if((e.h[c]&128)===0){e.g=c+1,ye(e);break t}c++}e.l=!0,Hn()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Se(e):(c=e.g.j(),e=e.g,e.g+=c,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:c=e.i;do{if(!_e(e)){e.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=c&&(e.j=!0,on(Error("Unmatched end-group tag")));break}Se(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Wn(e,c,f){e.N||(e=Me(e.g.h,f,e.g.g),(f=c.o)?f.push(e):c.o=[e])}function ln(e,c,f){var t=e.g.i,u=e.g.j(),a=e.g.g+u;if(e.g.i=a,f(c,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(u+" bytes, instead read "+(u-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,c}function Qe(e,c,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(c.call(e.g))}var un=[];function ve(){this.h=[],this.i=0,this.g=new $e}function Le(e,c){c.length!==0&&(e.h.push(c),e.i+=c.length)}function Ge(e,c,f){Pt(e.g,8*c+2),Pt(e.g,f.length),Le(e,e.g.end()),Le(e,f)}var re=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function De(e,c){Object.isFrozen(e)||(re?e[re]|=c:e.g!==void 0?e.g|=c:Object.defineProperties(e,{g:{value:c,configurable:!0,writable:!0,enumerable:!1}}))}function te(e){if(!e)return 0;var c;return re?c=e[re]:c=e.g,c==null?0:c}function Ot(e){return Array.isArray(e)&&De(e,1),e}function hn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");De(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Nt(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Oe&&e!=null&&e instanceof Uint8Array?In(e):e;default:return e}}function Wt(e,c){if(e!=null)return Array.isArray(e)||fe(e)?ie(e,c):c(e)}function ie(e,c){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Wt(e[t],c);return te(e)&1&&Ot(f),f}f={};for(t in e)f[t]=Wt(e[t],c);return f}var He;function ee(e,c,f){var t=He;He=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}c!==void 0&&-1<c?(this.l=Math.max(c,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(f)for(c=0;c<f.length;c++)e=f[c],e<this.l?(e+=this.j,(t=this.h[e])?Ot(t):this.h[e]=oe):(et(this),(t=this.i[e])?Ot(t):this.i[e]=oe)}var oe=Object.freeze(Ot([]));function et(e){var c=e.l+e.j;e.h[c]||(e.i=e.h[c]={})}function ot(e,c,f){return c===-1?null:(f===void 0?0:f)||c>=e.l?e.i?e.i[c]:void 0:e.h[c+e.j]}function at(e,c,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,u=ot(e,c,t);return u==null&&(u=oe),u===oe?(u=Ot([]),Tt(e,c,u,t)):f&&Array.isArray(u)&&te(u)&2&&(u=u.slice(),Tt(e,c,u,t)),u}function _t(e){var c=at(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<c.length;f++)c[f]=+c[f];e.m[3]=!0}return c}function ae(e,c,f){return e=ot(e,c),e==null?f:e}function ue(e,c,f){return e=ot(e,c),e=e==null?e:+e,e==null?f===void 0?0:f:e}function Tt(e,c,f,t){(t===void 0?0:t)||c>=e.l?(et(e),e.i[c]=f):e.h[c+e.j]=f}function me(e,c,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var u=ot(e,f,!1);return u==null?t:(c=new c(u),e.g[f]=c)}function Ne(e,c,f){e.g||(e.g={});var t=e.g[f];if(!t){var u=at(e,f,!1);t=[];for(var a=Array.isArray(u)?!!(te(u)&2):!1,b=0;b<u.length;b++)t[b]=new c(u[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[f]=t}return t}function qe(e,c,f,t,u){var a=Ne(e,t,c);f=f||new t,e=at(e,c),u!=null?(a.splice(u,0,f),e.splice(u,0,tn(f))):(a.push(f),e.push(tn(f)))}ee.prototype.toJSON=function(){var e=tn(this);return ie(e,Nt)};function tn(e){if(e.g)for(var c in e.g){var f=e.g[c];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&tn(f[t]);else f&&tn(f)}return e.h}ee.prototype.toString=function(){return tn(this).toString()};function fn(e,c){if(e=e.o){Le(c,c.g.end());for(var f=0;f<e.length;f++)Le(c,e[f])}}function yn(e){var c=e[0];switch(e.length){case 2:var f=e[1];return function(L,F,U){return c(L,F,U,f)};case 3:var t=e[1],u=e[2];return function(L,F,U){return c(L,F,U,t,u)};case 4:var a=e[1],b=e[2],S=e[3];return function(L,F,U){return c(L,F,U,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Fe(e,c,f){for(;_e(c)&&c.h!=4;){var t=c.i,u=f[t];if(u){if(Array.isArray(u)&&(u=f[t]=yn(u)),!u(c,e,t)){t=c,u=e;var a=t.l;Se(t),Wn(t,u,a)}}else t=c,u=e,a=t.l,Se(t),Wn(t,u,a)}return e}function en(e,c){var f=new ve;if(c(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.h,u=t.length,a=c=0;a<u;a++){var b=t[a];b.length!==0&&(e.set(b,c),c+=b.length)}t=f.g,u=t.h,u!==0&&(e.set(t.g.subarray(0,u),c),t.h=0),f.h=[e],f=e}return f}function zn(e,c,f){if(un.length){var t=un.pop();e&&(Ie(t.g,e),t.i=-1,t.h=-1),e=t}else e=new je(e);try{return f(new c,e)}finally{c=e.g,c.h=null,c.m=0,c.i=0,c.g=0,c.l=!1,c.u=!1,e.i=-1,e.h=-1,e.j=!1,100>un.length&&un.push(e)}}function nn(e,c,f){if(c=ot(c,f),c!=null){Pt(e.g,8*f+5),e=e.g;var t=c;t=(f=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(f<<31|t)>>>0):(c=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-c),t=Math.round(8388608*t),16777216<=t&&++c,Ze=0,Qt=(f<<31|c+127<<23|t&8388607)>>>0),f=Qt,Xe(e,f>>>0&255),Xe(e,f>>>8&255),Xe(e,f>>>16&255),Xe(e,f>>>24&255)}}function Je(e,c,f){return e.h!==5?!1:(Tt(c,f,e.g.o()),!0)}function Zn(e,c,f){return e.h!==5&&e.h!==2?!1:(c=at(c,f),e.h==2?Qe(e,Bt.prototype.o,c):c.push(e.g.o()),!0)}function Sn(e,c,f){return e.h!==0?!1:(Tt(c,f,zt(e.g)),!0)}function Be(e,c,f){return e.h!==0?!1:(Tt(c,f,e.g.j()),!0)}function En(e,c,f){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var u=e.g;e.g+=t,ye(e),e=e.h;var a;if(dn)(a=Nn)||(a=Nn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(u,u+t));else{t=u+t;for(var b=[],S=null,L,F,U;u<t;)L=e[u++],128>L?b.push(L):224>L?u>=t?b.push(65533):(F=e[u++],194>L||(F&192)!==128?(u--,b.push(65533)):b.push((L&31)<<6|F&63)):240>L?u>=t-1?b.push(65533):(F=e[u++],(F&192)!==128||L===224&&160>F||L===237&&160<=F||((a=e[u++])&192)!==128?(u--,b.push(65533)):b.push((L&15)<<12|(F&63)<<6|a&63)):244>=L?u>=t-2?b.push(65533):(F=e[u++],(F&192)!==128||(L<<28)+(F-144)>>30!==0||((a=e[u++])&192)!==128||((U=e[u++])&192)!==128?(u--,b.push(65533)):(L=(L&7)<<18|(F&63)<<12|(a&63)<<6|U&63,L-=65536,b.push((L>>10&1023)+55296,(L&1023)+56320))):b.push(65533),8192<=b.length&&(S=xn(S,b),b.length=0);a=xn(S,b)}return Tt(c,f,a),!0}function rn(e,c,f,t,u){if(e.h!==2)return!1;e=ln(e,new t,u);var a=a===void 0?!1:a;return c.g||(c.g={}),t=e&&tn(e),c.g[f]=e,Tt(c,f,t,a),!0}function vn(e,c,f,t,u){return e.h!==2?!1:(e=ln(e,new t,u),qe(c,f,e,t,void 0),!0)}function Yn(e,c,f){return e.h!==0&&e.h!==2?!1:(c=at(c,f),e.h==2?Qe(e,Bt.prototype.j,c):c.push(e.g.j()),!0)}function Mn(e,c,f){return e.h!==0?!1:(Tt(c,f,zt(e.g)),!0)}function cn(e){ee.call(this,e,-1,$n)}var Tn;ht(cn,ee),cn.prototype.getRows=function(){return ot(this,1)},cn.prototype.getCols=function(){return ot(this,2)},cn.prototype.getPackedDataList=function(){return _t(this)},cn.prototype.getLayout=function(){return ae(this,4,0)};function Dn(e,c){return Fe(e,c,Tn||(Tn={1:Be,2:Be,3:Zn,4:Mn}))}var $n=[3];function wn(e){ee.call(this,e)}var Cn;ht(wn,ee);function p(e,c){var f=ot(e,1);if(f!=null&&f!=null){Pt(c.g,8);var t=c.g;if(0<=f)Pt(t,f);else{for(var u=0;9>u;u++)Xe(t,f&127|128),f>>=7;Xe(t,1)}}nn(c,e,2),t=ot(e,3),t!=null&&Ge(c,3,Fn(t)),t=ot(e,4),t!=null&&Ge(c,4,Fn(t)),fn(e,c)}function V(e,c){return Fe(e,c,Cn||(Cn={1:Be,2:Je,3:En,4:En}))}function W(e){ee.call(this,e,-1,lt)}var E;ht(W,ee),W.prototype.addClassification=function(e,c){return qe(this,1,e,wn,c),this};function O(e,c){return Fe(e,c,E||(E={1:[vn,wn,V]}))}var lt=[1];function z(e){ee.call(this,e)}var it;ht(z,ee);function bt(e,c){nn(c,e,1),nn(c,e,2),nn(c,e,3),nn(c,e,4),nn(c,e,5),fn(e,c)}function It(e,c){return Fe(e,c,it||(it={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Kt(e){ee.call(this,e,-1,Et)}var kt;ht(Kt,ee);function qt(e,c){return Fe(e,c,kt||(kt={1:[vn,z,It]}))}var Et=[1];function wt(e){ee.call(this,e)}var Ut;ht(wt,ee);function Dt(e,c){nn(c,e,1),nn(c,e,2),nn(c,e,3),nn(c,e,4),nn(c,e,5);var f=ot(e,6);if(f!=null&&f!=null){Pt(c.g,48);var t=c.g,u=f;f=0>u,u=Math.abs(u);var a=u>>>0;for(u=Math.floor((u-a)/4294967296),u>>>=0,f&&(u=~u>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,u++,4294967295<u&&(u=0))),Qt=a,Ze=u,f=Qt,a=Ze;0<a||127<f;)Xe(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Xe(t,f)}fn(e,c)}function ce(e,c){return Fe(e,c,Ut||(Ut={1:Je,2:Je,3:Je,4:Je,5:Je,6:Sn}))}function pe(e){ee.call(this,e,-1,h)}var ge;ht(pe,ee),pe.prototype.getVertexType=function(){return ae(this,1,0)},pe.prototype.getPrimitiveType=function(){return ae(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return at(this,4)};function ke(e,c){return Fe(e,c,ge||(ge={1:Mn,2:Mn,3:Zn,4:Yn}))}var h=[3,4];function g(e){ee.call(this,e)}var G;ht(g,ee),g.prototype.getMesh=function(){return me(this,pe,1)},g.prototype.getPoseTransformMatrix=function(){return me(this,cn,2)};function C(e,c){return Fe(e,c,G||(G={1:[rn,pe,ke],2:[rn,cn,Dn]}))}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(k(M),k(Q),k(B),k(tt),k(ct),k(s));function R(e,c,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,c),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
37
|
+
`+x.getProgramInfoLog(i));T=l.o=i,x.useProgram(T),J=x.getUniformLocation(T,"sampler0"),l.j={K:x.getAttribLocation(T,"aVertex"),J:x.getAttribLocation(T,"aTex"),qa:J},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(J,0)}T=l.j,x.useProgram(l.o),x.canvas.width=v.width,x.canvas.height=v.height,x.viewport(0,0,v.width,v.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(v.glName),x.enableVertexAttribArray(T.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(T.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(T.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(T.K),x.disableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var w=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function N(l,v){return v+l}function A(l,v){window[l]=v}function U(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(x){v.addEventListener("load",function(){x()},!1),v.addEventListener("error",function(){x()},!1),document.body.appendChild(v)})}function rt(){return gt(function(l){switch(l.g){case 1:return l.o=2,_(l,WebAssembly.instantiate(w),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function q(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||N,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=Y(Object.keys(l.options));for(var x=v.next();!x.done;x=v.next()){x=x.value;var T=l.options[x].default;T!==void 0&&(this.j[x]=typeof T=="function"?T():T)}}}o=q.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,T,J,i,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,_(u,rt(),2)):u.return();case 2:if(x=u.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),Z=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=St(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(L){return l.overrideFile(S,L),Promise.resolve(L)})}return b})),c=Promise.all(Z.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?U(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return gt(function(L){if(L.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,_(L,a(b),2);S.h=L.h,L.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=_(a,St(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),_(u,Promise.all([c,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return T=v.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,k(T)),J=l,_(u,createMediapipeSolutionsWasm(Module),6);case 6:J.h=u.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,i=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(i),u.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),u.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,u.g=0}})}function Gt(l){var v,x,T,J,i,d,Z,e;return gt(function(c){if(c.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return c.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){c.g=2;return}return l.Z=l.g.graph.url,_(c,St(l,l.g.graph.url),3)}for(c.g!=2&&(v=c.h,l.i.loadGraph(v)),x=Y(Object.keys(l.C)),T=x.next();!T.done;T=x.next())J=T.value,l.i.overrideFile(J,l.C[J]);if(l.C={},l.g.listeners)for(i=Y(l.g.listeners),d=i.next();!d.done;d=i.next())Z=d.value,Yt(l,Z);e=l.j,l.j={},l.setOptions(e),c.g=0})}o.reset=function(){var l=this;return gt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},o.setOptions=function(l,v){var x=this;if(v=v||this.g.options){for(var T=[],J=[],i={},d=Y(Object.keys(l)),Z=d.next();!Z.done;i={R:i.R,S:i.S},Z=d.next()){var e=Z.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],Z=v[e],Z!==void 0&&(Z.onChange&&(i.R=Z.onChange,i.S=l[e],T.push(function(c){return function(){var f;return gt(function(t){if(t.g==1)return _(t,c.R(c.S),2);f=t.h,f===!0&&(x.s=!0),t.g=0})}}(i))),Z.graphOptionXref&&(e={valueNumber:Z.type===1?l[e]:0,valueBoolean:Z.type===0?l[e]:!1,valueString:Z.type===2?l[e]:""},Z=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),Z.graphOptionXref),e),J.push(Z))))}(T.length!==0||J.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(J),this.A=(this.A===void 0?[]:this.A).concat(T))}};function Mt(l){var v,x,T,J,i,d,Z;return gt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=Y(l.A),x=v.next();case 3:if(x.done){e.g=5;break}return T=x.value,_(e,T(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(J=new l.h.GraphOptionChangeRequestList,i=Y(l.B),d=i.next();!d.done;d=i.next())Z=d.value,J.push_back(Z);l.i.changeOptions(J),J.delete(),l.B=void 0}l.s=!1,e.g=0}})}o.initialize=function(){var l=this;return gt(function(v){return v.g==1?_(v,yt(l),2):v.g!=3?_(v,Gt(l),3):_(v,Mt(l),0)})};function St(l,v){var x,T;return gt(function(J){return v in l.H?J.return(l.H[v]):(x=l.locateFile(v,""),T=fetch(x).then(function(i){return i.arrayBuffer()}),l.H[v]=T,J.return(T))})}o.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(l,v){var x=this,T,J,i,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return x.g.inputs?(T=1e3*(v==null?performance.now():v),_(u,x.D,2)):u.return();case 2:return _(u,x.initialize(),3);case 3:for(J=new x.h.PacketDataList,i=Y(Object.keys(l)),d=i.next();!d.done;d=i.next())if(Z=d.value,e=x.g.inputs[Z]){t:{var a=l[Z];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new ct(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,L=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,L=a.naturalHeight):(S=a.width,L=a.height);L={glName:b.l,width:S,height:L},S=b.g,S.canvas.width=L.width,S.canvas.height=L.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=L;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),L=0;L<a.length;++L){S=a[L];var H=b.data,K=H.setBoundingBox,j=L,D=S.ea,$=new G;if(Nt($,1,D.ka),Nt($,2,D.la),Nt($,3,D.height),Nt($,4,D.width),Nt($,5,D.rotation),Nt($,6,D.ia),D=P($,C),K.call(H,j,D),S.Y)for(H=0;H<S.Y.length;++H){$=S.Y[H];var ut=!!$.visibility;K=b.data,j=K.addNormalizedLandmark,D=L,$=Object.assign(Object.assign({},$),{visibility:ut?$.visibility:0}),ut=new pe,Nt(ut,1,$.x),Nt(ut,2,$.y),Nt(ut,3,$.z),$.visibility&&Nt(ut,4,$.visibility),$=P(ut,ge),j.call(K,D,$)}if(S.V)for(H=0;H<S.V.length;++H)K=b.data,j=K.addClassification,D=L,$=S.V[H],ut=new Et,Nt(ut,2,$.score),$.index&&Nt(ut,1,$.index),$.label&&Nt(ut,3,$.label),$.displayName&&Nt(ut,4,$.displayName),$=P(ut,wt),j.call(K,D,$)}b=b.data;break t;default:b={}}}switch(c=b,f=e.stream,e.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},c),{stream:f,timestamp:T}));break;case"detections":t=c,t.stream=f,t.timestamp=T,J.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(J),_(u,x.D,4);case 4:J.delete(),u.g=0}})};function ft(l,v,x){var T,J,i,d,Z,e,c,f,t,u,a,b,S,L;return gt(function(H){switch(H.g){case 1:if(!x)return H.return(v);for(T={},J=0,i=Y(Object.keys(x)),d=i.next();!d.done;d=i.next())Z=d.value,e=x[Z],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++J;1<J&&(l.I=!1),c=Y(Object.keys(x)),d=c.next();case 2:if(d.done){H.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return S=T,L=f,_(H,Xt(l,f,v[t]),14);if(u=v[t.stream],t.type==="detection_list"){if(u){for(var K=u.getRectList(),j=u.getLandmarksList(),D=u.getClassificationsList(),$=[],ut=0;ut<K.size();++ut){var mt=W(K.get(ut),G,C);mt={ea:{ka:ie(mt,1),la:ie(mt,2),height:ie(mt,3),width:ie(mt,4),rotation:ie(mt,5,0),ia:oe(mt,6)},Y:Fe(W(j.get(ut),ke,h),pe,1).map(B),V:Q(W(D.get(ut),Kt,Dt))},$.push(mt)}K=$}else K=[];T[f]=K,H.g=7;break}if(t.type==="proto_list"){if(u){for(K=Array(u.size()),j=0;j<u.size();j++)K[j]=u.get(j);u.delete()}else K=[];T[f]=K,H.g=7;break}if(u===void 0){H.g=3;break}if(t.type==="float_list"){T[f]=u,H.g=7;break}if(t.type==="proto"){T[f]=u,H.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new ct(l.h,l.G),l.u[f]=a),_(H,s(a,u,l.I),13);case 13:b=H.h,T[f]=b;case 7:t.transform&&T[f]&&(T[f]=t.transform(T[f])),H.g=3;break;case 14:S[L]=H.h;case 3:d=c.next(),H.g=2;break;case 4:return H.return(T)}})}function Xt(l,v,x){var T;return gt(function(J){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?J.return(x):x instanceof l.h.Texture2dDataOut?(T=l.u[v],T||(T=new ct(l.h,l.G),l.u[v]=T),J.return(s(T,x,l.I))):J.return(void 0)})}function Yt(l,v){for(var x=v.name||"$",T=[].concat(k(v.wants)),J=new l.h.StringList,i=Y(v.wants),d=i.next();!d.done;d=i.next())J.push_back(d.value);i=l.h.PacketListener.implement({onResults:function(Z){for(var e={},c=0;c<v.wants.length;++c)e[T[c]]=Z.get(c);var f=l.listeners[x];f&&(l.D=ft(l,e,v.outs).then(function(t){t=f(t);for(var u=0;u<v.wants.length;++u){var a=e[T[u]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(J,i),J.delete()}o.onResults=function(l,v){this.listeners[v||"$"]=l},Jt("Solution",q),Jt("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Ft(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ct(l){var v=this;l=l||{},this.g=new q({locateFile:l.locateFile,files:function(x){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:Ft(x.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:tt},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:tt},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(T){return Q(W(T,Kt,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(x){var T,J,i;return gt(function(d){return d.g==1?(T=Ft(x),J="third_party/mediapipe/modules/hand_landmark/"+T,_(d,St(v.g,T),2)):(i=d.h,v.g.overrideFile(J,i),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}o=Ct.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(l){this.g.onResults(l)},o.initialize=function(){var l=this;return gt(function(v){return _(v,l.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(l){var v=this;return gt(function(x){return _(x,v.g.send(l),0)})},o.setOptions=function(l){this.g.setOptions(l)},Jt("Hands",Ct),Jt("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]]),Jt("VERSION","0.4.1646424915")}).call(pi);var bi={};(function(){var o;function n(e){var c=0;return function(){return c<e.length?{done:!1,value:e[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,c,f){return e==Array.prototype||e==Object.prototype||(e[c]=f.value),e};function m(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<e.length;++c){var f=e[c];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var y=m(this);function I(e,c){if(c)t:{var f=y;e=e.split(".");for(var t=0;t<e.length-1;t++){var u=e[t];if(!(u in f))break t;f=f[u]}e=e[e.length-1],t=f[e],c=c(t),c!=t&&c!=null&&r(f,e,{configurable:!0,writable:!0,value:c})}}I("Symbol",function(e){function c(a){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+u++,a)}function f(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return c}),I("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),f=0;f<c.length;f++){var t=y[c[f]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return e});function F(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function Y(e){var c=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return c?c.call(e):{next:n(e)}}function k(e){if(!(e instanceof Array)){e=Y(e);for(var c,f=[];!(c=e.next()).done;)f.push(c.value);e=f}return e}var et=typeof Object.create=="function"?Object.create:function(e){function c(){}return c.prototype=e,new c},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(e,c){if(e.__proto__=c,e.__proto__!==c)throw new TypeError(e+" is not extensible");return e}:null}var dt=O;function ht(e,c){if(e.prototype=et(c.prototype),e.prototype.constructor=e,dt)dt(e,c);else for(var f in c)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(c,f);t&&Object.defineProperty(e,f,t)}else e[f]=c[f];e.da=c.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Ht.prototype.o=function(e){this.h=e};function At(e,c){e.j={U:c,V:!0},e.g=e.m||e.s}Ht.prototype.return=function(e){this.j={return:e},this.g=this.s};function _(e,c,f){return e.g=f,{value:c}}function Ee(e){this.g=new Ht,this.h=e}function an(e,c){Lt(e.g);var f=e.g.i;return f?We(e,"return"in f?f.return:function(t){return{value:t,done:!0}},c,e.g.return):(e.g.return(c),$t(e))}function We(e,c,f,t){try{var u=c.call(e.g.i,f);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return e.g.l=!1,u;var a=u.value}catch(b){return e.g.i=null,At(e.g,b),$t(e)}return e.g.i=null,t.call(e.g,a),$t(e)}function $t(e){for(;e.g.g;)try{var c=e.h(e.g);if(c)return e.g.l=!1,{value:c.value,done:!1}}catch(f){e.g.h=void 0,At(e.g,f)}if(e.g.l=!1,e.g.j){if(c=e.g.j,e.g.j=null,c.V)throw c.U;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function An(e){this.next=function(c){return Lt(e.g),e.g.i?c=We(e,e.g.i.next,c,e.g.o):(e.g.o(c),c=$t(e)),c},this.throw=function(c){return Lt(e.g),e.g.i?c=We(e,e.g.i.throw,c,e.g.o):(At(e.g,c),c=$t(e)),c},this.return=function(c){return an(e,c)},this[Symbol.iterator]=function(){return this}}function de(e){function c(t){return e.next(t)}function f(t){return e.throw(t)}return new Promise(function(t,u){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(c,f).then(a,u)}a(e.next())})}function gt(e){return de(new An(new Ee(e)))}I("Promise",function(e){function c(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(L){S.reject(L)}}function f(){this.g=null}function t(b){return b instanceof c?b:new c(function(S){S(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var u=y.setTimeout;f.prototype.i=function(b){u(b,0)},f.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var L=b[S];b[S]=null;try{L()}catch(H){this.j(H)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},c.prototype.j=function(){function b(H){return function(K){L||(L=!0,H.call(S,K))}}var S=this,L=!1;return{resolve:b(this.C),reject:b(this.l)}},c.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof c)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},c.prototype.v=function(b){var S=void 0;try{S=b.then}catch(L){this.l(L);return}typeof S=="function"?this.G(S,b):this.m(b)},c.prototype.l=function(b){this.s(2,b)},c.prototype.m=function(b){this.s(1,b)},c.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},c.prototype.D=function(){var b=this;u(function(){if(b.B()){var S=y.console;typeof S<"u"&&S.error(b.i)}},1)},c.prototype.B=function(){if(this.o)return!1;var b=y.CustomEvent,S=y.Event,L=y.dispatchEvent;return typeof L>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=y.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,L(b))},c.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new f;return c.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},c.prototype.G=function(b,S){var L=this.j();try{b.call(S,L.resolve,L.reject)}catch(H){L.reject(H)}},c.prototype.then=function(b,S){function L(D,$){return typeof D=="function"?function(ut){try{H(D(ut))}catch(mt){K(mt)}}:$}var H,K,j=new c(function(D,$){H=D,K=$});return this.J(L(b,H),L(S,K)),j},c.prototype.catch=function(b){return this.then(void 0,b)},c.prototype.J=function(b,S){function L(){switch(H.h){case 1:b(H.i);break;case 2:S(H.i);break;default:throw Error("Unexpected state: "+H.h)}}var H=this;this.g==null?a.h(L):this.g.push(L),this.o=!0},c.resolve=t,c.reject=function(b){return new c(function(S,L){L(b)})},c.race=function(b){return new c(function(S,L){for(var H=Y(b),K=H.next();!K.done;K=H.next())t(K.value).J(S,L)})},c.all=function(b){var S=Y(b),L=S.next();return L.done?t([]):new c(function(H,K){function j(ut){return function(mt){D[ut]=mt,$--,$==0&&H(D)}}var D=[],$=0;do D.push(void 0),$++,t(L.value).J(j(D.length-1),K),L=S.next();while(!L.done)})},c});function pn(e,c){e instanceof String&&(e+="");var f=0,t=!1,u={next:function(){if(!t&&f<e.length){var a=f++;return{value:c(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var jn=typeof Object.assign=="function"?Object.assign:function(e,c){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u])}return e};I("Object.assign",function(e){return e||jn}),I("Object.is",function(e){return e||function(c,f){return c===f?c!==0||1/c===1/f:c!==c&&f!==f}}),I("Array.prototype.includes",function(e){return e||function(c,f){var t=this;t instanceof String&&(t=String(t));var u=t.length;for(f=f||0,0>f&&(f=Math.max(f+u,0));f<u;f++){var a=t[f];if(a===c||Object.is(a,c))return!0}return!1}}),I("String.prototype.includes",function(e){return e||function(c,f){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,f||0)!==-1}}),I("Array.prototype.keys",function(e){return e||function(){return pn(this,function(c){return c})}});var Re=this||self;function Jt(e,c){e=e.split(".");var f=Re;e[0]in f||typeof f.execScript>"u"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||c===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=c}function Te(e){Re.setTimeout(function(){throw e},0)}function on(e){Te(e)}function Xn(e,c){on(Error("Invalid wire type: "+e+" (at position "+c+")"))}function Fn(){on(Error("Failed to read varint, encoding is invalid."))}function xn(e,c){return c=String.fromCharCode.apply(null,c),e==null?c:e+c}var Nn,dn=typeof TextDecoder<"u",bn,kn=typeof TextEncoder<"u";function Hn(e){if(kn)e=(bn||(bn=new TextEncoder)).encode(e);else{var c=void 0;c=c===void 0?!1:c;for(var f=0,t=new Uint8Array(3*e.length),u=0;u<e.length;u++){var a=e.charCodeAt(u);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&u<e.length){var b=e.charCodeAt(++u);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else u--}if(c)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var Oe={},Ae=null;function In(e){var c;c===void 0&&(c=0),Ye(),c=Oe[c];for(var f=Array(Math.floor(e.length/3)),t=c[64]||"",u=0,a=0;u<e.length-2;u+=3){var b=e[u],S=e[u+1],L=e[u+2],H=c[b>>2];b=c[(b&3)<<4|S>>4],S=c[(S&15)<<2|L>>6],L=c[L&63],f[a++]=H+b+S+L}switch(H=0,L=t,e.length-u){case 2:H=e[u+1],L=c[(H&15)<<2]||t;case 1:e=e[u],f[a]=c[e>>2]+c[(e&3)<<4|H>>4]+L+t}return f.join("")}function Vn(e){var c=e.length,f=3*c/4;f%3?f=Math.floor(f):"=.".indexOf(e[c-1])!=-1&&(f="=.".indexOf(e[c-2])!=-1?f-2:f-1);var t=new Uint8Array(f),u=0;return he(e,function(a){t[u++]=a}),t.subarray(0,u)}function he(e,c){function f(L){for(;t<e.length;){var H=e.charAt(t++),K=Ae[H];if(K!=null)return K;if(!/^[\s\xa0]*$/.test(H))throw Error("Unknown base64 encoding at char: "+H)}return L}Ye();for(var t=0;;){var u=f(-1),a=f(0),b=f(64),S=f(64);if(S===64&&u===-1)break;c(u<<2|a>>4),b!=64&&(c(a<<4&240|b>>2),S!=64&&c(b<<6&192|S))}}function Ye(){if(!Ae){Ae={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(c[f].split(""));Oe[f]=t;for(var u=0;u<t.length;u++){var a=t[u];Ae[a]===void 0&&(Ae[a]=u)}}}}var Pe=typeof Uint8Array=="function",ne;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Pe&&e instanceof Uint8Array?In(e):null;return e};var sn=typeof Uint8Array.prototype.slice=="function";function Me(e,c,f){return c===f?ne||(ne=new Uint8Array(0)):sn?e.slice(c,f):new Uint8Array(e.subarray(c,f))}var Qt=0,Ze=0;function Ce(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Vn(e);if(e.constructor===Ve){if(e.g==null)var c=ne||(ne=new Uint8Array(0));else{c=Uint8Array;var f=e.g;f=f==null||Pe&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Vn(f):null,e=e.g=f,c=new c(e)}return c}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Bt(e,c){c=c===void 0?{}:c,c=c.u===void 0?!1:c.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=c,e&&Ie(this,e)}function Ie(e,c){e.h=Ce(c),e.m=0,e.i=e.h.length,e.g=e.m}Bt.prototype.reset=function(){this.g=this.m};function zt(e){for(var c=128,f=0,t=0,u=0;4>u&&128<=c;u++)c=e.h[e.g++],f|=(c&127)<<7*u;if(128<=c&&(c=e.h[e.g++],f|=(c&127)<<28,t|=(c&127)>>4),128<=c)for(u=0;5>u&&128<=c;u++)c=e.h[e.g++],t|=(c&127)<<7*u+3;if(128>c)return e=f>>>0,c=t>>>0,(t=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0),t?-e:e;e.l=!0,Fn()}function ye(e){e.g>e.i&&(e.l=!0,on(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Bt.prototype.j=function(){var e=this.h,c=e[this.g],f=c&127;return 128>c?(this.g+=1,ye(this),f):(c=e[this.g+1],f|=(c&127)<<7,128>c?(this.g+=2,ye(this),f):(c=e[this.g+2],f|=(c&127)<<14,128>c?(this.g+=3,ye(this),f):(c=e[this.g+3],f|=(c&127)<<21,128>c?(this.g+=4,ye(this),f):(c=e[this.g+4],f|=(c&15)<<28,128>c?(this.g+=5,ye(this),f>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Fn(),f):(ye(this),f))))))},Bt.prototype.o=function(){var e=this.h[this.g],c=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),f=(e<<0|c<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,c=f>>>23&255,f&=8388607,c==255?f?NaN:1/0*e:c==0?e*Math.pow(2,-149)*f:e*Math.pow(2,c-150)*(f+Math.pow(2,23))};var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(e,c){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=c}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var e=this.g,c=this.h;return this.h=0,Me(e,0,c)};function Ot(e,c){for(;127<c;)Xe(e,c&127|128),c>>>=7;Xe(e,c)}function je(e){var c={},f=c.N===void 0?!1:c.N;this.m={u:c.u===void 0?!1:c.u},this.N=f,c=this.m,we.length?(f=we.pop(),c&&(f.u=c.u),e&&Ie(f,e),e=f):e=new Bt(e,c),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(e){var c=e.g;if((c=c.g==c.i)||(c=e.j)||(c=e.g,c=c.l||0>c.g||c.g>c.i),c)return!1;e.l=e.g.g;var f=e.g.j();return c=f>>>3,f&=7,0<=f&&5>=f?(e.i=c,e.h=f,!0):(e.j=!0,Xn(f,e.l),!1)}function Se(e){switch(e.h){case 0:if(e.h!=0)Se(e);else t:{e=e.g;for(var c=e.g,f=0;10>f;f++){if((e.h[c]&128)===0){e.g=c+1,ye(e);break t}c++}e.l=!0,Fn()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Se(e):(c=e.g.j(),e=e.g,e.g+=c,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:c=e.i;do{if(!_e(e)){e.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=c&&(e.j=!0,on(Error("Unmatched end-group tag")));break}Se(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Wn(e,c,f){e.N||(e=Me(e.g.h,f,e.g.g),(f=c.o)?f.push(e):c.o=[e])}function ln(e,c,f){var t=e.g.i,u=e.g.j(),a=e.g.g+u;if(e.g.i=a,f(c,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(u+" bytes, instead read "+(u-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,c}function Qe(e,c,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(c.call(e.g))}var un=[];function ve(){this.h=[],this.i=0,this.g=new $e}function Le(e,c){c.length!==0&&(e.h.push(c),e.i+=c.length)}function Ge(e,c,f){Ot(e.g,8*c+2),Ot(e.g,f.length),Le(e,e.g.end()),Le(e,f)}var re=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function De(e,c){Object.isFrozen(e)||(re?e[re]|=c:e.g!==void 0?e.g|=c:Object.defineProperties(e,{g:{value:c,configurable:!0,writable:!0,enumerable:!1}}))}function te(e){if(!e)return 0;var c;return re?c=e[re]:c=e.g,c==null?0:c}function Pt(e){return Array.isArray(e)&&De(e,1),e}function hn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");De(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Nt(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Pe&&e!=null&&e instanceof Uint8Array?In(e):e;default:return e}}function Wt(e,c){if(e!=null)return Array.isArray(e)||fe(e)?ie(e,c):c(e)}function ie(e,c){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Wt(e[t],c);return te(e)&1&&Pt(f),f}f={};for(t in e)f[t]=Wt(e[t],c);return f}var Fe;function ee(e,c,f){var t=Fe;Fe=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}c!==void 0&&-1<c?(this.l=Math.max(c,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(f)for(c=0;c<f.length;c++)e=f[c],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=oe):(nt(this),(t=this.i[e])?Pt(t):this.i[e]=oe)}var oe=Object.freeze(Pt([]));function nt(e){var c=e.l+e.j;e.h[c]||(e.i=e.h[c]={})}function ot(e,c,f){return c===-1?null:(f===void 0?0:f)||c>=e.l?e.i?e.i[c]:void 0:e.h[c+e.j]}function at(e,c,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,u=ot(e,c,t);return u==null&&(u=oe),u===oe?(u=Pt([]),Tt(e,c,u,t)):f&&Array.isArray(u)&&te(u)&2&&(u=u.slice(),Tt(e,c,u,t)),u}function _t(e){var c=at(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<c.length;f++)c[f]=+c[f];e.m[3]=!0}return c}function ae(e,c,f){return e=ot(e,c),e==null?f:e}function ue(e,c,f){return e=ot(e,c),e=e==null?e:+e,e==null?f===void 0?0:f:e}function Tt(e,c,f,t){(t===void 0?0:t)||c>=e.l?(nt(e),e.i[c]=f):e.h[c+e.j]=f}function me(e,c,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var u=ot(e,f,!1);return u==null?t:(c=new c(u),e.g[f]=c)}function Ne(e,c,f){e.g||(e.g={});var t=e.g[f];if(!t){var u=at(e,f,!1);t=[];for(var a=Array.isArray(u)?!!(te(u)&2):!1,b=0;b<u.length;b++)t[b]=new c(u[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[f]=t}return t}function qe(e,c,f,t,u){var a=Ne(e,t,c);f=f||new t,e=at(e,c),u!=null?(a.splice(u,0,f),e.splice(u,0,tn(f))):(a.push(f),e.push(tn(f)))}ee.prototype.toJSON=function(){var e=tn(this);return ie(e,Nt)};function tn(e){if(e.g)for(var c in e.g){var f=e.g[c];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&tn(f[t]);else f&&tn(f)}return e.h}ee.prototype.toString=function(){return tn(this).toString()};function fn(e,c){if(e=e.o){Le(c,c.g.end());for(var f=0;f<e.length;f++)Le(c,e[f])}}function yn(e){var c=e[0];switch(e.length){case 2:var f=e[1];return function(L,H,K){return c(L,H,K,f)};case 3:var t=e[1],u=e[2];return function(L,H,K){return c(L,H,K,t,u)};case 4:var a=e[1],b=e[2],S=e[3];return function(L,H,K){return c(L,H,K,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function He(e,c,f){for(;_e(c)&&c.h!=4;){var t=c.i,u=f[t];if(u){if(Array.isArray(u)&&(u=f[t]=yn(u)),!u(c,e,t)){t=c,u=e;var a=t.l;Se(t),Wn(t,u,a)}}else t=c,u=e,a=t.l,Se(t),Wn(t,u,a)}return e}function en(e,c){var f=new ve;if(c(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.h,u=t.length,a=c=0;a<u;a++){var b=t[a];b.length!==0&&(e.set(b,c),c+=b.length)}t=f.g,u=t.h,u!==0&&(e.set(t.g.subarray(0,u),c),t.h=0),f.h=[e],f=e}return f}function zn(e,c,f){if(un.length){var t=un.pop();e&&(Ie(t.g,e),t.i=-1,t.h=-1),e=t}else e=new je(e);try{return f(new c,e)}finally{c=e.g,c.h=null,c.m=0,c.i=0,c.g=0,c.l=!1,c.u=!1,e.i=-1,e.h=-1,e.j=!1,100>un.length&&un.push(e)}}function nn(e,c,f){if(c=ot(c,f),c!=null){Ot(e.g,8*f+5),e=e.g;var t=c;t=(f=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(f<<31|t)>>>0):(c=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-c),t=Math.round(8388608*t),16777216<=t&&++c,Ze=0,Qt=(f<<31|c+127<<23|t&8388607)>>>0),f=Qt,Xe(e,f>>>0&255),Xe(e,f>>>8&255),Xe(e,f>>>16&255),Xe(e,f>>>24&255)}}function Je(e,c,f){return e.h!==5?!1:(Tt(c,f,e.g.o()),!0)}function Zn(e,c,f){return e.h!==5&&e.h!==2?!1:(c=at(c,f),e.h==2?Qe(e,Bt.prototype.o,c):c.push(e.g.o()),!0)}function Sn(e,c,f){return e.h!==0?!1:(Tt(c,f,zt(e.g)),!0)}function Be(e,c,f){return e.h!==0?!1:(Tt(c,f,e.g.j()),!0)}function En(e,c,f){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var u=e.g;e.g+=t,ye(e),e=e.h;var a;if(dn)(a=Nn)||(a=Nn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(u,u+t));else{t=u+t;for(var b=[],S=null,L,H,K;u<t;)L=e[u++],128>L?b.push(L):224>L?u>=t?b.push(65533):(H=e[u++],194>L||(H&192)!==128?(u--,b.push(65533)):b.push((L&31)<<6|H&63)):240>L?u>=t-1?b.push(65533):(H=e[u++],(H&192)!==128||L===224&&160>H||L===237&&160<=H||((a=e[u++])&192)!==128?(u--,b.push(65533)):b.push((L&15)<<12|(H&63)<<6|a&63)):244>=L?u>=t-2?b.push(65533):(H=e[u++],(H&192)!==128||(L<<28)+(H-144)>>30!==0||((a=e[u++])&192)!==128||((K=e[u++])&192)!==128?(u--,b.push(65533)):(L=(L&7)<<18|(H&63)<<12|(a&63)<<6|K&63,L-=65536,b.push((L>>10&1023)+55296,(L&1023)+56320))):b.push(65533),8192<=b.length&&(S=xn(S,b),b.length=0);a=xn(S,b)}return Tt(c,f,a),!0}function rn(e,c,f,t,u){if(e.h!==2)return!1;e=ln(e,new t,u);var a=a===void 0?!1:a;return c.g||(c.g={}),t=e&&tn(e),c.g[f]=e,Tt(c,f,t,a),!0}function vn(e,c,f,t,u){return e.h!==2?!1:(e=ln(e,new t,u),qe(c,f,e,t,void 0),!0)}function Yn(e,c,f){return e.h!==0&&e.h!==2?!1:(c=at(c,f),e.h==2?Qe(e,Bt.prototype.j,c):c.push(e.g.j()),!0)}function Mn(e,c,f){return e.h!==0?!1:(Tt(c,f,zt(e.g)),!0)}function cn(e){ee.call(this,e,-1,$n)}var Tn;ht(cn,ee),cn.prototype.getRows=function(){return ot(this,1)},cn.prototype.getCols=function(){return ot(this,2)},cn.prototype.getPackedDataList=function(){return _t(this)},cn.prototype.getLayout=function(){return ae(this,4,0)};function Dn(e,c){return He(e,c,Tn||(Tn={1:Be,2:Be,3:Zn,4:Mn}))}var $n=[3];function wn(e){ee.call(this,e)}var Cn;ht(wn,ee);function p(e,c){var f=ot(e,1);if(f!=null&&f!=null){Ot(c.g,8);var t=c.g;if(0<=f)Ot(t,f);else{for(var u=0;9>u;u++)Xe(t,f&127|128),f>>=7;Xe(t,1)}}nn(c,e,2),t=ot(e,3),t!=null&&Ge(c,3,Hn(t)),t=ot(e,4),t!=null&&Ge(c,4,Hn(t)),fn(e,c)}function V(e,c){return He(e,c,Cn||(Cn={1:Be,2:Je,3:En,4:En}))}function W(e){ee.call(this,e,-1,lt)}var E;ht(W,ee),W.prototype.addClassification=function(e,c){return qe(this,1,e,wn,c),this};function P(e,c){return He(e,c,E||(E={1:[vn,wn,V]}))}var lt=[1];function z(e){ee.call(this,e)}var it;ht(z,ee);function bt(e,c){nn(c,e,1),nn(c,e,2),nn(c,e,3),nn(c,e,4),nn(c,e,5),fn(e,c)}function It(e,c){return He(e,c,it||(it={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Ut(e){ee.call(this,e,-1,Et)}var kt;ht(Ut,ee);function qt(e,c){return He(e,c,kt||(kt={1:[vn,z,It]}))}var Et=[1];function wt(e){ee.call(this,e)}var Kt;ht(wt,ee);function Dt(e,c){nn(c,e,1),nn(c,e,2),nn(c,e,3),nn(c,e,4),nn(c,e,5);var f=ot(e,6);if(f!=null&&f!=null){Ot(c.g,48);var t=c.g,u=f;f=0>u,u=Math.abs(u);var a=u>>>0;for(u=Math.floor((u-a)/4294967296),u>>>=0,f&&(u=~u>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,u++,4294967295<u&&(u=0))),Qt=a,Ze=u,f=Qt,a=Ze;0<a||127<f;)Xe(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Xe(t,f)}fn(e,c)}function ce(e,c){return He(e,c,Kt||(Kt={1:Je,2:Je,3:Je,4:Je,5:Je,6:Sn}))}function pe(e){ee.call(this,e,-1,h)}var ge;ht(pe,ee),pe.prototype.getVertexType=function(){return ae(this,1,0)},pe.prototype.getPrimitiveType=function(){return ae(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return at(this,4)};function ke(e,c){return He(e,c,ge||(ge={1:Mn,2:Mn,3:Zn,4:Yn}))}var h=[3,4];function g(e){ee.call(this,e)}var G;ht(g,ee),g.prototype.getMesh=function(){return me(this,pe,1)},g.prototype.getPoseTransformMatrix=function(){return me(this,cn,2)};function C(e,c){return He(e,c,G||(G={1:[rn,pe,ke],2:[rn,cn,Dn]}))}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(k(M),k(Q),k(B),k(tt),k(ct),k(s));function R(e,c,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,c),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
38
38
|
|
|
39
|
-
`+e.getShaderInfoLog(f));return f}function w(e){return Ne(e,wn,1).map(function(c){return{index:ae(c,1,0),score:ue(c,2),label:ot(c,3)!=null?ae(c,3,""):void 0,displayName:ot(c,4)!=null?ae(c,4,""):void 0}})}function N(e){return{x:ue(e,1),y:ue(e,2),z:ue(e,3),visibility:ot(e,4)!=null?ue(e,4):void 0}}function A(e){return Ne(zn(e,
|
|
39
|
+
`+e.getShaderInfoLog(f));return f}function w(e){return Ne(e,wn,1).map(function(c){return{index:ae(c,1,0),score:ue(c,2),label:ot(c,3)!=null?ae(c,3,""):void 0,displayName:ot(c,4)!=null?ae(c,4,""):void 0}})}function N(e){return{x:ue(e,1),y:ue(e,2),z:ue(e,3),visibility:ot(e,4)!=null?ue(e,4):void 0}}function A(e){return Ne(zn(e,Ut,qt),z,1).map(N)}function U(e,c){this.h=e,this.g=c,this.l=0}function rt(e,c,f){return q(e,c),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):f?Promise.resolve(e.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(e.g.canvas):(e.i===void 0&&(e.i=document.createElement("canvas")),new Promise(function(t){e.i.height=e.g.canvas.height,e.i.width=e.g.canvas.width,e.i.getContext("2d",{}).drawImage(e.g.canvas,0,0,e.g.canvas.width,e.g.canvas.height),t(e.i)}))}function q(e,c){var f=e.g;if(e.m===void 0){var t=R(f,`
|
|
40
40
|
attribute vec2 aVertex;
|
|
41
41
|
attribute vec2 aTex;
|
|
42
42
|
varying vec2 vTex;
|
|
@@ -51,9 +51,9 @@
|
|
|
51
51
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
52
52
|
}`,1),a=f.createProgram();if(f.attachShader(a,t),f.attachShader(a,u),f.linkProgram(a),!f.getProgramParameter(a,f.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
53
53
|
|
|
54
|
-
`+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),u=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:u},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(u,0)}t=e.j,f.useProgram(e.m),f.canvas.width=c.width,f.canvas.height=c.height,f.viewport(0,0,c.width,c.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(c.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Gt=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 Mt(e,c){return c+e}function St(e,c){window[e]=c}function ft(e){var c=document.createElement("script");return c.setAttribute("src",e),c.setAttribute("crossorigin","anonymous"),new Promise(function(f){c.addEventListener("load",function(){f()},!1),c.addEventListener("error",function(){f()},!1),document.body.appendChild(c)})}function Xt(){return gt(function(e){switch(e.g){case 1:return e.m=2,_(e,WebAssembly.instantiate(Gt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function Yt(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Mt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=c,e.options){c=Y(Object.keys(e.options));for(var f=c.next();!f.done;f=c.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}o=Yt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Ht(e){var c,f,t,u,a,b,S,L,F,U,j;return gt(function(D){switch(D.g){case 1:return e.R?(c=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,_(D,Xt(),2)):D.return();case 2:if(f=D.h,typeof window=="object")return St("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),St("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=c.filter(function($){return $.data!==void 0}),S=c.filter(function($){return $.data===void 0}),L=Promise.all(b.map(function($){var ut=v(e,$.url);if($.path!==void 0){var mt=$.path;ut=ut.then(function(pt){return e.overrideFile(mt,pt),Promise.resolve(pt)})}return ut})),F=Promise.all(S.map(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f?ft(e.locateFile($.url,e.S)):Promise.resolve()})).then(function(){var $,ut,mt;return gt(function(pt){if(pt.g==1)return $=window.createMediapipeSolutionsWasm,ut=window.createMediapipeSolutionsPackedAssets,mt=e,_(pt,$(ut),2);mt.h=pt.h,pt.g=0})}),U=function(){return gt(function($){return e.g.graph&&e.g.graph.url?$=_($,v(e,e.g.graph.url),0):($.g=0,$=void 0),$})}(),_(D,Promise.all([F,L,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=c.filter(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f}).map(function($){return e.locateFile($.url,e.S)}),importScripts.apply(null,k(t)),u=e,_(D,createMediapipeSolutionsWasm(Module),6);case 6:u.h=D.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),D.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),D.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,D.g=0}})}function Ct(e){var c,f,t,u,a,b,S,L;return gt(function(F){if(F.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return F.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){F.g=2;return}return e.P=e.g.graph.url,_(F,v(e,e.g.graph.url),3)}for(F.g!=2&&(c=F.h,e.i.loadGraph(c)),f=Y(Object.keys(e.B)),t=f.next();!t.done;t=f.next())u=t.value,e.i.overrideFile(u,e.B[u]);if(e.B={},e.g.listeners)for(a=Y(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,J(e,S);L=e.j,e.j={},e.setOptions(L),F.g=0})}o.reset=function(){var e=this;return gt(function(c){e.i&&(e.i.reset(),e.m={},e.s={}),c.g=0})},o.setOptions=function(e,c){var f=this;if(c=c||this.g.options){for(var t=[],u=[],a={},b=Y(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var L=S.value;L in this.j&&this.j[L]===e[L]||(this.j[L]=e[L],S=c[L],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[L],t.push(function(F){return function(){var U;return gt(function(j){if(j.g==1)return _(j,F.K(F.L),2);U=j.h,U===!0&&(f.o=!0),j.g=0})}}(a))),S.graphOptionXref&&(L={valueNumber:S.type===1?e[L]:0,valueBoolean:S.type===0?e[L]:!1,valueString:S.type===2?e[L]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),L),u.push(S))))}(t.length!==0||u.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(u),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var c,f,t,u,a,b,S;return gt(function(L){switch(L.g){case 1:if(!e.o)return L.return();if(!e.v){L.g=2;break}c=Y(e.v),f=c.next();case 3:if(f.done){L.g=5;break}return t=f.value,_(L,t(),4);case 4:f=c.next(),L.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(u=new e.h.GraphOptionChangeRequestList,a=Y(e.A),b=a.next();!b.done;b=a.next())S=b.value,u.push_back(S);e.i.changeOptions(u),u.delete(),e.A=void 0}e.o=!1,L.g=0}})}o.initialize=function(){var e=this;return gt(function(c){return c.g==1?_(c,Ht(e),2):c.g!=3?_(c,Ct(e),3):_(c,l(e),0)})};function v(e,c){var f,t;return gt(function(u){return c in e.F?u.return(e.F[c]):(f=e.locateFile(c,""),t=fetch(f).then(function(a){return a.arrayBuffer()}),e.F[c]=t,u.return(t))})}o.overrideFile=function(e,c){this.i?this.i.overrideFile(e,c):this.B[e]=c},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(e,c){var f=this,t,u,a,b,S,L,F,U,j;return gt(function(D){switch(D.g){case 1:return f.g.inputs?(t=1e3*(c==null?performance.now():c),_(D,f.C,2)):D.return();case 2:return _(D,f.initialize(),3);case 3:for(u=new f.h.PacketDataList,a=Y(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,L=f.g.inputs[S]){t:{var $=e[S];switch(L.type){case"video":var ut=f.m[L.stream];if(ut||(ut=new K(f.h,f.D),f.m[L.stream]=ut),ut.l===0&&(ut.l=ut.h.createTexture()),typeof HTMLVideoElement<"u"&&$ instanceof HTMLVideoElement)var mt=$.videoWidth,pt=$.videoHeight;else typeof HTMLImageElement<"u"&&$ instanceof HTMLImageElement?(mt=$.naturalWidth,pt=$.naturalHeight):(mt=$.width,pt=$.height);pt={glName:ut.l,width:mt,height:pt},mt=ut.g,mt.canvas.width=pt.width,mt.canvas.height=pt.height,mt.activeTexture(mt.TEXTURE0),ut.h.bindTexture2d(ut.l),mt.texImage2D(mt.TEXTURE_2D,0,mt.RGBA,mt.RGBA,mt.UNSIGNED_BYTE,$),ut.h.bindTexture2d(0),ut=pt;break t;case"detections":for(ut=f.m[L.stream],ut||(ut=new yt(f.h),f.m[L.stream]=ut),ut.data||(ut.data=new ut.g.DetectionListData),ut.data.reset($.length),pt=0;pt<$.length;++pt){mt=$[pt];var vt=ut.data,Zt=vt.setBoundingBox,jt=pt,se=mt.T,le=new wt;if(Tt(le,1,se.X),Tt(le,2,se.Y),Tt(le,3,se.height),Tt(le,4,se.width),Tt(le,5,se.rotation),Tt(le,6,se.W),se=en(le,Dt),Zt.call(vt,jt,se),mt.O)for(vt=0;vt<mt.O.length;++vt){le=mt.O[vt];var Ue=!!le.visibility;Zt=ut.data,jt=Zt.addNormalizedLandmark,se=pt,le=Object.assign(Object.assign({},le),{visibility:Ue?le.visibility:0}),Ue=new z,Tt(Ue,1,le.x),Tt(Ue,2,le.y),Tt(Ue,3,le.z),le.visibility&&Tt(Ue,4,le.visibility),le=en(Ue,bt),jt.call(Zt,se,le)}if(mt.M)for(vt=0;vt<mt.M.length;++vt)Zt=ut.data,jt=Zt.addClassification,se=pt,le=mt.M[vt],Ue=new wn,Tt(Ue,2,le.score),le.index&&Tt(Ue,1,le.index),le.label&&Tt(Ue,3,le.label),le.displayName&&Tt(Ue,4,le.displayName),le=en(Ue,p),jt.call(Zt,se,le)}ut=ut.data;break t;default:ut={}}}switch(F=ut,U=L.stream,L.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},F),{stream:U,timestamp:t}));break;case"detections":j=F,j.stream=U,j.timestamp=t,u.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+L.type+"'")}}return f.i.send(u),_(D,f.C,4);case 4:u.delete(),D.g=0}})};function x(e,c,f){var t,u,a,b,S,L,F,U,j,D,$,ut,mt,pt;return gt(function(vt){switch(vt.g){case 1:if(!f)return vt.return(c);for(t={},u=0,a=Y(Object.keys(f)),b=a.next();!b.done;b=a.next())S=b.value,L=f[S],typeof L!="string"&&L.type==="texture"&&c[L.stream]!==void 0&&++u;1<u&&(e.G=!1),F=Y(Object.keys(f)),b=F.next();case 2:if(b.done){vt.g=4;break}if(U=b.value,j=f[U],typeof j=="string")return mt=t,pt=U,_(vt,T(e,U,c[j]),14);if(D=c[j.stream],j.type==="detection_list"){if(D){for(var Zt=D.getRectList(),jt=D.getLandmarksList(),se=D.getClassificationsList(),le=[],Ue=0;Ue<Zt.size();++Ue){var Rn=zn(Zt.get(Ue),wt,ce);Rn={T:{X:ue(Rn,1),Y:ue(Rn,2),height:ue(Rn,3),width:ue(Rn,4),rotation:ue(Rn,5,0),W:ae(Rn,6,0)},O:A(jt.get(Ue)),M:w(zn(se.get(Ue),W,O))},le.push(Rn)}Zt=le}else Zt=[];t[U]=Zt,vt.g=7;break}if(j.type==="proto_list"){if(D){for(Zt=Array(D.size()),jt=0;jt<D.size();jt++)Zt[jt]=D.get(jt);D.delete()}else Zt=[];t[U]=Zt,vt.g=7;break}if(D===void 0){vt.g=3;break}if(j.type==="float_list"){t[U]=D,vt.g=7;break}if(j.type==="proto"){t[U]=D,vt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return $=e.s[U],$||($=new K(e.h,e.D),e.s[U]=$),_(vt,rt($,D,e.G),13);case 13:ut=vt.h,t[U]=ut;case 7:j.transform&&t[U]&&(t[U]=j.transform(t[U])),vt.g=3;break;case 14:mt[pt]=vt.h;case 3:b=F.next(),vt.g=2;break;case 4:return vt.return(t)}})}function T(e,c,f){var t;return gt(function(u){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?u.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[c],t||(t=new K(e.h,e.D),e.s[c]=t),u.return(rt(t,f,e.G))):u.return(void 0)})}function J(e,c){for(var f=c.name||"$",t=[].concat(k(c.wants)),u=new e.h.StringList,a=Y(c.wants),b=a.next();!b.done;b=a.next())u.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var L={},F=0;F<c.wants.length;++F)L[t[F]]=S.get(F);var U=e.listeners[f];U&&(e.C=x(e,L,c.outs).then(function(j){j=U(j);for(var D=0;D<c.wants.length;++D){var $=L[t[D]];typeof $=="object"&&$.hasOwnProperty&&$.hasOwnProperty("delete")&&$.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(u,a),u.delete()}o.onResults=function(e,c){this.listeners[c||"$"]=e},Jt("Solution",Yt),Jt("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function i(e){return e.map(d)}function d(e){e=zn(e,g,C);var c=e.getMesh();if(!c)return e;var f=new Float32Array(c.getVertexBufferList());c.getVertexBufferList=function(){return f};var t=new Uint32Array(c.getIndexBufferList());return c.getIndexBufferList=function(){return t},e}function Z(e){var c=this;e=e||{},this.g=new Yt({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:i}}}],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(f){var t,u,a,b;return gt(function(S){if(S.g==1){switch(t="",f){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return u="third_party/mediapipe/modules/pose_landmark/"+t,a=c.g.locateFile(t,""),_(S,fetch(a),3)}return S.g!=2?_(S,S.h.arrayBuffer(),2):(b=S.h,c.g.overrideFile(u,b),_(S,c.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"}}}})}o=Z.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(e){this.g.onResults(e)},o.initialize=function(){var e=this;return gt(function(c){return _(c,e.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(e){var c=this;return gt(function(f){return _(f,c.g.send(e),0)})},o.setOptions=function(e){this.g.setOptions(e)},Jt("Holistic",Z),Jt("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}}),Jt("FACEMESH_LIPS",M),Jt("FACEMESH_LEFT_EYE",Q),Jt("FACEMESH_LEFT_EYEBROW",B),Jt("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Jt("FACEMESH_RIGHT_EYE",tt),Jt("FACEMESH_RIGHT_EYEBROW",ct),Jt("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Jt("FACEMESH_FACE_OVAL",s),Jt("FACEMESH_CONTOURS",X),Jt("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]]),Jt("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]]),Jt("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]]),Jt("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}),Jt("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}),Jt("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}),Jt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Jt("matrixDataToMatrix",function(e){for(var c=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),u=[],a=0;a<f;a++)u.push(Array(c));for(a=0;a<f;a++)for(var b=0;b<c;b++){var S=e.getLayout()===1?a*c+b:b*f+a;u[a][b]=t[S]}return u}),Jt("VERSION","0.5.1635989137")}).call(bi);const yi={};(function(){var o;function n(i){var d=0;return function(){return d<i.length?{done:!1,value:i[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(i,d,Z){return i==Array.prototype||i==Object.prototype||(i[d]=Z.value),i};function m(i){i=[typeof globalThis=="object"&&globalThis,i,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<i.length;++d){var Z=i[d];if(Z&&Z.Math==Math)return Z}throw Error("Cannot find global object")}var y=m(this);function I(i,d){if(d)t:{var Z=y;i=i.split(".");for(var e=0;e<i.length-1;e++){var c=i[e];if(!(c in Z))break t;Z=Z[c]}i=i[i.length-1],e=Z[i],d=d(e),d!=e&&d!=null&&r(Z,i,{configurable:!0,writable:!0,value:d})}}I("Symbol",function(i){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new Z(e+(f||"")+"_"+c++,f)}function Z(f,t){this.g=f,r(this,"description",{configurable:!0,writable:!0,value:t})}if(i)return i;Z.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return d}),I("Symbol.iterator",function(i){if(i)return i;i=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),Z=0;Z<d.length;Z++){var e=y[d[Z]];typeof e=="function"&&typeof e.prototype[i]!="function"&&r(e.prototype,i,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return i});function H(i){return i={next:i},i[Symbol.iterator]=function(){return this},i}function Y(i){var d=typeof Symbol<"u"&&Symbol.iterator&&i[Symbol.iterator];return d?d.call(i):{next:n(i)}}function k(i){if(!(i instanceof Array)){i=Y(i);for(var d,Z=[];!(d=i.next()).done;)Z.push(d.value);i=Z}return i}var nt=typeof Object.create=="function"?Object.create:function(i){function d(){}return d.prototype=i,new d},P;if(typeof Object.setPrototypeOf=="function")P=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}P=st?function(i,d){if(i.__proto__=d,i.__proto__!==d)throw new TypeError(i+" is not extensible");return i}:null}var dt=P;function ht(i,d){if(i.prototype=nt(d.prototype),i.prototype.constructor=i,dt)dt(i,d);else for(var Z in d)if(Z!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,Z);e&&Object.defineProperty(i,Z,e)}else i[Z]=d[Z];i.na=d.prototype}function Ft(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Lt(i){if(i.l)throw new TypeError("Generator is already running");i.l=!0}Ft.prototype.s=function(i){this.h=i};function At(i,d){i.j={da:d,ea:!0},i.g=i.o||i.u}Ft.prototype.return=function(i){this.j={return:i},this.g=this.u};function _(i,d,Z){return i.g=Z,{value:d}}function Ee(i){this.g=new Ft,this.h=i}function an(i,d){Lt(i.g);var Z=i.g.i;return Z?We(i,"return"in Z?Z.return:function(e){return{value:e,done:!0}},d,i.g.return):(i.g.return(d),$t(i))}function We(i,d,Z,e){try{var c=d.call(i.g.i,Z);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return i.g.l=!1,c;var f=c.value}catch(t){return i.g.i=null,At(i.g,t),$t(i)}return i.g.i=null,e.call(i.g,f),$t(i)}function $t(i){for(;i.g.g;)try{var d=i.h(i.g);if(d)return i.g.l=!1,{value:d.value,done:!1}}catch(Z){i.g.h=void 0,At(i.g,Z)}if(i.g.l=!1,i.g.j){if(d=i.g.j,i.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function An(i){this.next=function(d){return Lt(i.g),i.g.i?d=We(i,i.g.i.next,d,i.g.s):(i.g.s(d),d=$t(i)),d},this.throw=function(d){return Lt(i.g),i.g.i?d=We(i,i.g.i.throw,d,i.g.s):(At(i.g,d),d=$t(i)),d},this.return=function(d){return an(i,d)},this[Symbol.iterator]=function(){return this}}function de(i){function d(e){return i.next(e)}function Z(e){return i.throw(e)}return new Promise(function(e,c){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,Z).then(f,c)}f(i.next())})}function gt(i){return de(new An(new Ee(i)))}I("Promise",function(i){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var u=this.j();try{t(u.resolve,u.reject)}catch(a){u.reject(a)}}function Z(){this.g=null}function e(t){return t instanceof d?t:new d(function(u){u(t)})}if(i)return i;Z.prototype.h=function(t){if(this.g==null){this.g=[];var u=this;this.i(function(){u.l()})}this.g.push(t)};var c=y.setTimeout;Z.prototype.i=function(t){c(t,0)},Z.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var u=0;u<t.length;++u){var a=t[u];t[u]=null;try{a()}catch(b){this.j(b)}}}this.g=null},Z.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(u,S))}}var u=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var u=t!=null;break t;case"function":u=!0;break t;default:u=!1}u?this.A(t):this.o(t)}},d.prototype.A=function(t){var u=void 0;try{u=t.then}catch(a){this.l(a);return}typeof u=="function"?this.I(u,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,u){if(this.h!=0)throw Error("Cannot settle("+t+", "+u+"): Promise already settled in state"+this.h);this.h=t,this.i=u,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;c(function(){if(t.C()){var u=y.console;typeof u<"u"&&u.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=y.CustomEvent,u=y.Event,a=y.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof u=="function"?t=new u("unhandledrejection",{cancelable:!0}):(t=y.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)f.h(this.g[t]);this.g=null}};var f=new Z;return d.prototype.H=function(t){var u=this.j();t.M(u.resolve,u.reject)},d.prototype.I=function(t,u){var a=this.j();try{t.call(u,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,u){function a(F,U){return typeof F=="function"?function(j){try{b(F(j))}catch(D){S(D)}}:U}var b,S,L=new d(function(F,U){b=F,S=U});return this.M(a(t,b),a(u,S)),L},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,u){function a(){switch(b.h){case 1:t(b.i);break;case 2:u(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?f.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(u,a){a(t)})},d.race=function(t){return new d(function(u,a){for(var b=Y(t),S=b.next();!S.done;S=b.next())e(S.value).M(u,a)})},d.all=function(t){var u=Y(t),a=u.next();return a.done?e([]):new d(function(b,S){function L(j){return function(D){F[j]=D,U--,U==0&&b(F)}}var F=[],U=0;do F.push(void 0),U++,e(a.value).M(L(F.length-1),S),a=u.next();while(!a.done)})},d});function pn(i,d){i instanceof String&&(i+="");var Z=0,e=!1,c={next:function(){if(!e&&Z<i.length){var f=Z++;return{value:d(f,i[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var jn=typeof Object.assign=="function"?Object.assign:function(i,d){for(var Z=1;Z<arguments.length;Z++){var e=arguments[Z];if(e)for(var c in e)Object.prototype.hasOwnProperty.call(e,c)&&(i[c]=e[c])}return i};I("Object.assign",function(i){return i||jn}),I("Object.is",function(i){return i||function(d,Z){return d===Z?d!==0||1/d===1/Z:d!==d&&Z!==Z}}),I("Array.prototype.includes",function(i){return i||function(d,Z){var e=this;e instanceof String&&(e=String(e));var c=e.length;for(Z=Z||0,0>Z&&(Z=Math.max(Z+c,0));Z<c;Z++){var f=e[Z];if(f===d||Object.is(f,d))return!0}return!1}}),I("String.prototype.includes",function(i){return i||function(d,Z){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,Z||0)!==-1}}),I("Array.prototype.keys",function(i){return i||function(){return pn(this,function(d){return d})}});var Re=this||self;function Jt(i,d){i=i.split(".");var Z=Re;i[0]in Z||typeof Z.execScript>"u"||Z.execScript("var "+i[0]);for(var e;i.length&&(e=i.shift());)i.length||d===void 0?Z[e]&&Z[e]!==Object.prototype[e]?Z=Z[e]:Z=Z[e]={}:Z[e]=d}function Te(){throw Error("Invalid UTF8")}function on(i,d){return d=String.fromCharCode.apply(null,d),i==null?d:i+d}var Xn,Hn=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function kn(i){var d;d===void 0&&(d=0),Ae(),d=dn[d];for(var Z=Array(Math.floor(i.length/3)),e=d[64]||"",c=0,f=0;c<i.length-2;c+=3){var t=i[c],u=i[c+1],a=i[c+2],b=d[t>>2];t=d[(t&3)<<4|u>>4],u=d[(u&15)<<2|a>>6],a=d[a&63],Z[f++]=b+t+u+a}switch(b=0,a=e,i.length-c){case 2:b=i[c+1],a=d[(b&15)<<2]||e;case 1:i=i[c],Z[f]=d[i>>2]+d[(i&3)<<4|b>>4]+a+e}return Z.join("")}function Fn(i){var d=i.length,Z=3*d/4;Z%3?Z=Math.floor(Z):"=.".indexOf(i[d-1])!=-1&&(Z="=.".indexOf(i[d-2])!=-1?Z-2:Z-1);var e=new Uint8Array(Z),c=0;return Pe(i,function(f){e[c++]=f}),c!==Z?e.subarray(0,c):e}function Pe(i,d){function Z(a){for(;e<i.length;){var b=i.charAt(e++),S=bn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ae();for(var e=0;;){var c=Z(-1),f=Z(0),t=Z(64),u=Z(64);if(u===64&&c===-1)break;d(c<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),u!=64&&d(t<<6&192|u))}}function Ae(){if(!bn){bn={};for(var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],Z=0;5>Z;Z++){var e=i.concat(d[Z].split(""));dn[Z]=e;for(var c=0;c<e.length;c++){var f=e[c];bn[f]===void 0&&(bn[f]=c)}}}}var In=typeof Uint8Array=="function";function Vn(i){return In&&i!=null&&i instanceof Uint8Array}var he;function Ye(i){if(this.L=i,i!==null&&i.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",ne=0,Ve=0;function sn(i,d){if(i.constructor===Uint8Array)return i;if(i.constructor===ArrayBuffer)return new Uint8Array(i);if(i.constructor===Array)return new Uint8Array(i);if(i.constructor===String)return Fn(i);if(i.constructor===Ye)return!d&&(d=i.L)&&d.constructor===Uint8Array?d:(d=i.L,d=d==null||Vn(d)?d:typeof d=="string"?Fn(d):null,(i=i.L=d)?new Uint8Array(i):he||(he=new Uint8Array(0)));if(i instanceof Uint8Array)return new Uint8Array(i.buffer,i.byteOffset,i.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Me(i,d){return Error("Invalid wire type: "+i+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(i,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,i&&Ce(this,i)}function Ce(i,d){i.h=sn(d,i.v),i.j=0,i.i=i.h.length,i.g=i.j}Ze.prototype.reset=function(){this.g=this.j};function Bt(i){if(i.g>i.i)throw Error("Tried to read past the end of the data "+i.g+" > "+i.i)}function Ie(i){var d=i.h,Z=d[i.g],e=Z&127;if(128>Z)return i.g+=1,Bt(i),e;if(Z=d[i.g+1],e|=(Z&127)<<7,128>Z)return i.g+=2,Bt(i),e;if(Z=d[i.g+2],e|=(Z&127)<<14,128>Z)return i.g+=3,Bt(i),e;if(Z=d[i.g+3],e|=(Z&127)<<21,128>Z)return i.g+=4,Bt(i),e;if(Z=d[i.g+4],i.g+=5,e|=(Z&15)<<28,128>Z)return Bt(i),e;if(128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++])throw Qt();return Bt(i),e}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var i=this.g;return this.g=[],i};function we(i,d){for(;127<d;)i.g.push(d&127|128),d>>>=7;i.g.push(d)}function $e(i){var d={},Z=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=Z,d=this.l,zt.length?(Z=zt.pop(),d&&(Z.v=d.v),i&&Ce(Z,i),i=Z):i=new Ze(i,d),this.g=i,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(i){var d=i.g;if(d.g==d.i)return!1;i.j=i.g.g;var Z=Ie(i.g)>>>0;if(d=Z>>>3,Z&=7,!(0<=Z&&5>=Z))throw Me(Z,i.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+i.j+")");return i.i=d,i.h=Z,!0}function Pt(i){switch(i.h){case 0:if(i.h!=0)Pt(i);else t:{i=i.g;for(var d=i.g,Z=d+10;d<Z;)if((i.h[d++]&128)===0){i.g=d,Bt(i);break t}throw Qt()}break;case 1:i=i.g,i.g+=8,Bt(i);break;case 2:i.h!=2?Pt(i):(d=Ie(i.g)>>>0,i=i.g,i.g+=d,Bt(i));break;case 5:i=i.g,i.g+=4,Bt(i);break;case 3:d=i.i;do{if(!Xe(i))throw Error("Unmatched start-group tag: stream EOF");if(i.h==4){if(i.i!=d)throw Error("Unmatched end-group tag");break}Pt(i)}while(1);break;default:throw Me(i.h,i.j)}}var je=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Se(i,d){d.length!==0&&(i.i.push(d),i.h+=d.length)}function Wn(i,d){if(d=d.ba){Se(i,i.g.end());for(var Z=0;Z<d.length;Z++)Se(i,d[Z])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(i,d){Object.isFrozen(i)||(ln?i[ln]|=d:i.N!==void 0?i.N|=d:Object.defineProperties(i,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function un(i){var d;return ln?d=i[ln]:d=i.N,d==null?0:d}function ve(i){return Qe(i,1),i}function Le(i){return Array.isArray(i)?!!(un(i)&2):!1}function Ge(i){if(!Array.isArray(i))throw Error("cannot mark non-array as immutable");Qe(i,2)}function re(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)&&i.constructor===Object}var De=Object.freeze(ve([]));function te(i){if(Le(i.m))throw Error("Cannot mutate an immutable Message")}var Ot=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(i){return{value:i,configurable:!1,writable:!1,enumerable:!1}}function fe(i,d,Z){return d===-1?null:d>=i.i?i.g?i.g[d]:void 0:(Z===void 0?0:Z)&&i.g&&(Z=i.g[d],Z!=null)?Z:i.m[d+i.h]}function Nt(i,d,Z,e){e=e===void 0?!1:e,te(i),d<i.i&&!e?i.m[d+i.h]=Z:(i.g||(i.g=i.m[i.i+i.h]={}))[d]=Z}function Wt(i,d,Z,e){Z=Z===void 0?!0:Z,e=e===void 0?!1:e;var c=fe(i,d,e);return c==null&&(c=De),Le(i.m)?Z&&(Ge(c),Object.freeze(c)):(c===De||Le(c))&&(c=ve(c.slice()),Nt(i,d,c,e)),c}function ie(i,d,Z){return i=fe(i,d),i=i==null?i:+i,i==null?Z===void 0?0:Z:i}function He(i,d,Z,e){i.j||(i.j={});var c=Le(i.m),f=i.j[Z];if(!f){e=Wt(i,Z,!0,e===void 0?!1:e),f=[],c=c||Le(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),c&&Ge(f[t].m);c&&(Ge(f),Object.freeze(f)),i.j[Z]=f}return f}function ee(i,d,Z,e,c){var f=f===void 0?!1:f;return te(i),f=He(i,Z,d,f),Z=e||new Z,i=Wt(i,d),c!=null?(f.splice(c,0,Z),i.splice(c,0,Z.m)):(f.push(Z),i.push(Z.m)),Z}function oe(i,d){return i=fe(i,d),i==null?0:i}function et(i,d){return i=fe(i,d),i==null?"":i}function ot(i){switch(typeof i){case"number":return isFinite(i)?i:String(i);case"object":if(i&&!Array.isArray(i)){if(Vn(i))return kn(i);if(i instanceof Ye){var d=i.L;return d=d==null||typeof d=="string"?d:In&&d instanceof Uint8Array?kn(d):null,(i.L=d)||""}}}return i}function at(i){var d=ue;return d=d===void 0?Tt:d,ae(i,d)}function _t(i,d){if(i!=null){if(Array.isArray(i))i=ae(i,d);else if(re(i)){var Z={},e;for(e in i)Z[e]=_t(i[e],d);i=Z}else i=d(i);return i}}function ae(i,d){for(var Z=i.slice(),e=0;e<Z.length;e++)Z[e]=_t(Z[e],d);return Array.isArray(i)&&un(i)&1&&ve(Z),Z}function ue(i){return i&&typeof i=="object"&&i.toJSON?i.toJSON():(i=ot(i),Array.isArray(i)?at(i):i)}function Tt(i){return Vn(i)?new Uint8Array(i):i}function me(i,d,Z){i||(i=Ne),Ne=null;var e=this.constructor.h;i||(i=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=i;t:{if(e=this.m.length,i=e-1,e&&(e=this.m[i],re(e))){this.i=i-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,i+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(Z)for(d=0;d<Z.length;d++)if(i=Z[d],i<this.i)i+=this.h,(e=this.m[i])?Array.isArray(e)&&ve(e):this.m[i]=De;else{e=this.g||(this.g=this.m[this.i+this.h]={});var c=e[i];c?Array.isArray(c)&&ve(c):e[i]=De}}me.prototype.toJSON=function(){return at(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ne;function qe(){me.apply(this,arguments)}if(ht(qe,me),Ot){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(i,d,Z){if(Z){var e={},c;for(c in Z){var f=Z[c],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=Sn(f.aa),t=function(u){return function(a,b,S){return u.F(a,b,S,u.U)}}(e)):f.ca?(e.T=Be(f.X.g,f.ca),t=function(u){return function(a,b,S){return u.F(a,b,S,u.T)}}(e)):t=e.F,f.ha=t),t(d,i,f.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,i)}var yn=Symbol();function Fe(i,d,Z){return i[yn]||(i[yn]=function(e,c){return d(e,c,Z)})}function en(i){var d=i[yn];if(!d){var Z=p(i);d=function(e,c){return V(e,c,Z)},i[yn]=d}return d}function zn(i){var d=i.aa;if(d)return en(d);if(d=i.ka)return Fe(i.X.g,d,i.ca)}function nn(i){var d=zn(i),Z=i.X,e=i.fa.O;return d?function(c,f){return e(c,f,Z,d)}:function(c,f){return e(c,f,Z)}}function Je(i,d,Z,e,c,f){i=i();var t=0;for(i.length&&typeof i[0]!="number"&&(Z(d,i[0]),t++);t<i.length;){Z=i[t++];for(var u=t+1;u<i.length&&typeof i[u]!="number";)u++;var a=i[t++];switch(u-=t,u){case 0:e(d,Z,a);break;case 1:e(d,Z,a,i[t++]);break;case 2:c(d,Z,a,i[t++],i[t++]);break;case 3:u=i[t++];var b=i[t++],S=i[t++];Array.isArray(S)?c(d,Z,a,u,b,S):f(d,Z,a,u,b,S);break;case 4:f(d,Z,a,i[t++],i[t++],i[t++],i[t++]);break;default:throw Error("unexpected number of binary field arguments: "+u)}}return d}var Zn=Symbol();function Sn(i){var d=i[Zn];if(!d){var Z=cn(i);d=function(e,c){return E(e,c,Z)},i[Zn]=d}return d}function Be(i,d){var Z=i[Zn];return Z||(Z=function(e,c){return fn(e,c,d)},i[Zn]=Z),Z}var En=Symbol();function rn(i,d){i.push(d)}function vn(i,d,Z){i.push(d,Z.P)}function Yn(i,d,Z,e,c){var f=Sn(c),t=Z.P;i.push(d,function(u,a,b){return t(u,a,b,e,f)})}function Mn(i,d,Z,e,c,f){var t=Be(e,f),u=Z.P;i.push(d,function(a,b,S){return u(a,b,S,e,t)})}function cn(i){var d=i[En];return d||Je(i,i[En]=[],rn,vn,Yn,Mn)}var Tn=Symbol();function Dn(i,d){i[0]=d}function $n(i,d,Z,e){var c=Z.O;i[d]=e?function(f,t,u){return c(f,t,u,e)}:c}function wn(i,d,Z,e,c,f){var t=Z.O,u=en(c);i[d]=function(a,b,S){return t(a,b,S,e,u,f)}}function Cn(i,d,Z,e,c,f,t){var u=Z.O,a=Fe(e,c,f);i[d]=function(b,S,L){return u(b,S,L,e,a,t)}}function p(i){var d=i[Tn];return d||Je(i,i[Tn]={},Dn,$n,wn,Cn)}function V(i,d,Z){for(;Xe(d)&&d.h!=4;){var e=d.i,c=Z[e];if(!c){var f=Z[0];f&&(f=f[e])&&(c=Z[e]=nn(f))}if((!c||!c(d,i,e))&&(c=d,e=i,f=c.j,Pt(c),!c.W)){var t=c.g.h;c=c.g.g,c=f===c?he||(he=new Uint8Array(0)):Oe?t.slice(f,c):new Uint8Array(t.subarray(f,c)),(f=e.ba)?f.push(c):e.ba=[c]}}return i}function W(i,d,Z){if(je.length){var e=je.pop();i&&(Ce(e.g,i),e.i=-1,e.h=-1),i=e}else i=new $e(i);try{return V(new d,i,p(Z))}finally{d=i.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,i.i=-1,i.h=-1,100>je.length&&je.push(i)}}function E(i,d,Z){for(var e=Z.length,c=e%2==1,f=c?1:0;f<e;f+=2)(0,Z[f+1])(d,i,Z[f]);fn(i,d,c?Z[0]:void 0)}function O(i,d){var Z=new _e;E(i,Z,cn(d)),Se(Z,Z.g.end()),i=new Uint8Array(Z.h),d=Z.i;for(var e=d.length,c=0,f=0;f<e;f++){var t=d[f];i.set(t,c),c+=t.length}return Z.i=[i],i}function lt(i,d){return{O:i,P:d}}var z=lt(function(i,d,Z){if(i.h!==5)return!1;i=i.g;var e=i.h[i.g],c=i.h[i.g+1],f=i.h[i.g+2],t=i.h[i.g+3];return i.g+=4,Bt(i),c=(e<<0|c<<8|f<<16|t<<24)>>>0,i=2*(c>>31)+1,e=c>>>23&255,c&=8388607,Nt(d,Z,e==255?c?NaN:1/0*i:e==0?i*Math.pow(2,-149)*c:i*Math.pow(2,e-150)*(c+Math.pow(2,23))),!0},function(i,d,Z){if(d=fe(d,Z),d!=null){we(i.g,8*Z+5),i=i.g;var e=d;e=(Z=0>e?1:0)?-e:e,e===0?0<1/e?ne=Ve=0:(Ve=0,ne=2147483648):isNaN(e)?(Ve=0,ne=2147483647):34028234663852886e22<e?(Ve=0,ne=(Z<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,ne=(Z<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,ne=(Z<<31|d+127<<23|e&8388607)>>>0),Z=ne,i.g.push(Z>>>0&255),i.g.push(Z>>>8&255),i.g.push(Z>>>16&255),i.g.push(Z>>>24&255)}}),it=lt(function(i,d,Z){if(i.h!==0)return!1;for(var e=i.g,c=128,f=0,t=i=0;4>t&&128<=c;t++)c=e.h[e.g++],Bt(e),f|=(c&127)<<7*t;if(128<=c&&(c=e.h[e.g++],Bt(e),f|=(c&127)<<28,i|=(c&127)>>4),128<=c)for(t=0;5>t&&128<=c;t++)c=e.h[e.g++],Bt(e),i|=(c&127)<<7*t+3;if(128>c)e=f>>>0,c=i>>>0,(i=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0);else throw Qt();return Nt(d,Z,i?-e:e),!0},function(i,d,Z){if(d=fe(d,Z),d!=null&&d!=null){we(i.g,8*Z),i=i.g;var e=d;for(Z=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,Z&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),ne=d,Ve=e,Z=ne,d=Ve;0<d||127<Z;)i.g.push(Z&127|128),Z=(Z>>>7|d<<25)>>>0,d>>>=7;i.g.push(Z)}}),bt=lt(function(i,d,Z){return i.h!==0?!1:(Nt(d,Z,Ie(i.g)),!0)},function(i,d,Z){if(d=fe(d,Z),d!=null&&d!=null)if(we(i.g,8*Z),i=i.g,Z=d,0<=Z)we(i,Z);else{for(d=0;9>d;d++)i.g.push(Z&127|128),Z>>=7;i.g.push(1)}}),It=lt(function(i,d,Z){if(i.h!==2)return!1;var e=Ie(i.g)>>>0;i=i.g;var c=i.g;i.g+=e,Bt(i),i=i.h;var f;if(Hn)(f=Xn)||(f=Xn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(i.subarray(c,c+e));else{e=c+e;for(var t=[],u=null,a,b,S;c<e;)a=i[c++],128>a?t.push(a):224>a?c>=e?Te():(b=i[c++],194>a||(b&192)!==128?(c--,Te()):t.push((a&31)<<6|b&63)):240>a?c>=e-1?Te():(b=i[c++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((f=i[c++])&192)!==128?(c--,Te()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?c>=e-2?Te():(b=i[c++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=i[c++])&192)!==128||((S=i[c++])&192)!==128?(c--,Te()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(u=on(u,t),t.length=0);f=on(u,t)}return Nt(d,Z,f),!0},function(i,d,Z){if(d=fe(d,Z),d!=null){var e=!1;if(e=e===void 0?!1:e,Nn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(xn||(xn=new TextEncoder)).encode(d)}else{for(var c=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var u=d.charCodeAt(t);if(128>u)f[c++]=u;else{if(2048>u)f[c++]=u>>6|192;else{if(55296<=u&&57343>=u){if(56319>=u&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){u=1024*(u-55296)+a-56320+65536,f[c++]=u>>18|240,f[c++]=u>>12&63|128,f[c++]=u>>6&63|128,f[c++]=u&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");u=65533}f[c++]=u>>12|224,f[c++]=u>>6&63|128}f[c++]=u&63|128}}d=f.subarray(0,c)}we(i.g,8*Z+2),we(i.g,d.length),Se(i,i.g.end()),Se(i,d)}}),Kt=lt(function(i,d,Z,e,c){if(i.h!==2)return!1;d=ee(d,Z,e),Z=i.g.i,e=Ie(i.g)>>>0;var f=i.g.g+e,t=f-Z;if(0>=t&&(i.g.i=f,c(d,i),t=f-i.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return i.g.g=f,i.g.i=Z,!0},function(i,d,Z,e,c){if(d=He(d,e,Z),d!=null)for(e=0;e<d.length;e++){var f=i;we(f.g,8*Z+2);var t=f.g.end();Se(f,t),t.push(f.h),f=t,c(d[e],i),t=i;var u=f.pop();for(u=t.h+t.g.length()-u;127<u;)f.push(u&127|128),u>>>=7,t.h++;f.push(u),t.h++}});function kt(){qe.apply(this,arguments)}if(ht(kt,qe),Ot){var qt={};Object.defineProperties(kt,(qt[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),qt))}function Et(i){kt.call(this,i)}ht(Et,kt);function wt(){return[1,bt,2,z,3,It,4,It]}function Ut(i){kt.call(this,i,-1,ce)}ht(Ut,kt),Ut.prototype.addClassification=function(i,d){return ee(this,1,Et,i,d),this};function Dt(){return[1,Kt,Et,wt]}var ce=[1];function pe(i){kt.call(this,i)}ht(pe,kt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function ke(i){kt.call(this,i,-1,g)}ht(ke,kt);function h(){return[1,Kt,pe,ge]}var g=[1];function G(i){kt.call(this,i)}ht(G,kt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,it]}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(k(M),k(Q),k(B),k(tt),k(ct),k(s));function R(i,d,Z){if(Z=i.createShader(Z===0?i.VERTEX_SHADER:i.FRAGMENT_SHADER),i.shaderSource(Z,d),i.compileShader(Z),!i.getShaderParameter(Z,i.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
54
|
+
`+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),u=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:u},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(u,0)}t=e.j,f.useProgram(e.m),f.canvas.width=c.width,f.canvas.height=c.height,f.viewport(0,0,c.width,c.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(c.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Gt=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 Mt(e,c){return c+e}function St(e,c){window[e]=c}function ft(e){var c=document.createElement("script");return c.setAttribute("src",e),c.setAttribute("crossorigin","anonymous"),new Promise(function(f){c.addEventListener("load",function(){f()},!1),c.addEventListener("error",function(){f()},!1),document.body.appendChild(c)})}function Xt(){return gt(function(e){switch(e.g){case 1:return e.m=2,_(e,WebAssembly.instantiate(Gt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function Yt(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Mt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=c,e.options){c=Y(Object.keys(e.options));for(var f=c.next();!f.done;f=c.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}o=Yt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Ft(e){var c,f,t,u,a,b,S,L,H,K,j;return gt(function(D){switch(D.g){case 1:return e.R?(c=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,_(D,Xt(),2)):D.return();case 2:if(f=D.h,typeof window=="object")return St("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),St("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=c.filter(function($){return $.data!==void 0}),S=c.filter(function($){return $.data===void 0}),L=Promise.all(b.map(function($){var ut=v(e,$.url);if($.path!==void 0){var mt=$.path;ut=ut.then(function(pt){return e.overrideFile(mt,pt),Promise.resolve(pt)})}return ut})),H=Promise.all(S.map(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f?ft(e.locateFile($.url,e.S)):Promise.resolve()})).then(function(){var $,ut,mt;return gt(function(pt){if(pt.g==1)return $=window.createMediapipeSolutionsWasm,ut=window.createMediapipeSolutionsPackedAssets,mt=e,_(pt,$(ut),2);mt.h=pt.h,pt.g=0})}),K=function(){return gt(function($){return e.g.graph&&e.g.graph.url?$=_($,v(e,e.g.graph.url),0):($.g=0,$=void 0),$})}(),_(D,Promise.all([H,L,K]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=c.filter(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f}).map(function($){return e.locateFile($.url,e.S)}),importScripts.apply(null,k(t)),u=e,_(D,createMediapipeSolutionsWasm(Module),6);case 6:u.h=D.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),D.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),D.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,D.g=0}})}function Ct(e){var c,f,t,u,a,b,S,L;return gt(function(H){if(H.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return H.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){H.g=2;return}return e.P=e.g.graph.url,_(H,v(e,e.g.graph.url),3)}for(H.g!=2&&(c=H.h,e.i.loadGraph(c)),f=Y(Object.keys(e.B)),t=f.next();!t.done;t=f.next())u=t.value,e.i.overrideFile(u,e.B[u]);if(e.B={},e.g.listeners)for(a=Y(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,J(e,S);L=e.j,e.j={},e.setOptions(L),H.g=0})}o.reset=function(){var e=this;return gt(function(c){e.i&&(e.i.reset(),e.m={},e.s={}),c.g=0})},o.setOptions=function(e,c){var f=this;if(c=c||this.g.options){for(var t=[],u=[],a={},b=Y(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var L=S.value;L in this.j&&this.j[L]===e[L]||(this.j[L]=e[L],S=c[L],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[L],t.push(function(H){return function(){var K;return gt(function(j){if(j.g==1)return _(j,H.K(H.L),2);K=j.h,K===!0&&(f.o=!0),j.g=0})}}(a))),S.graphOptionXref&&(L={valueNumber:S.type===1?e[L]:0,valueBoolean:S.type===0?e[L]:!1,valueString:S.type===2?e[L]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),L),u.push(S))))}(t.length!==0||u.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(u),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var c,f,t,u,a,b,S;return gt(function(L){switch(L.g){case 1:if(!e.o)return L.return();if(!e.v){L.g=2;break}c=Y(e.v),f=c.next();case 3:if(f.done){L.g=5;break}return t=f.value,_(L,t(),4);case 4:f=c.next(),L.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(u=new e.h.GraphOptionChangeRequestList,a=Y(e.A),b=a.next();!b.done;b=a.next())S=b.value,u.push_back(S);e.i.changeOptions(u),u.delete(),e.A=void 0}e.o=!1,L.g=0}})}o.initialize=function(){var e=this;return gt(function(c){return c.g==1?_(c,Ft(e),2):c.g!=3?_(c,Ct(e),3):_(c,l(e),0)})};function v(e,c){var f,t;return gt(function(u){return c in e.F?u.return(e.F[c]):(f=e.locateFile(c,""),t=fetch(f).then(function(a){return a.arrayBuffer()}),e.F[c]=t,u.return(t))})}o.overrideFile=function(e,c){this.i?this.i.overrideFile(e,c):this.B[e]=c},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(e,c){var f=this,t,u,a,b,S,L,H,K,j;return gt(function(D){switch(D.g){case 1:return f.g.inputs?(t=1e3*(c==null?performance.now():c),_(D,f.C,2)):D.return();case 2:return _(D,f.initialize(),3);case 3:for(u=new f.h.PacketDataList,a=Y(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,L=f.g.inputs[S]){t:{var $=e[S];switch(L.type){case"video":var ut=f.m[L.stream];if(ut||(ut=new U(f.h,f.D),f.m[L.stream]=ut),ut.l===0&&(ut.l=ut.h.createTexture()),typeof HTMLVideoElement<"u"&&$ instanceof HTMLVideoElement)var mt=$.videoWidth,pt=$.videoHeight;else typeof HTMLImageElement<"u"&&$ instanceof HTMLImageElement?(mt=$.naturalWidth,pt=$.naturalHeight):(mt=$.width,pt=$.height);pt={glName:ut.l,width:mt,height:pt},mt=ut.g,mt.canvas.width=pt.width,mt.canvas.height=pt.height,mt.activeTexture(mt.TEXTURE0),ut.h.bindTexture2d(ut.l),mt.texImage2D(mt.TEXTURE_2D,0,mt.RGBA,mt.RGBA,mt.UNSIGNED_BYTE,$),ut.h.bindTexture2d(0),ut=pt;break t;case"detections":for(ut=f.m[L.stream],ut||(ut=new yt(f.h),f.m[L.stream]=ut),ut.data||(ut.data=new ut.g.DetectionListData),ut.data.reset($.length),pt=0;pt<$.length;++pt){mt=$[pt];var vt=ut.data,Zt=vt.setBoundingBox,jt=pt,se=mt.T,le=new wt;if(Tt(le,1,se.X),Tt(le,2,se.Y),Tt(le,3,se.height),Tt(le,4,se.width),Tt(le,5,se.rotation),Tt(le,6,se.W),se=en(le,Dt),Zt.call(vt,jt,se),mt.O)for(vt=0;vt<mt.O.length;++vt){le=mt.O[vt];var Ke=!!le.visibility;Zt=ut.data,jt=Zt.addNormalizedLandmark,se=pt,le=Object.assign(Object.assign({},le),{visibility:Ke?le.visibility:0}),Ke=new z,Tt(Ke,1,le.x),Tt(Ke,2,le.y),Tt(Ke,3,le.z),le.visibility&&Tt(Ke,4,le.visibility),le=en(Ke,bt),jt.call(Zt,se,le)}if(mt.M)for(vt=0;vt<mt.M.length;++vt)Zt=ut.data,jt=Zt.addClassification,se=pt,le=mt.M[vt],Ke=new wn,Tt(Ke,2,le.score),le.index&&Tt(Ke,1,le.index),le.label&&Tt(Ke,3,le.label),le.displayName&&Tt(Ke,4,le.displayName),le=en(Ke,p),jt.call(Zt,se,le)}ut=ut.data;break t;default:ut={}}}switch(H=ut,K=L.stream,L.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},H),{stream:K,timestamp:t}));break;case"detections":j=H,j.stream=K,j.timestamp=t,u.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+L.type+"'")}}return f.i.send(u),_(D,f.C,4);case 4:u.delete(),D.g=0}})};function x(e,c,f){var t,u,a,b,S,L,H,K,j,D,$,ut,mt,pt;return gt(function(vt){switch(vt.g){case 1:if(!f)return vt.return(c);for(t={},u=0,a=Y(Object.keys(f)),b=a.next();!b.done;b=a.next())S=b.value,L=f[S],typeof L!="string"&&L.type==="texture"&&c[L.stream]!==void 0&&++u;1<u&&(e.G=!1),H=Y(Object.keys(f)),b=H.next();case 2:if(b.done){vt.g=4;break}if(K=b.value,j=f[K],typeof j=="string")return mt=t,pt=K,_(vt,T(e,K,c[j]),14);if(D=c[j.stream],j.type==="detection_list"){if(D){for(var Zt=D.getRectList(),jt=D.getLandmarksList(),se=D.getClassificationsList(),le=[],Ke=0;Ke<Zt.size();++Ke){var Rn=zn(Zt.get(Ke),wt,ce);Rn={T:{X:ue(Rn,1),Y:ue(Rn,2),height:ue(Rn,3),width:ue(Rn,4),rotation:ue(Rn,5,0),W:ae(Rn,6,0)},O:A(jt.get(Ke)),M:w(zn(se.get(Ke),W,P))},le.push(Rn)}Zt=le}else Zt=[];t[K]=Zt,vt.g=7;break}if(j.type==="proto_list"){if(D){for(Zt=Array(D.size()),jt=0;jt<D.size();jt++)Zt[jt]=D.get(jt);D.delete()}else Zt=[];t[K]=Zt,vt.g=7;break}if(D===void 0){vt.g=3;break}if(j.type==="float_list"){t[K]=D,vt.g=7;break}if(j.type==="proto"){t[K]=D,vt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return $=e.s[K],$||($=new U(e.h,e.D),e.s[K]=$),_(vt,rt($,D,e.G),13);case 13:ut=vt.h,t[K]=ut;case 7:j.transform&&t[K]&&(t[K]=j.transform(t[K])),vt.g=3;break;case 14:mt[pt]=vt.h;case 3:b=H.next(),vt.g=2;break;case 4:return vt.return(t)}})}function T(e,c,f){var t;return gt(function(u){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?u.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[c],t||(t=new U(e.h,e.D),e.s[c]=t),u.return(rt(t,f,e.G))):u.return(void 0)})}function J(e,c){for(var f=c.name||"$",t=[].concat(k(c.wants)),u=new e.h.StringList,a=Y(c.wants),b=a.next();!b.done;b=a.next())u.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var L={},H=0;H<c.wants.length;++H)L[t[H]]=S.get(H);var K=e.listeners[f];K&&(e.C=x(e,L,c.outs).then(function(j){j=K(j);for(var D=0;D<c.wants.length;++D){var $=L[t[D]];typeof $=="object"&&$.hasOwnProperty&&$.hasOwnProperty("delete")&&$.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(u,a),u.delete()}o.onResults=function(e,c){this.listeners[c||"$"]=e},Jt("Solution",Yt),Jt("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function i(e){return e.map(d)}function d(e){e=zn(e,g,C);var c=e.getMesh();if(!c)return e;var f=new Float32Array(c.getVertexBufferList());c.getVertexBufferList=function(){return f};var t=new Uint32Array(c.getIndexBufferList());return c.getIndexBufferList=function(){return t},e}function Z(e){var c=this;e=e||{},this.g=new Yt({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:i}}}],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(f){var t,u,a,b;return gt(function(S){if(S.g==1){switch(t="",f){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return u="third_party/mediapipe/modules/pose_landmark/"+t,a=c.g.locateFile(t,""),_(S,fetch(a),3)}return S.g!=2?_(S,S.h.arrayBuffer(),2):(b=S.h,c.g.overrideFile(u,b),_(S,c.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"}}}})}o=Z.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(e){this.g.onResults(e)},o.initialize=function(){var e=this;return gt(function(c){return _(c,e.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(e){var c=this;return gt(function(f){return _(f,c.g.send(e),0)})},o.setOptions=function(e){this.g.setOptions(e)},Jt("Holistic",Z),Jt("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}}),Jt("FACEMESH_LIPS",M),Jt("FACEMESH_LEFT_EYE",Q),Jt("FACEMESH_LEFT_EYEBROW",B),Jt("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Jt("FACEMESH_RIGHT_EYE",tt),Jt("FACEMESH_RIGHT_EYEBROW",ct),Jt("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Jt("FACEMESH_FACE_OVAL",s),Jt("FACEMESH_CONTOURS",X),Jt("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]]),Jt("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]]),Jt("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]]),Jt("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}),Jt("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}),Jt("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}),Jt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Jt("matrixDataToMatrix",function(e){for(var c=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),u=[],a=0;a<f;a++)u.push(Array(c));for(a=0;a<f;a++)for(var b=0;b<c;b++){var S=e.getLayout()===1?a*c+b:b*f+a;u[a][b]=t[S]}return u}),Jt("VERSION","0.5.1635989137")}).call(bi);const yi={};(function(){var o;function n(i){var d=0;return function(){return d<i.length?{done:!1,value:i[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(i,d,Z){return i==Array.prototype||i==Object.prototype||(i[d]=Z.value),i};function m(i){i=[typeof globalThis=="object"&&globalThis,i,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<i.length;++d){var Z=i[d];if(Z&&Z.Math==Math)return Z}throw Error("Cannot find global object")}var y=m(this);function I(i,d){if(d)t:{var Z=y;i=i.split(".");for(var e=0;e<i.length-1;e++){var c=i[e];if(!(c in Z))break t;Z=Z[c]}i=i[i.length-1],e=Z[i],d=d(e),d!=e&&d!=null&&r(Z,i,{configurable:!0,writable:!0,value:d})}}I("Symbol",function(i){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new Z(e+(f||"")+"_"+c++,f)}function Z(f,t){this.g=f,r(this,"description",{configurable:!0,writable:!0,value:t})}if(i)return i;Z.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return d}),I("Symbol.iterator",function(i){if(i)return i;i=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),Z=0;Z<d.length;Z++){var e=y[d[Z]];typeof e=="function"&&typeof e.prototype[i]!="function"&&r(e.prototype,i,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return i});function F(i){return i={next:i},i[Symbol.iterator]=function(){return this},i}function Y(i){var d=typeof Symbol<"u"&&Symbol.iterator&&i[Symbol.iterator];return d?d.call(i):{next:n(i)}}function k(i){if(!(i instanceof Array)){i=Y(i);for(var d,Z=[];!(d=i.next()).done;)Z.push(d.value);i=Z}return i}var et=typeof Object.create=="function"?Object.create:function(i){function d(){}return d.prototype=i,new d},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(i,d){if(i.__proto__=d,i.__proto__!==d)throw new TypeError(i+" is not extensible");return i}:null}var dt=O;function ht(i,d){if(i.prototype=et(d.prototype),i.prototype.constructor=i,dt)dt(i,d);else for(var Z in d)if(Z!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,Z);e&&Object.defineProperty(i,Z,e)}else i[Z]=d[Z];i.na=d.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Lt(i){if(i.l)throw new TypeError("Generator is already running");i.l=!0}Ht.prototype.s=function(i){this.h=i};function At(i,d){i.j={da:d,ea:!0},i.g=i.o||i.u}Ht.prototype.return=function(i){this.j={return:i},this.g=this.u};function _(i,d,Z){return i.g=Z,{value:d}}function Ee(i){this.g=new Ht,this.h=i}function an(i,d){Lt(i.g);var Z=i.g.i;return Z?We(i,"return"in Z?Z.return:function(e){return{value:e,done:!0}},d,i.g.return):(i.g.return(d),$t(i))}function We(i,d,Z,e){try{var c=d.call(i.g.i,Z);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return i.g.l=!1,c;var f=c.value}catch(t){return i.g.i=null,At(i.g,t),$t(i)}return i.g.i=null,e.call(i.g,f),$t(i)}function $t(i){for(;i.g.g;)try{var d=i.h(i.g);if(d)return i.g.l=!1,{value:d.value,done:!1}}catch(Z){i.g.h=void 0,At(i.g,Z)}if(i.g.l=!1,i.g.j){if(d=i.g.j,i.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function An(i){this.next=function(d){return Lt(i.g),i.g.i?d=We(i,i.g.i.next,d,i.g.s):(i.g.s(d),d=$t(i)),d},this.throw=function(d){return Lt(i.g),i.g.i?d=We(i,i.g.i.throw,d,i.g.s):(At(i.g,d),d=$t(i)),d},this.return=function(d){return an(i,d)},this[Symbol.iterator]=function(){return this}}function de(i){function d(e){return i.next(e)}function Z(e){return i.throw(e)}return new Promise(function(e,c){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,Z).then(f,c)}f(i.next())})}function gt(i){return de(new An(new Ee(i)))}I("Promise",function(i){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var u=this.j();try{t(u.resolve,u.reject)}catch(a){u.reject(a)}}function Z(){this.g=null}function e(t){return t instanceof d?t:new d(function(u){u(t)})}if(i)return i;Z.prototype.h=function(t){if(this.g==null){this.g=[];var u=this;this.i(function(){u.l()})}this.g.push(t)};var c=y.setTimeout;Z.prototype.i=function(t){c(t,0)},Z.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var u=0;u<t.length;++u){var a=t[u];t[u]=null;try{a()}catch(b){this.j(b)}}}this.g=null},Z.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(u,S))}}var u=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var u=t!=null;break t;case"function":u=!0;break t;default:u=!1}u?this.A(t):this.o(t)}},d.prototype.A=function(t){var u=void 0;try{u=t.then}catch(a){this.l(a);return}typeof u=="function"?this.I(u,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,u){if(this.h!=0)throw Error("Cannot settle("+t+", "+u+"): Promise already settled in state"+this.h);this.h=t,this.i=u,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;c(function(){if(t.C()){var u=y.console;typeof u<"u"&&u.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=y.CustomEvent,u=y.Event,a=y.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof u=="function"?t=new u("unhandledrejection",{cancelable:!0}):(t=y.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)f.h(this.g[t]);this.g=null}};var f=new Z;return d.prototype.H=function(t){var u=this.j();t.M(u.resolve,u.reject)},d.prototype.I=function(t,u){var a=this.j();try{t.call(u,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,u){function a(H,K){return typeof H=="function"?function(j){try{b(H(j))}catch(D){S(D)}}:K}var b,S,L=new d(function(H,K){b=H,S=K});return this.M(a(t,b),a(u,S)),L},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,u){function a(){switch(b.h){case 1:t(b.i);break;case 2:u(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?f.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(u,a){a(t)})},d.race=function(t){return new d(function(u,a){for(var b=Y(t),S=b.next();!S.done;S=b.next())e(S.value).M(u,a)})},d.all=function(t){var u=Y(t),a=u.next();return a.done?e([]):new d(function(b,S){function L(j){return function(D){H[j]=D,K--,K==0&&b(H)}}var H=[],K=0;do H.push(void 0),K++,e(a.value).M(L(H.length-1),S),a=u.next();while(!a.done)})},d});function pn(i,d){i instanceof String&&(i+="");var Z=0,e=!1,c={next:function(){if(!e&&Z<i.length){var f=Z++;return{value:d(f,i[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var jn=typeof Object.assign=="function"?Object.assign:function(i,d){for(var Z=1;Z<arguments.length;Z++){var e=arguments[Z];if(e)for(var c in e)Object.prototype.hasOwnProperty.call(e,c)&&(i[c]=e[c])}return i};I("Object.assign",function(i){return i||jn}),I("Object.is",function(i){return i||function(d,Z){return d===Z?d!==0||1/d===1/Z:d!==d&&Z!==Z}}),I("Array.prototype.includes",function(i){return i||function(d,Z){var e=this;e instanceof String&&(e=String(e));var c=e.length;for(Z=Z||0,0>Z&&(Z=Math.max(Z+c,0));Z<c;Z++){var f=e[Z];if(f===d||Object.is(f,d))return!0}return!1}}),I("String.prototype.includes",function(i){return i||function(d,Z){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,Z||0)!==-1}}),I("Array.prototype.keys",function(i){return i||function(){return pn(this,function(d){return d})}});var Re=this||self;function Jt(i,d){i=i.split(".");var Z=Re;i[0]in Z||typeof Z.execScript>"u"||Z.execScript("var "+i[0]);for(var e;i.length&&(e=i.shift());)i.length||d===void 0?Z[e]&&Z[e]!==Object.prototype[e]?Z=Z[e]:Z=Z[e]={}:Z[e]=d}function Te(){throw Error("Invalid UTF8")}function on(i,d){return d=String.fromCharCode.apply(null,d),i==null?d:i+d}var Xn,Fn=typeof TextDecoder<"u",xn,Nn=typeof TextEncoder<"u",dn={},bn=null;function kn(i){var d;d===void 0&&(d=0),Ae(),d=dn[d];for(var Z=Array(Math.floor(i.length/3)),e=d[64]||"",c=0,f=0;c<i.length-2;c+=3){var t=i[c],u=i[c+1],a=i[c+2],b=d[t>>2];t=d[(t&3)<<4|u>>4],u=d[(u&15)<<2|a>>6],a=d[a&63],Z[f++]=b+t+u+a}switch(b=0,a=e,i.length-c){case 2:b=i[c+1],a=d[(b&15)<<2]||e;case 1:i=i[c],Z[f]=d[i>>2]+d[(i&3)<<4|b>>4]+a+e}return Z.join("")}function Hn(i){var d=i.length,Z=3*d/4;Z%3?Z=Math.floor(Z):"=.".indexOf(i[d-1])!=-1&&(Z="=.".indexOf(i[d-2])!=-1?Z-2:Z-1);var e=new Uint8Array(Z),c=0;return Oe(i,function(f){e[c++]=f}),c!==Z?e.subarray(0,c):e}function Oe(i,d){function Z(a){for(;e<i.length;){var b=i.charAt(e++),S=bn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ae();for(var e=0;;){var c=Z(-1),f=Z(0),t=Z(64),u=Z(64);if(u===64&&c===-1)break;d(c<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),u!=64&&d(t<<6&192|u))}}function Ae(){if(!bn){bn={};for(var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],Z=0;5>Z;Z++){var e=i.concat(d[Z].split(""));dn[Z]=e;for(var c=0;c<e.length;c++){var f=e[c];bn[f]===void 0&&(bn[f]=c)}}}}var In=typeof Uint8Array=="function";function Vn(i){return In&&i!=null&&i instanceof Uint8Array}var he;function Ye(i){if(this.L=i,i!==null&&i.length===0)throw Error("ByteString should be constructed with non-empty values")}var Pe=typeof Uint8Array.prototype.slice=="function",ne=0,Ve=0;function sn(i,d){if(i.constructor===Uint8Array)return i;if(i.constructor===ArrayBuffer)return new Uint8Array(i);if(i.constructor===Array)return new Uint8Array(i);if(i.constructor===String)return Hn(i);if(i.constructor===Ye)return!d&&(d=i.L)&&d.constructor===Uint8Array?d:(d=i.L,d=d==null||Vn(d)?d:typeof d=="string"?Hn(d):null,(i=i.L=d)?new Uint8Array(i):he||(he=new Uint8Array(0)));if(i instanceof Uint8Array)return new Uint8Array(i.buffer,i.byteOffset,i.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Me(i,d){return Error("Invalid wire type: "+i+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(i,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,i&&Ce(this,i)}function Ce(i,d){i.h=sn(d,i.v),i.j=0,i.i=i.h.length,i.g=i.j}Ze.prototype.reset=function(){this.g=this.j};function Bt(i){if(i.g>i.i)throw Error("Tried to read past the end of the data "+i.g+" > "+i.i)}function Ie(i){var d=i.h,Z=d[i.g],e=Z&127;if(128>Z)return i.g+=1,Bt(i),e;if(Z=d[i.g+1],e|=(Z&127)<<7,128>Z)return i.g+=2,Bt(i),e;if(Z=d[i.g+2],e|=(Z&127)<<14,128>Z)return i.g+=3,Bt(i),e;if(Z=d[i.g+3],e|=(Z&127)<<21,128>Z)return i.g+=4,Bt(i),e;if(Z=d[i.g+4],i.g+=5,e|=(Z&15)<<28,128>Z)return Bt(i),e;if(128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++]&&128<=d[i.g++])throw Qt();return Bt(i),e}var zt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var i=this.g;return this.g=[],i};function we(i,d){for(;127<d;)i.g.push(d&127|128),d>>>=7;i.g.push(d)}function $e(i){var d={},Z=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=Z,d=this.l,zt.length?(Z=zt.pop(),d&&(Z.v=d.v),i&&Ce(Z,i),i=Z):i=new Ze(i,d),this.g=i,this.j=this.g.g,this.h=this.i=-1}$e.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(i){var d=i.g;if(d.g==d.i)return!1;i.j=i.g.g;var Z=Ie(i.g)>>>0;if(d=Z>>>3,Z&=7,!(0<=Z&&5>=Z))throw Me(Z,i.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+i.j+")");return i.i=d,i.h=Z,!0}function Ot(i){switch(i.h){case 0:if(i.h!=0)Ot(i);else t:{i=i.g;for(var d=i.g,Z=d+10;d<Z;)if((i.h[d++]&128)===0){i.g=d,Bt(i);break t}throw Qt()}break;case 1:i=i.g,i.g+=8,Bt(i);break;case 2:i.h!=2?Ot(i):(d=Ie(i.g)>>>0,i=i.g,i.g+=d,Bt(i));break;case 5:i=i.g,i.g+=4,Bt(i);break;case 3:d=i.i;do{if(!Xe(i))throw Error("Unmatched start-group tag: stream EOF");if(i.h==4){if(i.i!=d)throw Error("Unmatched end-group tag");break}Ot(i)}while(1);break;default:throw Me(i.h,i.j)}}var je=[];function _e(){this.i=[],this.h=0,this.g=new ye}function Se(i,d){d.length!==0&&(i.i.push(d),i.h+=d.length)}function Wn(i,d){if(d=d.ba){Se(i,i.g.end());for(var Z=0;Z<d.length;Z++)Se(i,d[Z])}}var ln=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(i,d){Object.isFrozen(i)||(ln?i[ln]|=d:i.N!==void 0?i.N|=d:Object.defineProperties(i,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function un(i){var d;return ln?d=i[ln]:d=i.N,d==null?0:d}function ve(i){return Qe(i,1),i}function Le(i){return Array.isArray(i)?!!(un(i)&2):!1}function Ge(i){if(!Array.isArray(i))throw Error("cannot mark non-array as immutable");Qe(i,2)}function re(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)&&i.constructor===Object}var De=Object.freeze(ve([]));function te(i){if(Le(i.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(i){return{value:i,configurable:!1,writable:!1,enumerable:!1}}function fe(i,d,Z){return d===-1?null:d>=i.i?i.g?i.g[d]:void 0:(Z===void 0?0:Z)&&i.g&&(Z=i.g[d],Z!=null)?Z:i.m[d+i.h]}function Nt(i,d,Z,e){e=e===void 0?!1:e,te(i),d<i.i&&!e?i.m[d+i.h]=Z:(i.g||(i.g=i.m[i.i+i.h]={}))[d]=Z}function Wt(i,d,Z,e){Z=Z===void 0?!0:Z,e=e===void 0?!1:e;var c=fe(i,d,e);return c==null&&(c=De),Le(i.m)?Z&&(Ge(c),Object.freeze(c)):(c===De||Le(c))&&(c=ve(c.slice()),Nt(i,d,c,e)),c}function ie(i,d,Z){return i=fe(i,d),i=i==null?i:+i,i==null?Z===void 0?0:Z:i}function Fe(i,d,Z,e){i.j||(i.j={});var c=Le(i.m),f=i.j[Z];if(!f){e=Wt(i,Z,!0,e===void 0?!1:e),f=[],c=c||Le(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),c&&Ge(f[t].m);c&&(Ge(f),Object.freeze(f)),i.j[Z]=f}return f}function ee(i,d,Z,e,c){var f=f===void 0?!1:f;return te(i),f=Fe(i,Z,d,f),Z=e||new Z,i=Wt(i,d),c!=null?(f.splice(c,0,Z),i.splice(c,0,Z.m)):(f.push(Z),i.push(Z.m)),Z}function oe(i,d){return i=fe(i,d),i==null?0:i}function nt(i,d){return i=fe(i,d),i==null?"":i}function ot(i){switch(typeof i){case"number":return isFinite(i)?i:String(i);case"object":if(i&&!Array.isArray(i)){if(Vn(i))return kn(i);if(i instanceof Ye){var d=i.L;return d=d==null||typeof d=="string"?d:In&&d instanceof Uint8Array?kn(d):null,(i.L=d)||""}}}return i}function at(i){var d=ue;return d=d===void 0?Tt:d,ae(i,d)}function _t(i,d){if(i!=null){if(Array.isArray(i))i=ae(i,d);else if(re(i)){var Z={},e;for(e in i)Z[e]=_t(i[e],d);i=Z}else i=d(i);return i}}function ae(i,d){for(var Z=i.slice(),e=0;e<Z.length;e++)Z[e]=_t(Z[e],d);return Array.isArray(i)&&un(i)&1&&ve(Z),Z}function ue(i){return i&&typeof i=="object"&&i.toJSON?i.toJSON():(i=ot(i),Array.isArray(i)?at(i):i)}function Tt(i){return Vn(i)?new Uint8Array(i):i}function me(i,d,Z){i||(i=Ne),Ne=null;var e=this.constructor.h;i||(i=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=i;t:{if(e=this.m.length,i=e-1,e&&(e=this.m[i],re(e))){this.i=i-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,i+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(Z)for(d=0;d<Z.length;d++)if(i=Z[d],i<this.i)i+=this.h,(e=this.m[i])?Array.isArray(e)&&ve(e):this.m[i]=De;else{e=this.g||(this.g=this.m[this.i+this.h]={});var c=e[i];c?Array.isArray(c)&&ve(c):e[i]=De}}me.prototype.toJSON=function(){return at(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ne;function qe(){me.apply(this,arguments)}if(ht(qe,me),Pt){var tn={};Object.defineProperties(qe,(tn[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),tn))}function fn(i,d,Z){if(Z){var e={},c;for(c in Z){var f=Z[c],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=Sn(f.aa),t=function(u){return function(a,b,S){return u.F(a,b,S,u.U)}}(e)):f.ca?(e.T=Be(f.X.g,f.ca),t=function(u){return function(a,b,S){return u.F(a,b,S,u.T)}}(e)):t=e.F,f.ha=t),t(d,i,f.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,i)}var yn=Symbol();function He(i,d,Z){return i[yn]||(i[yn]=function(e,c){return d(e,c,Z)})}function en(i){var d=i[yn];if(!d){var Z=p(i);d=function(e,c){return V(e,c,Z)},i[yn]=d}return d}function zn(i){var d=i.aa;if(d)return en(d);if(d=i.ka)return He(i.X.g,d,i.ca)}function nn(i){var d=zn(i),Z=i.X,e=i.fa.O;return d?function(c,f){return e(c,f,Z,d)}:function(c,f){return e(c,f,Z)}}function Je(i,d,Z,e,c,f){i=i();var t=0;for(i.length&&typeof i[0]!="number"&&(Z(d,i[0]),t++);t<i.length;){Z=i[t++];for(var u=t+1;u<i.length&&typeof i[u]!="number";)u++;var a=i[t++];switch(u-=t,u){case 0:e(d,Z,a);break;case 1:e(d,Z,a,i[t++]);break;case 2:c(d,Z,a,i[t++],i[t++]);break;case 3:u=i[t++];var b=i[t++],S=i[t++];Array.isArray(S)?c(d,Z,a,u,b,S):f(d,Z,a,u,b,S);break;case 4:f(d,Z,a,i[t++],i[t++],i[t++],i[t++]);break;default:throw Error("unexpected number of binary field arguments: "+u)}}return d}var Zn=Symbol();function Sn(i){var d=i[Zn];if(!d){var Z=cn(i);d=function(e,c){return E(e,c,Z)},i[Zn]=d}return d}function Be(i,d){var Z=i[Zn];return Z||(Z=function(e,c){return fn(e,c,d)},i[Zn]=Z),Z}var En=Symbol();function rn(i,d){i.push(d)}function vn(i,d,Z){i.push(d,Z.P)}function Yn(i,d,Z,e,c){var f=Sn(c),t=Z.P;i.push(d,function(u,a,b){return t(u,a,b,e,f)})}function Mn(i,d,Z,e,c,f){var t=Be(e,f),u=Z.P;i.push(d,function(a,b,S){return u(a,b,S,e,t)})}function cn(i){var d=i[En];return d||Je(i,i[En]=[],rn,vn,Yn,Mn)}var Tn=Symbol();function Dn(i,d){i[0]=d}function $n(i,d,Z,e){var c=Z.O;i[d]=e?function(f,t,u){return c(f,t,u,e)}:c}function wn(i,d,Z,e,c,f){var t=Z.O,u=en(c);i[d]=function(a,b,S){return t(a,b,S,e,u,f)}}function Cn(i,d,Z,e,c,f,t){var u=Z.O,a=He(e,c,f);i[d]=function(b,S,L){return u(b,S,L,e,a,t)}}function p(i){var d=i[Tn];return d||Je(i,i[Tn]={},Dn,$n,wn,Cn)}function V(i,d,Z){for(;Xe(d)&&d.h!=4;){var e=d.i,c=Z[e];if(!c){var f=Z[0];f&&(f=f[e])&&(c=Z[e]=nn(f))}if((!c||!c(d,i,e))&&(c=d,e=i,f=c.j,Ot(c),!c.W)){var t=c.g.h;c=c.g.g,c=f===c?he||(he=new Uint8Array(0)):Pe?t.slice(f,c):new Uint8Array(t.subarray(f,c)),(f=e.ba)?f.push(c):e.ba=[c]}}return i}function W(i,d,Z){if(je.length){var e=je.pop();i&&(Ce(e.g,i),e.i=-1,e.h=-1),i=e}else i=new $e(i);try{return V(new d,i,p(Z))}finally{d=i.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,i.i=-1,i.h=-1,100>je.length&&je.push(i)}}function E(i,d,Z){for(var e=Z.length,c=e%2==1,f=c?1:0;f<e;f+=2)(0,Z[f+1])(d,i,Z[f]);fn(i,d,c?Z[0]:void 0)}function P(i,d){var Z=new _e;E(i,Z,cn(d)),Se(Z,Z.g.end()),i=new Uint8Array(Z.h),d=Z.i;for(var e=d.length,c=0,f=0;f<e;f++){var t=d[f];i.set(t,c),c+=t.length}return Z.i=[i],i}function lt(i,d){return{O:i,P:d}}var z=lt(function(i,d,Z){if(i.h!==5)return!1;i=i.g;var e=i.h[i.g],c=i.h[i.g+1],f=i.h[i.g+2],t=i.h[i.g+3];return i.g+=4,Bt(i),c=(e<<0|c<<8|f<<16|t<<24)>>>0,i=2*(c>>31)+1,e=c>>>23&255,c&=8388607,Nt(d,Z,e==255?c?NaN:1/0*i:e==0?i*Math.pow(2,-149)*c:i*Math.pow(2,e-150)*(c+Math.pow(2,23))),!0},function(i,d,Z){if(d=fe(d,Z),d!=null){we(i.g,8*Z+5),i=i.g;var e=d;e=(Z=0>e?1:0)?-e:e,e===0?0<1/e?ne=Ve=0:(Ve=0,ne=2147483648):isNaN(e)?(Ve=0,ne=2147483647):34028234663852886e22<e?(Ve=0,ne=(Z<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,ne=(Z<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,ne=(Z<<31|d+127<<23|e&8388607)>>>0),Z=ne,i.g.push(Z>>>0&255),i.g.push(Z>>>8&255),i.g.push(Z>>>16&255),i.g.push(Z>>>24&255)}}),it=lt(function(i,d,Z){if(i.h!==0)return!1;for(var e=i.g,c=128,f=0,t=i=0;4>t&&128<=c;t++)c=e.h[e.g++],Bt(e),f|=(c&127)<<7*t;if(128<=c&&(c=e.h[e.g++],Bt(e),f|=(c&127)<<28,i|=(c&127)>>4),128<=c)for(t=0;5>t&&128<=c;t++)c=e.h[e.g++],Bt(e),i|=(c&127)<<7*t+3;if(128>c)e=f>>>0,c=i>>>0,(i=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0);else throw Qt();return Nt(d,Z,i?-e:e),!0},function(i,d,Z){if(d=fe(d,Z),d!=null&&d!=null){we(i.g,8*Z),i=i.g;var e=d;for(Z=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,Z&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),ne=d,Ve=e,Z=ne,d=Ve;0<d||127<Z;)i.g.push(Z&127|128),Z=(Z>>>7|d<<25)>>>0,d>>>=7;i.g.push(Z)}}),bt=lt(function(i,d,Z){return i.h!==0?!1:(Nt(d,Z,Ie(i.g)),!0)},function(i,d,Z){if(d=fe(d,Z),d!=null&&d!=null)if(we(i.g,8*Z),i=i.g,Z=d,0<=Z)we(i,Z);else{for(d=0;9>d;d++)i.g.push(Z&127|128),Z>>=7;i.g.push(1)}}),It=lt(function(i,d,Z){if(i.h!==2)return!1;var e=Ie(i.g)>>>0;i=i.g;var c=i.g;i.g+=e,Bt(i),i=i.h;var f;if(Fn)(f=Xn)||(f=Xn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(i.subarray(c,c+e));else{e=c+e;for(var t=[],u=null,a,b,S;c<e;)a=i[c++],128>a?t.push(a):224>a?c>=e?Te():(b=i[c++],194>a||(b&192)!==128?(c--,Te()):t.push((a&31)<<6|b&63)):240>a?c>=e-1?Te():(b=i[c++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((f=i[c++])&192)!==128?(c--,Te()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?c>=e-2?Te():(b=i[c++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=i[c++])&192)!==128||((S=i[c++])&192)!==128?(c--,Te()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(u=on(u,t),t.length=0);f=on(u,t)}return Nt(d,Z,f),!0},function(i,d,Z){if(d=fe(d,Z),d!=null){var e=!1;if(e=e===void 0?!1:e,Nn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(xn||(xn=new TextEncoder)).encode(d)}else{for(var c=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var u=d.charCodeAt(t);if(128>u)f[c++]=u;else{if(2048>u)f[c++]=u>>6|192;else{if(55296<=u&&57343>=u){if(56319>=u&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){u=1024*(u-55296)+a-56320+65536,f[c++]=u>>18|240,f[c++]=u>>12&63|128,f[c++]=u>>6&63|128,f[c++]=u&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");u=65533}f[c++]=u>>12|224,f[c++]=u>>6&63|128}f[c++]=u&63|128}}d=f.subarray(0,c)}we(i.g,8*Z+2),we(i.g,d.length),Se(i,i.g.end()),Se(i,d)}}),Ut=lt(function(i,d,Z,e,c){if(i.h!==2)return!1;d=ee(d,Z,e),Z=i.g.i,e=Ie(i.g)>>>0;var f=i.g.g+e,t=f-Z;if(0>=t&&(i.g.i=f,c(d,i),t=f-i.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return i.g.g=f,i.g.i=Z,!0},function(i,d,Z,e,c){if(d=Fe(d,e,Z),d!=null)for(e=0;e<d.length;e++){var f=i;we(f.g,8*Z+2);var t=f.g.end();Se(f,t),t.push(f.h),f=t,c(d[e],i),t=i;var u=f.pop();for(u=t.h+t.g.length()-u;127<u;)f.push(u&127|128),u>>>=7,t.h++;f.push(u),t.h++}});function kt(){qe.apply(this,arguments)}if(ht(kt,qe),Pt){var qt={};Object.defineProperties(kt,(qt[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),qt))}function Et(i){kt.call(this,i)}ht(Et,kt);function wt(){return[1,bt,2,z,3,It,4,It]}function Kt(i){kt.call(this,i,-1,ce)}ht(Kt,kt),Kt.prototype.addClassification=function(i,d){return ee(this,1,Et,i,d),this};function Dt(){return[1,Ut,Et,wt]}var ce=[1];function pe(i){kt.call(this,i)}ht(pe,kt);function ge(){return[1,z,2,z,3,z,4,z,5,z]}function ke(i){kt.call(this,i,-1,g)}ht(ke,kt);function h(){return[1,Ut,pe,ge]}var g=[1];function G(i){kt.call(this,i)}ht(G,kt);function C(){return[1,z,2,z,3,z,4,z,5,z,6,it]}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(k(M),k(Q),k(B),k(tt),k(ct),k(s));function R(i,d,Z){if(Z=i.createShader(Z===0?i.VERTEX_SHADER:i.FRAGMENT_SHADER),i.shaderSource(Z,d),i.compileShader(Z),!i.getShaderParameter(Z,i.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
55
55
|
|
|
56
|
-
`+i.getShaderInfoLog(Z));return Z}function w(i){return
|
|
56
|
+
`+i.getShaderInfoLog(Z));return Z}function w(i){return Fe(i,Et,1).map(function(d){return{index:oe(d,1),ga:ie(d,2),label:fe(d,3)!=null?nt(d,3):void 0,displayName:fe(d,4)!=null?nt(d,4):void 0}})}function N(i){return{x:ie(i,1),y:ie(i,2),z:ie(i,3),visibility:fe(i,4)!=null?ie(i,4):void 0}}function A(i,d){this.h=i,this.g=d,this.l=0}function U(i,d,Z){return rt(i,d),typeof i.g.canvas.transferToImageBitmap=="function"?Promise.resolve(i.g.canvas.transferToImageBitmap()):Z?Promise.resolve(i.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(i.g.canvas):(i.i===void 0&&(i.i=document.createElement("canvas")),new Promise(function(e){i.i.height=i.g.canvas.height,i.i.width=i.g.canvas.width,i.i.getContext("2d",{}).drawImage(i.g.canvas,0,0,i.g.canvas.width,i.g.canvas.height),e(i.i)}))}function rt(i,d){var Z=i.g;if(i.o===void 0){var e=R(Z,`
|
|
57
57
|
attribute vec2 aVertex;
|
|
58
58
|
attribute vec2 aTex;
|
|
59
59
|
varying vec2 vTex;
|
|
@@ -68,9 +68,9 @@
|
|
|
68
68
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
69
69
|
}`,1),f=Z.createProgram();if(Z.attachShader(f,e),Z.attachShader(f,c),Z.linkProgram(f),!Z.getProgramParameter(f,Z.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
70
70
|
|
|
71
|
-
`+Z.getProgramInfoLog(f));e=i.o=f,Z.useProgram(e),c=Z.getUniformLocation(e,"sampler0"),i.j={K:Z.getAttribLocation(e,"aVertex"),J:Z.getAttribLocation(e,"aTex"),ma:c},i.u=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,i.u),Z.enableVertexAttribArray(i.j.K),Z.vertexAttribPointer(i.j.K,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),i.s=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,i.s),Z.enableVertexAttribArray(i.j.J),Z.vertexAttribPointer(i.j.J,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),Z.uniform1i(c,0)}e=i.j,Z.useProgram(i.o),Z.canvas.width=d.width,Z.canvas.height=d.height,Z.viewport(0,0,d.width,d.height),Z.activeTexture(Z.TEXTURE0),i.h.bindTexture2d(d.glName),Z.enableVertexAttribArray(e.K),Z.bindBuffer(Z.ARRAY_BUFFER,i.u),Z.vertexAttribPointer(e.K,2,Z.FLOAT,!1,0,0),Z.enableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,i.s),Z.vertexAttribPointer(e.J,2,Z.FLOAT,!1,0,0),Z.bindFramebuffer(Z.DRAW_FRAMEBUFFER?Z.DRAW_FRAMEBUFFER:Z.FRAMEBUFFER,null),Z.clearColor(0,0,0,0),Z.clear(Z.COLOR_BUFFER_BIT),Z.colorMask(!0,!0,!0,!0),Z.drawArrays(Z.TRIANGLE_FAN,0,4),Z.disableVertexAttribArray(e.K),Z.disableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,null),i.h.bindTexture2d(0)}function q(i){this.g=i}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Gt(i,d){return d+i}function Mt(i,d){window[i]=d}function St(i){var d=document.createElement("script");return d.setAttribute("src",i),d.setAttribute("crossorigin","anonymous"),new Promise(function(Z){d.addEventListener("load",function(){Z()},!1),d.addEventListener("error",function(){Z()},!1),document.body.appendChild(d)})}function ft(){return gt(function(i){switch(i.g){case 1:return i.o=2,_(i,WebAssembly.instantiate(yt),4);case 4:i.g=3,i.o=0;break;case 2:return i.o=0,i.j=null,i.return(!1);case 3:return i.return(!0)}})}function Xt(i){if(this.g=i,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=i&&i.locateFile||Gt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,i.options){d=Y(Object.keys(i.options));for(var Z=d.next();!Z.done;Z=d.next()){Z=Z.value;var e=i.options[Z].default;e!==void 0&&(this.j[Z]=typeof e=="function"?e():e)}}}o=Xt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Yt(i){var d,Z,e,c,f,t,u,a,b,S,L;return gt(function(F){switch(F.g){case 1:return i.Z?(d=i.g.files===void 0?[]:typeof i.g.files=="function"?i.g.files(i.j):i.g.files,_(F,ft(),2)):F.return();case 2:if(Z=F.h,typeof window=="object")return Mt("createMediapipeSolutionsWasm",{locateFile:i.locateFile}),Mt("createMediapipeSolutionsPackedAssets",{locateFile:i.locateFile}),t=d.filter(function(U){return U.data!==void 0}),u=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var j=l(i,U.url);if(U.path!==void 0){var D=U.path;j=j.then(function($){return i.overrideFile(D,$),Promise.resolve($)})}return j})),b=Promise.all(u.map(function(U){return U.simd===void 0||U.simd&&Z||!U.simd&&!Z?St(i.locateFile(U.url,i.$)):Promise.resolve()})).then(function(){var U,j,D;return gt(function($){if($.g==1)return U=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,D=i,_($,U(j),2);D.h=$.h,$.g=0})}),S=function(){return gt(function(U){return i.g.graph&&i.g.graph.url?U=_(U,l(i,i.g.graph.url),0):(U.g=0,U=void 0),U})}(),_(F,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&Z||!U.simd&&!Z}).map(function(U){return i.locateFile(U.url,i.$)}),importScripts.apply(null,k(e)),c=i,_(F,createMediapipeSolutionsWasm(Module),6);case 6:c.h=F.h,i.l=new OffscreenCanvas(1,1),i.h.canvas=i.l,f=i.h.GL.createContext(i.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),i.h.GL.makeContextCurrent(f),F.g=4;break;case 7:if(i.l=document.createElement("canvas"),L=i.l.getContext("webgl2",{}),!L&&(L=i.l.getContext("webgl",{}),!L))return alert("Failed to create WebGL canvas context when passing video frame."),F.return();i.G=L,i.h.canvas=i.l,i.h.createContext(i.l,!0,!0,{});case 4:i.i=new i.h.SolutionWasm,i.Z=!1,F.g=0}})}function Ht(i){var d,Z,e,c,f,t,u,a;return gt(function(b){if(b.g==1){if(i.g.graph&&i.g.graph.url&&i.Y===i.g.graph.url)return b.return();if(i.s=!0,!i.g.graph||!i.g.graph.url){b.g=2;return}return i.Y=i.g.graph.url,_(b,l(i,i.g.graph.url),3)}for(b.g!=2&&(d=b.h,i.i.loadGraph(d)),Z=Y(Object.keys(i.C)),e=Z.next();!e.done;e=Z.next())c=e.value,i.i.overrideFile(c,i.C[c]);if(i.C={},i.g.listeners)for(f=Y(i.g.listeners),t=f.next();!t.done;t=f.next())u=t.value,T(i,u);a=i.j,i.j={},i.setOptions(a),b.g=0})}o.reset=function(){var i=this;return gt(function(d){i.i&&(i.i.reset(),i.o={},i.u={}),d.g=0})},o.setOptions=function(i,d){var Z=this;if(d=d||this.g.options){for(var e=[],c=[],f={},t=Y(Object.keys(i)),u=t.next();!u.done;f={R:f.R,S:f.S},u=t.next()){var a=u.value;a in this.j&&this.j[a]===i[a]||(this.j[a]=i[a],u=d[a],u!==void 0&&(u.onChange&&(f.R=u.onChange,f.S=i[a],e.push(function(b){return function(){var S;return gt(function(L){if(L.g==1)return _(L,b.R(b.S),2);S=L.h,S===!0&&(Z.s=!0),L.g=0})}}(f))),u.graphOptionXref&&(a={valueNumber:u.type===1?i[a]:0,valueBoolean:u.type===0?i[a]:!1,valueString:u.type===2?i[a]:""},u=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),u.graphOptionXref),a),c.push(u))))}(e.length!==0||c.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(c),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ct(i){var d,Z,e,c,f,t,u;return gt(function(a){switch(a.g){case 1:if(!i.s)return a.return();if(!i.A){a.g=2;break}d=Y(i.A),Z=d.next();case 3:if(Z.done){a.g=5;break}return e=Z.value,_(a,e(),4);case 4:Z=d.next(),a.g=3;break;case 5:i.A=void 0;case 2:if(i.B){for(c=new i.h.GraphOptionChangeRequestList,f=Y(i.B),t=f.next();!t.done;t=f.next())u=t.value,c.push_back(u);i.i.changeOptions(c),c.delete(),i.B=void 0}i.s=!1,a.g=0}})}o.initialize=function(){var i=this;return gt(function(d){return d.g==1?_(d,Yt(i),2):d.g!=3?_(d,Ht(i),3):_(d,Ct(i),0)})};function l(i,d){var Z,e;return gt(function(c){return d in i.H?c.return(i.H[d]):(Z=i.locateFile(d,""),e=fetch(Z).then(function(f){return f.arrayBuffer()}),i.H[d]=e,c.return(e))})}o.overrideFile=function(i,d){this.i?this.i.overrideFile(i,d):this.C[i]=d},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(i,d){var Z=this,e,c,f,t,u,a,b,S,L;return gt(function(F){switch(F.g){case 1:return Z.g.inputs?(e=1e3*(d==null?performance.now():d),_(F,Z.D,2)):F.return();case 2:return _(F,Z.initialize(),3);case 3:for(c=new Z.h.PacketDataList,f=Y(Object.keys(i)),t=f.next();!t.done;t=f.next())if(u=t.value,a=Z.g.inputs[u]){t:{var U=i[u];switch(a.type){case"video":var j=Z.o[a.stream];if(j||(j=new A(Z.h,Z.G),Z.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var D=U.videoWidth,$=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(D=U.naturalWidth,$=U.naturalHeight):(D=U.width,$=U.height);$={glName:j.l,width:D,height:$},D=j.g,D.canvas.width=$.width,D.canvas.height=$.height,D.activeTexture(D.TEXTURE0),j.h.bindTexture2d(j.l),D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,U),j.h.bindTexture2d(0),j=$;break t;case"detections":for(j=Z.o[a.stream],j||(j=new q(Z.h),Z.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(U.length),$=0;$<U.length;++$){D=U[$];var ut=j.data,mt=ut.setBoundingBox,pt=$,vt=D.boundingBox,Zt=new G;if(Nt(Zt,1,vt.xCenter),Nt(Zt,2,vt.yCenter),Nt(Zt,3,vt.height),Nt(Zt,4,vt.width),Nt(Zt,5,vt.rotation),Nt(Zt,6,vt.rectId),vt=O(Zt,C),mt.call(ut,pt,vt),D.landmarks)for(ut=0;ut<D.landmarks.length;++ut){Zt=D.landmarks[ut];var jt=!!Zt.visibility;mt=j.data,pt=mt.addNormalizedLandmark,vt=$,Zt=Object.assign(Object.assign({},Zt),{visibility:jt?Zt.visibility:0}),jt=new pe,Nt(jt,1,Zt.x),Nt(jt,2,Zt.y),Nt(jt,3,Zt.z),Zt.visibility&&Nt(jt,4,Zt.visibility),Zt=O(jt,ge),pt.call(mt,vt,Zt)}if(D.V)for(ut=0;ut<D.V.length;++ut)mt=j.data,pt=mt.addClassification,vt=$,Zt=D.V[ut],jt=new Et,Nt(jt,2,Zt.ga),Zt.index&&Nt(jt,1,Zt.index),Zt.label&&Nt(jt,3,Zt.label),Zt.displayName&&Nt(jt,4,Zt.displayName),Zt=O(jt,wt),pt.call(mt,vt,Zt)}j=j.data;break t;default:j={}}}switch(b=j,S=a.stream,a.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":L=b,L.stream=S,L.timestamp=e,c.pushDetectionList(L);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return Z.i.send(c),_(F,Z.D,4);case 4:c.delete(),F.g=0}})};function v(i,d,Z){var e,c,f,t,u,a,b,S,L,F,U,j,D,$;return gt(function(ut){switch(ut.g){case 1:if(!Z)return ut.return(d);for(e={},c=0,f=Y(Object.keys(Z)),t=f.next();!t.done;t=f.next())u=t.value,a=Z[u],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++c;1<c&&(i.I=!1),b=Y(Object.keys(Z)),t=b.next();case 2:if(t.done){ut.g=4;break}if(S=t.value,L=Z[S],typeof L=="string")return D=e,$=S,_(ut,x(i,S,d[L]),14);if(F=d[L.stream],L.type==="detection_list"){if(F){for(var mt=F.getRectList(),pt=F.getLandmarksList(),vt=F.getClassificationsList(),Zt=[],jt=0;jt<mt.size();++jt){var se=W(mt.get(jt),G,C);se={boundingBox:{xCenter:ie(se,1),yCenter:ie(se,2),height:ie(se,3),width:ie(se,4),rotation:ie(se,5,0),rectId:oe(se,6)},landmarks:He(W(pt.get(jt),ke,h),pe,1).map(N),V:w(W(vt.get(jt),Ut,Dt))},Zt.push(se)}mt=Zt}else mt=[];e[S]=mt,ut.g=7;break}if(L.type==="proto_list"){if(F){for(mt=Array(F.size()),pt=0;pt<F.size();pt++)mt[pt]=F.get(pt);F.delete()}else mt=[];e[S]=mt,ut.g=7;break}if(F===void 0){ut.g=3;break}if(L.type==="float_list"){e[S]=F,ut.g=7;break}if(L.type==="proto"){e[S]=F,ut.g=7;break}if(L.type!=="texture")throw Error("Unknown output config type: '"+L.type+"'");return U=i.u[S],U||(U=new A(i.h,i.G),i.u[S]=U),_(ut,K(U,F,i.I),13);case 13:j=ut.h,e[S]=j;case 7:L.transform&&e[S]&&(e[S]=L.transform(e[S])),ut.g=3;break;case 14:D[$]=ut.h;case 3:t=b.next(),ut.g=2;break;case 4:return ut.return(e)}})}function x(i,d,Z){var e;return gt(function(c){return typeof Z=="number"||Z instanceof Uint8Array||Z instanceof i.h.Uint8BlobList?c.return(Z):Z instanceof i.h.Texture2dDataOut?(e=i.u[d],e||(e=new A(i.h,i.G),i.u[d]=e),c.return(K(e,Z,i.I))):c.return(void 0)})}function T(i,d){for(var Z=d.name||"$",e=[].concat(k(d.wants)),c=new i.h.StringList,f=Y(d.wants),t=f.next();!t.done;t=f.next())c.push_back(t.value);f=i.h.PacketListener.implement({onResults:function(u){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=u.get(b);var S=i.listeners[Z];S&&(i.D=v(i,a,d.outs).then(function(L){L=S(L);for(var F=0;F<d.wants.length;++F){var U=a[e[F]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}L&&(i.D=L)}))}}),i.i.attachMultiListener(c,f),c.delete()}o.onResults=function(i,d){this.listeners[d||"$"]=i},Jt("Solution",Xt),Jt("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function J(i){var d=this;i=i||{};var Z={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Xt({locateFile:i.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:Z,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(c){var f,t,u,a,b,S;return gt(function(L){switch(L.g){case 1:f=c==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=Y(f),u=t.next();case 2:if(u.done){L.g=4;break}return a=u.value,b="third_party/mediapipe/modules/face_detection/"+a,_(L,l(d.g,a),5);case 5:S=L.h,d.g.overrideFile(b,S),u=t.next(),L.g=2;break;case 4:return Z.url=c==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=c==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",L.return(!0)}})}},minDetectionConfidence:e}})}o=J.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(i){this.g.onResults(i)},o.initialize=function(){var i=this;return gt(function(d){return _(d,i.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(i){var d=this;return gt(function(Z){return _(Z,d.g.send(i),0)})},o.setOptions=function(i){this.g.setOptions(i)},Jt("FaceDetection",J),Jt("FACEDETECTION_LIPS",M),Jt("FACEDETECTION_LEFT_EYE",Q),Jt("FACEDETECTION_LEFT_EYEBROW",B),Jt("FACEDETECTION_RIGHT_EYE",tt),Jt("FACEDETECTION_RIGHT_EYEBROW",ct),Jt("FACEDETECTION_FACE_OVAL",s),Jt("FACEDETECTION_CONTOURS",X),Jt("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]]),Jt("VERSION","0.4.1646425229")}).call(yi);const gi={};(function(){var o;function n(h){var g=0;return function(){return g<h.length?{done:!1,value:h[g++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,g,G){return h==Array.prototype||h==Object.prototype||(h[g]=G.value),h};function m(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var g=0;g<h.length;++g){var G=h[g];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var y=m(this);function I(h,g){if(g)t:{var G=y;h=h.split(".");for(var C=0;C<h.length-1;C++){var M=h[C];if(!(M in G))break t;G=G[M]}h=h[h.length-1],C=G[h],g=g(C),g!=C&&g!=null&&r(G,h,{configurable:!0,writable:!0,value:g})}}I("Symbol",function(h){function g(Q){if(this instanceof g)throw new TypeError("Symbol is not a constructor");return new G(C+(Q||"")+"_"+M++,Q)}function G(Q,B){this.g=Q,r(this,"description",{configurable:!0,writable:!0,value:B})}if(h)return h;G.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",M=0;return g}),I("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var g="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<g.length;G++){var C=y[g[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return h});function H(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function Y(h){var g=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return g?g.call(h):{next:n(h)}}function k(h){if(!(h instanceof Array)){h=Y(h);for(var g,G=[];!(g=h.next()).done;)G.push(g.value);h=G}return h}var nt=typeof Object.create=="function"?Object.create:function(h){function g(){}return g.prototype=h,new g},P;if(typeof Object.setPrototypeOf=="function")P=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}P=st?function(h,g){if(h.__proto__=g,h.__proto__!==g)throw new TypeError(h+" is not extensible");return h}:null}var dt=P;function ht(h,g){if(h.prototype=nt(g.prototype),h.prototype.constructor=h,dt)dt(h,g);else for(var G in g)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(g,G);C&&Object.defineProperty(h,G,C)}else h[G]=g[G];h.ea=g.prototype}function Ft(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Ft.prototype.o=function(h){this.h=h};function At(h,g){h.j={U:g,V:!0},h.g=h.m||h.s}Ft.prototype.return=function(h){this.j={return:h},this.g=this.s};function _(h,g,G){return h.g=G,{value:g}}function Ee(h){this.g=new Ft,this.h=h}function an(h,g){Lt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(C){return{value:C,done:!0}},g,h.g.return):(h.g.return(g),$t(h))}function We(h,g,G,C){try{var M=g.call(h.g.i,G);if(!(M instanceof Object))throw new TypeError("Iterator result "+M+" is not an object");if(!M.done)return h.g.l=!1,M;var Q=M.value}catch(B){return h.g.i=null,At(h.g,B),$t(h)}return h.g.i=null,C.call(h.g,Q),$t(h)}function $t(h){for(;h.g.g;)try{var g=h.h(h.g);if(g)return h.g.l=!1,{value:g.value,done:!1}}catch(G){h.g.h=void 0,At(h.g,G)}if(h.g.l=!1,h.g.j){if(g=h.g.j,h.g.j=null,g.V)throw g.U;return{value:g.return,done:!0}}return{value:void 0,done:!0}}function An(h){this.next=function(g){return Lt(h.g),h.g.i?g=We(h,h.g.i.next,g,h.g.o):(h.g.o(g),g=$t(h)),g},this.throw=function(g){return Lt(h.g),h.g.i?g=We(h,h.g.i.throw,g,h.g.o):(At(h.g,g),g=$t(h)),g},this.return=function(g){return an(h,g)},this[Symbol.iterator]=function(){return this}}function de(h,g){return g=new An(new Ee(g)),dt&&h.prototype&&dt(g,h.prototype),g}function gt(h,g){h instanceof String&&(h+="");var G=0,C=!1,M={next:function(){if(!C&&G<h.length){var Q=G++;return{value:g(Q,h[Q]),done:!1}}return C=!0,{done:!0,value:void 0}}};return M[Symbol.iterator]=function(){return M},M}var pn=typeof Object.assign=="function"?Object.assign:function(h,g){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var M in C)Object.prototype.hasOwnProperty.call(C,M)&&(h[M]=C[M])}return h};I("Object.assign",function(h){return h||pn}),I("Promise",function(h){function g(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var tt=this.j();try{B(tt.resolve,tt.reject)}catch(ct){tt.reject(ct)}}function G(){this.g=null}function C(B){return B instanceof g?B:new g(function(tt){tt(B)})}if(h)return h;G.prototype.h=function(B){if(this.g==null){this.g=[];var tt=this;this.i(function(){tt.l()})}this.g.push(B)};var M=y.setTimeout;G.prototype.i=function(B){M(B,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var tt=0;tt<B.length;++tt){var ct=B[tt];B[tt]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(B){this.i(function(){throw B})},g.prototype.j=function(){function B(s){return function(X){ct||(ct=!0,s.call(tt,X))}}var tt=this,ct=!1;return{resolve:B(this.C),reject:B(this.l)}},g.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof g)this.F(B);else{t:switch(typeof B){case"object":var tt=B!=null;break t;case"function":tt=!0;break t;default:tt=!1}tt?this.u(B):this.m(B)}},g.prototype.u=function(B){var tt=void 0;try{tt=B.then}catch(ct){this.l(ct);return}typeof tt=="function"?this.G(tt,B):this.m(B)},g.prototype.l=function(B){this.s(2,B)},g.prototype.m=function(B){this.s(1,B)},g.prototype.s=function(B,tt){if(this.h!=0)throw Error("Cannot settle("+B+", "+tt+"): Promise already settled in state"+this.h);this.h=B,this.i=tt,this.h===2&&this.D(),this.A()},g.prototype.D=function(){var B=this;M(function(){if(B.B()){var tt=y.console;typeof tt<"u"&&tt.error(B.i)}},1)},g.prototype.B=function(){if(this.o)return!1;var B=y.CustomEvent,tt=y.Event,ct=y.dispatchEvent;return typeof ct>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof tt=="function"?B=new tt("unhandledrejection",{cancelable:!0}):(B=y.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,ct(B))},g.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)Q.h(this.g[B]);this.g=null}};var Q=new G;return g.prototype.F=function(B){var tt=this.j();B.J(tt.resolve,tt.reject)},g.prototype.G=function(B,tt){var ct=this.j();try{B.call(tt,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},g.prototype.then=function(B,tt){function ct(w,N){return typeof w=="function"?function(A){try{s(w(A))}catch(K){X(K)}}:N}var s,X,R=new g(function(w,N){s=w,X=N});return this.J(ct(B,s),ct(tt,X)),R},g.prototype.catch=function(B){return this.then(void 0,B)},g.prototype.J=function(B,tt){function ct(){switch(s.h){case 1:B(s.i);break;case 2:tt(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?Q.h(ct):this.g.push(ct),this.o=!0},g.resolve=C,g.reject=function(B){return new g(function(tt,ct){ct(B)})},g.race=function(B){return new g(function(tt,ct){for(var s=Y(B),X=s.next();!X.done;X=s.next())C(X.value).J(tt,ct)})},g.all=function(B){var tt=Y(B),ct=tt.next();return ct.done?C([]):new g(function(s,X){function R(A){return function(K){w[A]=K,N--,N==0&&s(w)}}var w=[],N=0;do w.push(void 0),N++,C(ct.value).J(R(w.length-1),X),ct=tt.next();while(!ct.done)})},g}),I("Object.is",function(h){return h||function(g,G){return g===G?g!==0||1/g===1/G:g!==g&&G!==G}}),I("Array.prototype.includes",function(h){return h||function(g,G){var C=this;C instanceof String&&(C=String(C));var M=C.length;for(G=G||0,0>G&&(G=Math.max(G+M,0));G<M;G++){var Q=C[G];if(Q===g||Object.is(Q,g))return!0}return!1}}),I("String.prototype.includes",function(h){return h||function(g,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(g instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(g,G||0)!==-1}}),I("Array.prototype.keys",function(h){return h||function(){return gt(this,function(g){return g})}});var jn=this||self;function Re(h,g){h=h.split(".");var G=jn;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||g===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=g}function Jt(h,g){return g=String.fromCharCode.apply(null,g),h==null?g:h+g}var Te,on=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function xn(h){if(Hn)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var g=void 0;g=g===void 0?!1:g;for(var G=0,C=new Uint8Array(3*h.length),M=0;M<h.length;M++){var Q=h.charCodeAt(M);if(128>Q)C[G++]=Q;else{if(2048>Q)C[G++]=Q>>6|192;else{if(55296<=Q&&57343>=Q){if(56319>=Q&&M<h.length){var B=h.charCodeAt(++M);if(56320<=B&&57343>=B){Q=1024*(Q-55296)+B-56320+65536,C[G++]=Q>>18|240,C[G++]=Q>>12&63|128,C[G++]=Q>>6&63|128,C[G++]=Q&63|128;continue}else M--}if(g)throw Error("Found an unpaired surrogate");Q=65533}C[G++]=Q>>12|224,C[G++]=Q>>6&63|128}C[G++]=Q&63|128}}h=C.subarray(0,G)}return h}var Nn={},dn=null;function bn(h,g){g===void 0&&(g=0),Pe(),g=Nn[g];for(var G=Array(Math.floor(h.length/3)),C=g[64]||"",M=0,Q=0;M<h.length-2;M+=3){var B=h[M],tt=h[M+1],ct=h[M+2],s=g[B>>2];B=g[(B&3)<<4|tt>>4],tt=g[(tt&15)<<2|ct>>6],ct=g[ct&63],G[Q++]=s+B+tt+ct}switch(s=0,ct=C,h.length-M){case 2:s=h[M+1],ct=g[(s&15)<<2]||C;case 1:h=h[M],G[Q]=g[h>>2]+g[(h&3)<<4|s>>4]+ct+C}return G.join("")}function kn(h){var g=h.length,G=3*g/4;G%3?G=Math.floor(G):"=.".indexOf(h[g-1])!=-1&&(G="=.".indexOf(h[g-2])!=-1?G-2:G-1);var C=new Uint8Array(G),M=0;return Fn(h,function(Q){C[M++]=Q}),C.subarray(0,M)}function Fn(h,g){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=dn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}Pe();for(var C=0;;){var M=G(-1),Q=G(0),B=G(64),tt=G(64);if(tt===64&&M===-1)break;g(M<<2|Q>>4),B!=64&&(g(Q<<4&240|B>>2),tt!=64&&g(B<<6&192|tt))}}function Pe(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),g=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(g[G].split(""));Nn[G]=C;for(var M=0;M<C.length;M++){var Q=C[M];dn[Q]===void 0&&(dn[Q]=M)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",In;function Vn(h,g,G){return g===G?In||(In=new Uint8Array(0)):Ae?h.slice(g,G):new Uint8Array(h.subarray(g,G))}var he=0,Ye=0;function Oe(h,g){g=g===void 0?{}:g,g=g.v===void 0?!1:g.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=g,h&&ne(this,h)}function ne(h,g){g=g.constructor===Uint8Array?g:g.constructor===ArrayBuffer?new Uint8Array(g):g.constructor===Array?new Uint8Array(g):g.constructor===String?kn(g):g instanceof Uint8Array?new Uint8Array(g.buffer,g.byteOffset,g.byteLength):new Uint8Array(0),h.h=g,h.l=0,h.j=h.h.length,h.g=h.l}Oe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var g=128,G=0,C=0,M=0;4>M&&128<=g;M++)g=h.h[h.g++],G|=(g&127)<<7*M;if(128<=g&&(g=h.h[h.g++],G|=(g&127)<<28,C|=(g&127)>>4),128<=g)for(M=0;5>M&&128<=g;M++)g=h.h[h.g++],C|=(g&127)<<7*M+3;if(128>g)return h=G>>>0,g=C>>>0,(C=g&2147483648)&&(h=~h+1>>>0,g=~g>>>0,h==0&&(g=g+1>>>0)),h=4294967296*g+(h>>>0),C?-h:h;h.m=!0}Oe.prototype.i=function(){var h=this.h,g=h[this.g],G=g&127;return 128>g?(this.g+=1,G):(g=h[this.g+1],G|=(g&127)<<7,128>g?(this.g+=2,G):(g=h[this.g+2],G|=(g&127)<<14,128>g?(this.g+=3,G):(g=h[this.g+3],G|=(g&127)<<21,128>g?(this.g+=4,G):(g=h[this.g+4],G|=(g&15)<<28,128>g?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Oe.prototype.o=function(){var h=this.h[this.g],g=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|g<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,g=G>>>23&255,G&=8388607,g==255?G?NaN:1/0*h:g==0?h*Math.pow(2,-149)*G:h*Math.pow(2,g-150)*(G+Math.pow(2,23))};var sn=[];function Me(){this.g=new Uint8Array(64),this.h=0}Me.prototype.push=function(h){if(!(this.h+1<this.g.length)){var g=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(g)}this.g[this.h++]=h},Me.prototype.length=function(){return this.h},Me.prototype.end=function(){var h=this.g,g=this.h;return this.h=0,Vn(h,0,g)};function Qt(h,g){for(;127<g;)h.push(g&127|128),g>>>=7;h.push(g)}function Ze(h){var g={},G=g.N===void 0?!1:g.N;this.o={v:g.v===void 0?!1:g.v},this.N=G,g=this.o,sn.length?(G=sn.pop(),g&&(G.v=g.v),h&&ne(G,h),h=G):h=new Oe(h,g),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Ce(h){var g=h.g;if((g=g.g==g.j)||(g=h.j)||(g=h.g,g=g.m||0>g.g||g.g>g.j),g)return!1;h.m=h.g.g,g=h.g.i();var G=g&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=g,h.l=g>>>3,h.h=G,!0)}function Bt(h){switch(h.h){case 0:if(h.h!=0)Bt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Bt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Bt(h);else{var g=h.g.i();h=h.g,h.g+=g}break;case 5:h.h!=5?Bt(h):(h=h.g,h.g+=4);break;case 3:g=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=g&&(h.j=!0);break}Bt(h)}while(1);break;default:h.j=!0}}function Ie(h,g,G){var C=h.g.j,M=h.g.i(),Q=h.g.g+M;if(h.g.j=Q,G(g,h),G=Q-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+M+" bytes, instead read "+(M-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=Q,h.g.j=C,g}function zt(h){return h.g.o()}function ye(h){var g=h.g.i();h=h.g;var G=h.g;h.g+=g,h=h.h;var C;if(on)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+g));else{g=G+g;for(var M=[],Q=null,B,tt,ct;G<g;)B=h[G++],128>B?M.push(B):224>B?G>=g?M.push(65533):(tt=h[G++],194>B||(tt&192)!==128?(G--,M.push(65533)):M.push((B&31)<<6|tt&63)):240>B?G>=g-1?M.push(65533):(tt=h[G++],(tt&192)!==128||B===224&&160>tt||B===237&&160<=tt||((C=h[G++])&192)!==128?(G--,M.push(65533)):M.push((B&15)<<12|(tt&63)<<6|C&63)):244>=B?G>=g-2?M.push(65533):(tt=h[G++],(tt&192)!==128||(B<<28)+(tt-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,M.push(65533)):(B=(B&7)<<18|(tt&63)<<12|(C&63)<<6|ct&63,B-=65536,M.push((B>>10&1023)+55296,(B&1023)+56320))):M.push(65533),8192<=M.length&&(Q=Jt(Q,M),M.length=0);C=Jt(Q,M)}return C}function we(h,g,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(g.call(h.g))}function $e(h,g){h.h==2?we(h,Oe.prototype.o,g):g.push(zt(h))}function Xe(){this.h=[],this.i=0,this.g=new Me}function Pt(h,g){g.length!==0&&(h.h.push(g),h.i+=g.length)}function je(h){var g=h.i+h.g.length();if(g===0)return new Uint8Array(0);g=new Uint8Array(g);for(var G=h.h,C=G.length,M=0,Q=0;Q<C;Q++){var B=G[Q];B.length!==0&&(g.set(B,M),M+=B.length)}return G=h.g,C=G.h,C!==0&&(g.set(G.g.subarray(0,C),M),G.h=0),h.h=[g],g}function _e(h,g,G){if(G!=null){Qt(h.g,8*g+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?he=Ye=0:(Ye=0,he=2147483648):isNaN(C)?(Ye=0,he=2147483647):34028234663852886e22<C?(Ye=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Ye=0,he=(G<<31|C)>>>0):(g=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-g),C=Math.round(8388608*C),16777216<=C&&++g,Ye=0,he=(G<<31|g+127<<23|C&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var Se=typeof Uint8Array=="function";function Wn(h,g,G){if(h!=null)return typeof h=="object"?Se&&h instanceof Uint8Array?G(h):ln(h,g,G):g(h)}function ln(h,g,G){if(Array.isArray(h)){for(var C=Array(h.length),M=0;M<h.length;M++)C[M]=Wn(h[M],g,G);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(M in h)C[M]=Wn(h[M],g,G);return C}function Qe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var un={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,un),h}var Le;function Ge(h,g,G){var C=Le;Le=null,h||(h=C),C=this.constructor.ca,h||(h=C?[C]:[]),this.j=C?0:-1,this.m=this.g=null,this.h=h;t:{if(C=this.h.length,h=C-1,C&&(C=this.h[h],!(C===null||typeof C!="object"||Array.isArray(C)||Se&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}g!==void 0&&-1<g?(this.l=Math.max(g,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(g=0;g<G.length;g++)h=G[g],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=re):(De(this),(C=this.i[h])?ve(C):this.i[h]=re)}var re=Object.freeze(ve([]));function De(h){var g=h.l+h.j;h.h[g]||(h.i=h.h[g]={})}function te(h,g,G){return g===-1?null:(G===void 0?0:G)||g>=h.l?h.i?h.i[g]:void 0:h.h[g+h.j]}function Ot(h,g){var G=G===void 0?!1:G,C=te(h,g,G);return C==null&&(C=re),C===re&&(C=ve([]),Wt(h,g,C,G)),C}function hn(h){var g=Ot(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<g.length;G++)g[G]=+g[G];h.m[3]=!0}return g}function fe(h,g,G){return h=te(h,g),h==null?G:h}function Nt(h,g,G){return h=te(h,g),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Wt(h,g,G,C){(C===void 0?0:C)||g>=h.l?(De(h),h.i[g]=G):h.h[g+h.j]=G}function ie(h,g,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var C=te(h,G,!1);C&&(h.g[G]=new g(C))}return h.g[G]}function He(h,g){h.g||(h.g={});var G=h.g[1];if(!G){var C=Ot(h,1);G=[];for(var M=0;M<C.length;M++)G[M]=new g(C[M]);h.g[1]=G}return G}function ee(h,g,G){var C=C===void 0?!1:C;h.g||(h.g={});var M=G&&et(G);h.g[g]=G,Wt(h,g,M,C)}function oe(h,g,G,C){var M=He(h,G);g=g||new G,h=Ot(h,1),C!=null?(M.splice(C,0,g),h.splice(C,0,et(g))):(M.push(g),h.push(et(g)))}Ge.prototype.toJSON=function(){var h=et(this);return ln(h,Qe,bn)};function et(h,g){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var M=0;M<C.length;M++)C[M]&&et(C[M]);else C&&et(C)}return h.h}Ge.prototype.toString=function(){return et(this).toString()};function ot(h,g){if(h=h.o){Pt(g,g.g.end());for(var G=0;G<h.length;G++)Pt(g,h[G])}}function at(h,g){if(g.h==4)return!1;var G=g.m;return Bt(g),g.N||(g=Vn(g.g.h,G,g.g.g),(G=h.o)?G.push(g):h.o=[g]),!0}function _t(h){Ge.call(this,h,-1,ue)}ht(_t,Ge),_t.prototype.getRows=function(){return te(this,1)},_t.prototype.getCols=function(){return te(this,2)},_t.prototype.getPackedDataList=function(){return hn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function ae(h,g){for(;Ce(g);)switch(g.i){case 8:var G=g.g.i();Wt(h,1,G);break;case 16:G=g.g.i(),Wt(h,2,G);break;case 29:case 26:$e(g,h.getPackedDataList());break;case 32:G=Ve(g.g),Wt(h,4,G);break;default:if(!at(h,g))return h}return h}var ue=[3];function Tt(h,g){var G=void 0;return new(G||(G=Promise))(function(C,M){function Q(ct){try{tt(g.next(ct))}catch(s){M(s)}}function B(ct){try{tt(g.throw(ct))}catch(s){M(s)}}function tt(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(Q,B)}tt((g=g.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}ht(me,Ge);function Ne(h,g){for(;Ce(g);)switch(g.i){case 8:var G=g.g.i();Wt(h,1,G);break;case 21:G=zt(g),Wt(h,2,G);break;case 26:G=ye(g),Wt(h,3,G);break;case 34:G=ye(g),Wt(h,4,G);break;default:if(!at(h,g))return h}return h}function qe(h){Ge.call(this,h,-1,tn)}ht(qe,Ge),qe.prototype.addClassification=function(h,g){return oe(this,h,me,g),this};var tn=[1];function fn(h){Ge.call(this,h)}ht(fn,Ge);function yn(h,g){for(;Ce(g);)switch(g.i){case 13:var G=zt(g);Wt(h,1,G);break;case 21:G=zt(g),Wt(h,2,G);break;case 29:G=zt(g),Wt(h,3,G);break;case 37:G=zt(g),Wt(h,4,G);break;case 45:G=zt(g),Wt(h,5,G);break;default:if(!at(h,g))return h}return h}function Fe(h){Ge.call(this,h,-1,zn)}ht(Fe,Ge);function en(h){t:{var g=new Fe;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=Ie(h,new fn,yn);oe(g,G,fn,void 0);break;default:if(!at(g,h))break t}}return g}var zn=[1];function nn(h){Ge.call(this,h)}ht(nn,Ge);function Je(h){Ge.call(this,h,-1,Sn)}ht(Je,Ge),Je.prototype.getVertexType=function(){return fe(this,1,0)},Je.prototype.getPrimitiveType=function(){return fe(this,2,0)},Je.prototype.getVertexBufferList=function(){return hn(this)},Je.prototype.getIndexBufferList=function(){return Ot(this,4)};function Zn(h,g){for(;Ce(g);)switch(g.i){case 8:var G=Ve(g.g);Wt(h,1,G);break;case 16:G=Ve(g.g),Wt(h,2,G);break;case 29:case 26:$e(g,h.getVertexBufferList());break;case 32:case 34:G=g;var C=h.getIndexBufferList();G.h==2?we(G,Oe.prototype.i,C):C.push(G.g.i());break;default:if(!at(h,g))return h}return h}var Sn=[3,4];function Be(h){Ge.call(this,h)}ht(Be,Ge),Be.prototype.getMesh=function(){return ie(this,Je,1)},Be.prototype.getPoseTransformMatrix=function(){return ie(this,_t,2)};function En(h){t:{var g=new Be;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=Ie(h,new Je,Zn);ee(g,1,G);break;case 18:G=Ie(h,new _t,ae),ee(g,2,G);break;default:if(!at(g,h))break t}}return g}function rn(h,g,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,g),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
71
|
+
`+Z.getProgramInfoLog(f));e=i.o=f,Z.useProgram(e),c=Z.getUniformLocation(e,"sampler0"),i.j={K:Z.getAttribLocation(e,"aVertex"),J:Z.getAttribLocation(e,"aTex"),ma:c},i.u=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,i.u),Z.enableVertexAttribArray(i.j.K),Z.vertexAttribPointer(i.j.K,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),i.s=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,i.s),Z.enableVertexAttribArray(i.j.J),Z.vertexAttribPointer(i.j.J,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),Z.uniform1i(c,0)}e=i.j,Z.useProgram(i.o),Z.canvas.width=d.width,Z.canvas.height=d.height,Z.viewport(0,0,d.width,d.height),Z.activeTexture(Z.TEXTURE0),i.h.bindTexture2d(d.glName),Z.enableVertexAttribArray(e.K),Z.bindBuffer(Z.ARRAY_BUFFER,i.u),Z.vertexAttribPointer(e.K,2,Z.FLOAT,!1,0,0),Z.enableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,i.s),Z.vertexAttribPointer(e.J,2,Z.FLOAT,!1,0,0),Z.bindFramebuffer(Z.DRAW_FRAMEBUFFER?Z.DRAW_FRAMEBUFFER:Z.FRAMEBUFFER,null),Z.clearColor(0,0,0,0),Z.clear(Z.COLOR_BUFFER_BIT),Z.colorMask(!0,!0,!0,!0),Z.drawArrays(Z.TRIANGLE_FAN,0,4),Z.disableVertexAttribArray(e.K),Z.disableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,null),i.h.bindTexture2d(0)}function q(i){this.g=i}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Gt(i,d){return d+i}function Mt(i,d){window[i]=d}function St(i){var d=document.createElement("script");return d.setAttribute("src",i),d.setAttribute("crossorigin","anonymous"),new Promise(function(Z){d.addEventListener("load",function(){Z()},!1),d.addEventListener("error",function(){Z()},!1),document.body.appendChild(d)})}function ft(){return gt(function(i){switch(i.g){case 1:return i.o=2,_(i,WebAssembly.instantiate(yt),4);case 4:i.g=3,i.o=0;break;case 2:return i.o=0,i.j=null,i.return(!1);case 3:return i.return(!0)}})}function Xt(i){if(this.g=i,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=i&&i.locateFile||Gt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,i.options){d=Y(Object.keys(i.options));for(var Z=d.next();!Z.done;Z=d.next()){Z=Z.value;var e=i.options[Z].default;e!==void 0&&(this.j[Z]=typeof e=="function"?e():e)}}}o=Xt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Yt(i){var d,Z,e,c,f,t,u,a,b,S,L;return gt(function(H){switch(H.g){case 1:return i.Z?(d=i.g.files===void 0?[]:typeof i.g.files=="function"?i.g.files(i.j):i.g.files,_(H,ft(),2)):H.return();case 2:if(Z=H.h,typeof window=="object")return Mt("createMediapipeSolutionsWasm",{locateFile:i.locateFile}),Mt("createMediapipeSolutionsPackedAssets",{locateFile:i.locateFile}),t=d.filter(function(K){return K.data!==void 0}),u=d.filter(function(K){return K.data===void 0}),a=Promise.all(t.map(function(K){var j=l(i,K.url);if(K.path!==void 0){var D=K.path;j=j.then(function($){return i.overrideFile(D,$),Promise.resolve($)})}return j})),b=Promise.all(u.map(function(K){return K.simd===void 0||K.simd&&Z||!K.simd&&!Z?St(i.locateFile(K.url,i.$)):Promise.resolve()})).then(function(){var K,j,D;return gt(function($){if($.g==1)return K=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,D=i,_($,K(j),2);D.h=$.h,$.g=0})}),S=function(){return gt(function(K){return i.g.graph&&i.g.graph.url?K=_(K,l(i,i.g.graph.url),0):(K.g=0,K=void 0),K})}(),_(H,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(K){return K.simd===void 0||K.simd&&Z||!K.simd&&!Z}).map(function(K){return i.locateFile(K.url,i.$)}),importScripts.apply(null,k(e)),c=i,_(H,createMediapipeSolutionsWasm(Module),6);case 6:c.h=H.h,i.l=new OffscreenCanvas(1,1),i.h.canvas=i.l,f=i.h.GL.createContext(i.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),i.h.GL.makeContextCurrent(f),H.g=4;break;case 7:if(i.l=document.createElement("canvas"),L=i.l.getContext("webgl2",{}),!L&&(L=i.l.getContext("webgl",{}),!L))return alert("Failed to create WebGL canvas context when passing video frame."),H.return();i.G=L,i.h.canvas=i.l,i.h.createContext(i.l,!0,!0,{});case 4:i.i=new i.h.SolutionWasm,i.Z=!1,H.g=0}})}function Ft(i){var d,Z,e,c,f,t,u,a;return gt(function(b){if(b.g==1){if(i.g.graph&&i.g.graph.url&&i.Y===i.g.graph.url)return b.return();if(i.s=!0,!i.g.graph||!i.g.graph.url){b.g=2;return}return i.Y=i.g.graph.url,_(b,l(i,i.g.graph.url),3)}for(b.g!=2&&(d=b.h,i.i.loadGraph(d)),Z=Y(Object.keys(i.C)),e=Z.next();!e.done;e=Z.next())c=e.value,i.i.overrideFile(c,i.C[c]);if(i.C={},i.g.listeners)for(f=Y(i.g.listeners),t=f.next();!t.done;t=f.next())u=t.value,T(i,u);a=i.j,i.j={},i.setOptions(a),b.g=0})}o.reset=function(){var i=this;return gt(function(d){i.i&&(i.i.reset(),i.o={},i.u={}),d.g=0})},o.setOptions=function(i,d){var Z=this;if(d=d||this.g.options){for(var e=[],c=[],f={},t=Y(Object.keys(i)),u=t.next();!u.done;f={R:f.R,S:f.S},u=t.next()){var a=u.value;a in this.j&&this.j[a]===i[a]||(this.j[a]=i[a],u=d[a],u!==void 0&&(u.onChange&&(f.R=u.onChange,f.S=i[a],e.push(function(b){return function(){var S;return gt(function(L){if(L.g==1)return _(L,b.R(b.S),2);S=L.h,S===!0&&(Z.s=!0),L.g=0})}}(f))),u.graphOptionXref&&(a={valueNumber:u.type===1?i[a]:0,valueBoolean:u.type===0?i[a]:!1,valueString:u.type===2?i[a]:""},u=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),u.graphOptionXref),a),c.push(u))))}(e.length!==0||c.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(c),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ct(i){var d,Z,e,c,f,t,u;return gt(function(a){switch(a.g){case 1:if(!i.s)return a.return();if(!i.A){a.g=2;break}d=Y(i.A),Z=d.next();case 3:if(Z.done){a.g=5;break}return e=Z.value,_(a,e(),4);case 4:Z=d.next(),a.g=3;break;case 5:i.A=void 0;case 2:if(i.B){for(c=new i.h.GraphOptionChangeRequestList,f=Y(i.B),t=f.next();!t.done;t=f.next())u=t.value,c.push_back(u);i.i.changeOptions(c),c.delete(),i.B=void 0}i.s=!1,a.g=0}})}o.initialize=function(){var i=this;return gt(function(d){return d.g==1?_(d,Yt(i),2):d.g!=3?_(d,Ft(i),3):_(d,Ct(i),0)})};function l(i,d){var Z,e;return gt(function(c){return d in i.H?c.return(i.H[d]):(Z=i.locateFile(d,""),e=fetch(Z).then(function(f){return f.arrayBuffer()}),i.H[d]=e,c.return(e))})}o.overrideFile=function(i,d){this.i?this.i.overrideFile(i,d):this.C[i]=d},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(i,d){var Z=this,e,c,f,t,u,a,b,S,L;return gt(function(H){switch(H.g){case 1:return Z.g.inputs?(e=1e3*(d==null?performance.now():d),_(H,Z.D,2)):H.return();case 2:return _(H,Z.initialize(),3);case 3:for(c=new Z.h.PacketDataList,f=Y(Object.keys(i)),t=f.next();!t.done;t=f.next())if(u=t.value,a=Z.g.inputs[u]){t:{var K=i[u];switch(a.type){case"video":var j=Z.o[a.stream];if(j||(j=new A(Z.h,Z.G),Z.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement<"u"&&K instanceof HTMLVideoElement)var D=K.videoWidth,$=K.videoHeight;else typeof HTMLImageElement<"u"&&K instanceof HTMLImageElement?(D=K.naturalWidth,$=K.naturalHeight):(D=K.width,$=K.height);$={glName:j.l,width:D,height:$},D=j.g,D.canvas.width=$.width,D.canvas.height=$.height,D.activeTexture(D.TEXTURE0),j.h.bindTexture2d(j.l),D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,K),j.h.bindTexture2d(0),j=$;break t;case"detections":for(j=Z.o[a.stream],j||(j=new q(Z.h),Z.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(K.length),$=0;$<K.length;++$){D=K[$];var ut=j.data,mt=ut.setBoundingBox,pt=$,vt=D.boundingBox,Zt=new G;if(Nt(Zt,1,vt.xCenter),Nt(Zt,2,vt.yCenter),Nt(Zt,3,vt.height),Nt(Zt,4,vt.width),Nt(Zt,5,vt.rotation),Nt(Zt,6,vt.rectId),vt=P(Zt,C),mt.call(ut,pt,vt),D.landmarks)for(ut=0;ut<D.landmarks.length;++ut){Zt=D.landmarks[ut];var jt=!!Zt.visibility;mt=j.data,pt=mt.addNormalizedLandmark,vt=$,Zt=Object.assign(Object.assign({},Zt),{visibility:jt?Zt.visibility:0}),jt=new pe,Nt(jt,1,Zt.x),Nt(jt,2,Zt.y),Nt(jt,3,Zt.z),Zt.visibility&&Nt(jt,4,Zt.visibility),Zt=P(jt,ge),pt.call(mt,vt,Zt)}if(D.V)for(ut=0;ut<D.V.length;++ut)mt=j.data,pt=mt.addClassification,vt=$,Zt=D.V[ut],jt=new Et,Nt(jt,2,Zt.ga),Zt.index&&Nt(jt,1,Zt.index),Zt.label&&Nt(jt,3,Zt.label),Zt.displayName&&Nt(jt,4,Zt.displayName),Zt=P(jt,wt),pt.call(mt,vt,Zt)}j=j.data;break t;default:j={}}}switch(b=j,S=a.stream,a.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":L=b,L.stream=S,L.timestamp=e,c.pushDetectionList(L);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return Z.i.send(c),_(H,Z.D,4);case 4:c.delete(),H.g=0}})};function v(i,d,Z){var e,c,f,t,u,a,b,S,L,H,K,j,D,$;return gt(function(ut){switch(ut.g){case 1:if(!Z)return ut.return(d);for(e={},c=0,f=Y(Object.keys(Z)),t=f.next();!t.done;t=f.next())u=t.value,a=Z[u],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++c;1<c&&(i.I=!1),b=Y(Object.keys(Z)),t=b.next();case 2:if(t.done){ut.g=4;break}if(S=t.value,L=Z[S],typeof L=="string")return D=e,$=S,_(ut,x(i,S,d[L]),14);if(H=d[L.stream],L.type==="detection_list"){if(H){for(var mt=H.getRectList(),pt=H.getLandmarksList(),vt=H.getClassificationsList(),Zt=[],jt=0;jt<mt.size();++jt){var se=W(mt.get(jt),G,C);se={boundingBox:{xCenter:ie(se,1),yCenter:ie(se,2),height:ie(se,3),width:ie(se,4),rotation:ie(se,5,0),rectId:oe(se,6)},landmarks:Fe(W(pt.get(jt),ke,h),pe,1).map(N),V:w(W(vt.get(jt),Kt,Dt))},Zt.push(se)}mt=Zt}else mt=[];e[S]=mt,ut.g=7;break}if(L.type==="proto_list"){if(H){for(mt=Array(H.size()),pt=0;pt<H.size();pt++)mt[pt]=H.get(pt);H.delete()}else mt=[];e[S]=mt,ut.g=7;break}if(H===void 0){ut.g=3;break}if(L.type==="float_list"){e[S]=H,ut.g=7;break}if(L.type==="proto"){e[S]=H,ut.g=7;break}if(L.type!=="texture")throw Error("Unknown output config type: '"+L.type+"'");return K=i.u[S],K||(K=new A(i.h,i.G),i.u[S]=K),_(ut,U(K,H,i.I),13);case 13:j=ut.h,e[S]=j;case 7:L.transform&&e[S]&&(e[S]=L.transform(e[S])),ut.g=3;break;case 14:D[$]=ut.h;case 3:t=b.next(),ut.g=2;break;case 4:return ut.return(e)}})}function x(i,d,Z){var e;return gt(function(c){return typeof Z=="number"||Z instanceof Uint8Array||Z instanceof i.h.Uint8BlobList?c.return(Z):Z instanceof i.h.Texture2dDataOut?(e=i.u[d],e||(e=new A(i.h,i.G),i.u[d]=e),c.return(U(e,Z,i.I))):c.return(void 0)})}function T(i,d){for(var Z=d.name||"$",e=[].concat(k(d.wants)),c=new i.h.StringList,f=Y(d.wants),t=f.next();!t.done;t=f.next())c.push_back(t.value);f=i.h.PacketListener.implement({onResults:function(u){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=u.get(b);var S=i.listeners[Z];S&&(i.D=v(i,a,d.outs).then(function(L){L=S(L);for(var H=0;H<d.wants.length;++H){var K=a[e[H]];typeof K=="object"&&K.hasOwnProperty&&K.hasOwnProperty("delete")&&K.delete()}L&&(i.D=L)}))}}),i.i.attachMultiListener(c,f),c.delete()}o.onResults=function(i,d){this.listeners[d||"$"]=i},Jt("Solution",Xt),Jt("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function J(i){var d=this;i=i||{};var Z={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Xt({locateFile:i.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:Z,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(c){var f,t,u,a,b,S;return gt(function(L){switch(L.g){case 1:f=c==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=Y(f),u=t.next();case 2:if(u.done){L.g=4;break}return a=u.value,b="third_party/mediapipe/modules/face_detection/"+a,_(L,l(d.g,a),5);case 5:S=L.h,d.g.overrideFile(b,S),u=t.next(),L.g=2;break;case 4:return Z.url=c==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=c==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",L.return(!0)}})}},minDetectionConfidence:e}})}o=J.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(i){this.g.onResults(i)},o.initialize=function(){var i=this;return gt(function(d){return _(d,i.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(i){var d=this;return gt(function(Z){return _(Z,d.g.send(i),0)})},o.setOptions=function(i){this.g.setOptions(i)},Jt("FaceDetection",J),Jt("FACEDETECTION_LIPS",M),Jt("FACEDETECTION_LEFT_EYE",Q),Jt("FACEDETECTION_LEFT_EYEBROW",B),Jt("FACEDETECTION_RIGHT_EYE",tt),Jt("FACEDETECTION_RIGHT_EYEBROW",ct),Jt("FACEDETECTION_FACE_OVAL",s),Jt("FACEDETECTION_CONTOURS",X),Jt("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]]),Jt("VERSION","0.4.1646425229")}).call(yi);const gi={};(function(){var o;function n(h){var g=0;return function(){return g<h.length?{done:!1,value:h[g++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,g,G){return h==Array.prototype||h==Object.prototype||(h[g]=G.value),h};function m(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var g=0;g<h.length;++g){var G=h[g];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var y=m(this);function I(h,g){if(g)t:{var G=y;h=h.split(".");for(var C=0;C<h.length-1;C++){var M=h[C];if(!(M in G))break t;G=G[M]}h=h[h.length-1],C=G[h],g=g(C),g!=C&&g!=null&&r(G,h,{configurable:!0,writable:!0,value:g})}}I("Symbol",function(h){function g(Q){if(this instanceof g)throw new TypeError("Symbol is not a constructor");return new G(C+(Q||"")+"_"+M++,Q)}function G(Q,B){this.g=Q,r(this,"description",{configurable:!0,writable:!0,value:B})}if(h)return h;G.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",M=0;return g}),I("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var g="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<g.length;G++){var C=y[g[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return h});function F(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function Y(h){var g=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return g?g.call(h):{next:n(h)}}function k(h){if(!(h instanceof Array)){h=Y(h);for(var g,G=[];!(g=h.next()).done;)G.push(g.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function g(){}return g.prototype=h,new g},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(h,g){if(h.__proto__=g,h.__proto__!==g)throw new TypeError(h+" is not extensible");return h}:null}var dt=O;function ht(h,g){if(h.prototype=et(g.prototype),h.prototype.constructor=h,dt)dt(h,g);else for(var G in g)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(g,G);C&&Object.defineProperty(h,G,C)}else h[G]=g[G];h.ea=g.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Ht.prototype.o=function(h){this.h=h};function At(h,g){h.j={U:g,V:!0},h.g=h.m||h.s}Ht.prototype.return=function(h){this.j={return:h},this.g=this.s};function _(h,g,G){return h.g=G,{value:g}}function Ee(h){this.g=new Ht,this.h=h}function an(h,g){Lt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(C){return{value:C,done:!0}},g,h.g.return):(h.g.return(g),$t(h))}function We(h,g,G,C){try{var M=g.call(h.g.i,G);if(!(M instanceof Object))throw new TypeError("Iterator result "+M+" is not an object");if(!M.done)return h.g.l=!1,M;var Q=M.value}catch(B){return h.g.i=null,At(h.g,B),$t(h)}return h.g.i=null,C.call(h.g,Q),$t(h)}function $t(h){for(;h.g.g;)try{var g=h.h(h.g);if(g)return h.g.l=!1,{value:g.value,done:!1}}catch(G){h.g.h=void 0,At(h.g,G)}if(h.g.l=!1,h.g.j){if(g=h.g.j,h.g.j=null,g.V)throw g.U;return{value:g.return,done:!0}}return{value:void 0,done:!0}}function An(h){this.next=function(g){return Lt(h.g),h.g.i?g=We(h,h.g.i.next,g,h.g.o):(h.g.o(g),g=$t(h)),g},this.throw=function(g){return Lt(h.g),h.g.i?g=We(h,h.g.i.throw,g,h.g.o):(At(h.g,g),g=$t(h)),g},this.return=function(g){return an(h,g)},this[Symbol.iterator]=function(){return this}}function de(h,g){return g=new An(new Ee(g)),dt&&h.prototype&&dt(g,h.prototype),g}function gt(h,g){h instanceof String&&(h+="");var G=0,C=!1,M={next:function(){if(!C&&G<h.length){var Q=G++;return{value:g(Q,h[Q]),done:!1}}return C=!0,{done:!0,value:void 0}}};return M[Symbol.iterator]=function(){return M},M}var pn=typeof Object.assign=="function"?Object.assign:function(h,g){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var M in C)Object.prototype.hasOwnProperty.call(C,M)&&(h[M]=C[M])}return h};I("Object.assign",function(h){return h||pn}),I("Promise",function(h){function g(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var tt=this.j();try{B(tt.resolve,tt.reject)}catch(ct){tt.reject(ct)}}function G(){this.g=null}function C(B){return B instanceof g?B:new g(function(tt){tt(B)})}if(h)return h;G.prototype.h=function(B){if(this.g==null){this.g=[];var tt=this;this.i(function(){tt.l()})}this.g.push(B)};var M=y.setTimeout;G.prototype.i=function(B){M(B,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var tt=0;tt<B.length;++tt){var ct=B[tt];B[tt]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(B){this.i(function(){throw B})},g.prototype.j=function(){function B(s){return function(X){ct||(ct=!0,s.call(tt,X))}}var tt=this,ct=!1;return{resolve:B(this.C),reject:B(this.l)}},g.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof g)this.F(B);else{t:switch(typeof B){case"object":var tt=B!=null;break t;case"function":tt=!0;break t;default:tt=!1}tt?this.u(B):this.m(B)}},g.prototype.u=function(B){var tt=void 0;try{tt=B.then}catch(ct){this.l(ct);return}typeof tt=="function"?this.G(tt,B):this.m(B)},g.prototype.l=function(B){this.s(2,B)},g.prototype.m=function(B){this.s(1,B)},g.prototype.s=function(B,tt){if(this.h!=0)throw Error("Cannot settle("+B+", "+tt+"): Promise already settled in state"+this.h);this.h=B,this.i=tt,this.h===2&&this.D(),this.A()},g.prototype.D=function(){var B=this;M(function(){if(B.B()){var tt=y.console;typeof tt<"u"&&tt.error(B.i)}},1)},g.prototype.B=function(){if(this.o)return!1;var B=y.CustomEvent,tt=y.Event,ct=y.dispatchEvent;return typeof ct>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof tt=="function"?B=new tt("unhandledrejection",{cancelable:!0}):(B=y.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,ct(B))},g.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)Q.h(this.g[B]);this.g=null}};var Q=new G;return g.prototype.F=function(B){var tt=this.j();B.J(tt.resolve,tt.reject)},g.prototype.G=function(B,tt){var ct=this.j();try{B.call(tt,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},g.prototype.then=function(B,tt){function ct(w,N){return typeof w=="function"?function(A){try{s(w(A))}catch(U){X(U)}}:N}var s,X,R=new g(function(w,N){s=w,X=N});return this.J(ct(B,s),ct(tt,X)),R},g.prototype.catch=function(B){return this.then(void 0,B)},g.prototype.J=function(B,tt){function ct(){switch(s.h){case 1:B(s.i);break;case 2:tt(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?Q.h(ct):this.g.push(ct),this.o=!0},g.resolve=C,g.reject=function(B){return new g(function(tt,ct){ct(B)})},g.race=function(B){return new g(function(tt,ct){for(var s=Y(B),X=s.next();!X.done;X=s.next())C(X.value).J(tt,ct)})},g.all=function(B){var tt=Y(B),ct=tt.next();return ct.done?C([]):new g(function(s,X){function R(A){return function(U){w[A]=U,N--,N==0&&s(w)}}var w=[],N=0;do w.push(void 0),N++,C(ct.value).J(R(w.length-1),X),ct=tt.next();while(!ct.done)})},g}),I("Object.is",function(h){return h||function(g,G){return g===G?g!==0||1/g===1/G:g!==g&&G!==G}}),I("Array.prototype.includes",function(h){return h||function(g,G){var C=this;C instanceof String&&(C=String(C));var M=C.length;for(G=G||0,0>G&&(G=Math.max(G+M,0));G<M;G++){var Q=C[G];if(Q===g||Object.is(Q,g))return!0}return!1}}),I("String.prototype.includes",function(h){return h||function(g,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(g instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(g,G||0)!==-1}}),I("Array.prototype.keys",function(h){return h||function(){return gt(this,function(g){return g})}});var jn=this||self;function Re(h,g){h=h.split(".");var G=jn;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||g===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=g}function Jt(h,g){return g=String.fromCharCode.apply(null,g),h==null?g:h+g}var Te,on=typeof TextDecoder<"u",Xn,Fn=typeof TextEncoder<"u";function xn(h){if(Fn)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var g=void 0;g=g===void 0?!1:g;for(var G=0,C=new Uint8Array(3*h.length),M=0;M<h.length;M++){var Q=h.charCodeAt(M);if(128>Q)C[G++]=Q;else{if(2048>Q)C[G++]=Q>>6|192;else{if(55296<=Q&&57343>=Q){if(56319>=Q&&M<h.length){var B=h.charCodeAt(++M);if(56320<=B&&57343>=B){Q=1024*(Q-55296)+B-56320+65536,C[G++]=Q>>18|240,C[G++]=Q>>12&63|128,C[G++]=Q>>6&63|128,C[G++]=Q&63|128;continue}else M--}if(g)throw Error("Found an unpaired surrogate");Q=65533}C[G++]=Q>>12|224,C[G++]=Q>>6&63|128}C[G++]=Q&63|128}}h=C.subarray(0,G)}return h}var Nn={},dn=null;function bn(h,g){g===void 0&&(g=0),Oe(),g=Nn[g];for(var G=Array(Math.floor(h.length/3)),C=g[64]||"",M=0,Q=0;M<h.length-2;M+=3){var B=h[M],tt=h[M+1],ct=h[M+2],s=g[B>>2];B=g[(B&3)<<4|tt>>4],tt=g[(tt&15)<<2|ct>>6],ct=g[ct&63],G[Q++]=s+B+tt+ct}switch(s=0,ct=C,h.length-M){case 2:s=h[M+1],ct=g[(s&15)<<2]||C;case 1:h=h[M],G[Q]=g[h>>2]+g[(h&3)<<4|s>>4]+ct+C}return G.join("")}function kn(h){var g=h.length,G=3*g/4;G%3?G=Math.floor(G):"=.".indexOf(h[g-1])!=-1&&(G="=.".indexOf(h[g-2])!=-1?G-2:G-1);var C=new Uint8Array(G),M=0;return Hn(h,function(Q){C[M++]=Q}),C.subarray(0,M)}function Hn(h,g){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=dn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}Oe();for(var C=0;;){var M=G(-1),Q=G(0),B=G(64),tt=G(64);if(tt===64&&M===-1)break;g(M<<2|Q>>4),B!=64&&(g(Q<<4&240|B>>2),tt!=64&&g(B<<6&192|tt))}}function Oe(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),g=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(g[G].split(""));Nn[G]=C;for(var M=0;M<C.length;M++){var Q=C[M];dn[Q]===void 0&&(dn[Q]=M)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",In;function Vn(h,g,G){return g===G?In||(In=new Uint8Array(0)):Ae?h.slice(g,G):new Uint8Array(h.subarray(g,G))}var he=0,Ye=0;function Pe(h,g){g=g===void 0?{}:g,g=g.v===void 0?!1:g.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=g,h&&ne(this,h)}function ne(h,g){g=g.constructor===Uint8Array?g:g.constructor===ArrayBuffer?new Uint8Array(g):g.constructor===Array?new Uint8Array(g):g.constructor===String?kn(g):g instanceof Uint8Array?new Uint8Array(g.buffer,g.byteOffset,g.byteLength):new Uint8Array(0),h.h=g,h.l=0,h.j=h.h.length,h.g=h.l}Pe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var g=128,G=0,C=0,M=0;4>M&&128<=g;M++)g=h.h[h.g++],G|=(g&127)<<7*M;if(128<=g&&(g=h.h[h.g++],G|=(g&127)<<28,C|=(g&127)>>4),128<=g)for(M=0;5>M&&128<=g;M++)g=h.h[h.g++],C|=(g&127)<<7*M+3;if(128>g)return h=G>>>0,g=C>>>0,(C=g&2147483648)&&(h=~h+1>>>0,g=~g>>>0,h==0&&(g=g+1>>>0)),h=4294967296*g+(h>>>0),C?-h:h;h.m=!0}Pe.prototype.i=function(){var h=this.h,g=h[this.g],G=g&127;return 128>g?(this.g+=1,G):(g=h[this.g+1],G|=(g&127)<<7,128>g?(this.g+=2,G):(g=h[this.g+2],G|=(g&127)<<14,128>g?(this.g+=3,G):(g=h[this.g+3],G|=(g&127)<<21,128>g?(this.g+=4,G):(g=h[this.g+4],G|=(g&15)<<28,128>g?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Pe.prototype.o=function(){var h=this.h[this.g],g=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|g<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,g=G>>>23&255,G&=8388607,g==255?G?NaN:1/0*h:g==0?h*Math.pow(2,-149)*G:h*Math.pow(2,g-150)*(G+Math.pow(2,23))};var sn=[];function Me(){this.g=new Uint8Array(64),this.h=0}Me.prototype.push=function(h){if(!(this.h+1<this.g.length)){var g=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(g)}this.g[this.h++]=h},Me.prototype.length=function(){return this.h},Me.prototype.end=function(){var h=this.g,g=this.h;return this.h=0,Vn(h,0,g)};function Qt(h,g){for(;127<g;)h.push(g&127|128),g>>>=7;h.push(g)}function Ze(h){var g={},G=g.N===void 0?!1:g.N;this.o={v:g.v===void 0?!1:g.v},this.N=G,g=this.o,sn.length?(G=sn.pop(),g&&(G.v=g.v),h&&ne(G,h),h=G):h=new Pe(h,g),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Ce(h){var g=h.g;if((g=g.g==g.j)||(g=h.j)||(g=h.g,g=g.m||0>g.g||g.g>g.j),g)return!1;h.m=h.g.g,g=h.g.i();var G=g&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=g,h.l=g>>>3,h.h=G,!0)}function Bt(h){switch(h.h){case 0:if(h.h!=0)Bt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Bt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Bt(h);else{var g=h.g.i();h=h.g,h.g+=g}break;case 5:h.h!=5?Bt(h):(h=h.g,h.g+=4);break;case 3:g=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=g&&(h.j=!0);break}Bt(h)}while(1);break;default:h.j=!0}}function Ie(h,g,G){var C=h.g.j,M=h.g.i(),Q=h.g.g+M;if(h.g.j=Q,G(g,h),G=Q-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+M+" bytes, instead read "+(M-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=Q,h.g.j=C,g}function zt(h){return h.g.o()}function ye(h){var g=h.g.i();h=h.g;var G=h.g;h.g+=g,h=h.h;var C;if(on)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+g));else{g=G+g;for(var M=[],Q=null,B,tt,ct;G<g;)B=h[G++],128>B?M.push(B):224>B?G>=g?M.push(65533):(tt=h[G++],194>B||(tt&192)!==128?(G--,M.push(65533)):M.push((B&31)<<6|tt&63)):240>B?G>=g-1?M.push(65533):(tt=h[G++],(tt&192)!==128||B===224&&160>tt||B===237&&160<=tt||((C=h[G++])&192)!==128?(G--,M.push(65533)):M.push((B&15)<<12|(tt&63)<<6|C&63)):244>=B?G>=g-2?M.push(65533):(tt=h[G++],(tt&192)!==128||(B<<28)+(tt-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,M.push(65533)):(B=(B&7)<<18|(tt&63)<<12|(C&63)<<6|ct&63,B-=65536,M.push((B>>10&1023)+55296,(B&1023)+56320))):M.push(65533),8192<=M.length&&(Q=Jt(Q,M),M.length=0);C=Jt(Q,M)}return C}function we(h,g,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(g.call(h.g))}function $e(h,g){h.h==2?we(h,Pe.prototype.o,g):g.push(zt(h))}function Xe(){this.h=[],this.i=0,this.g=new Me}function Ot(h,g){g.length!==0&&(h.h.push(g),h.i+=g.length)}function je(h){var g=h.i+h.g.length();if(g===0)return new Uint8Array(0);g=new Uint8Array(g);for(var G=h.h,C=G.length,M=0,Q=0;Q<C;Q++){var B=G[Q];B.length!==0&&(g.set(B,M),M+=B.length)}return G=h.g,C=G.h,C!==0&&(g.set(G.g.subarray(0,C),M),G.h=0),h.h=[g],g}function _e(h,g,G){if(G!=null){Qt(h.g,8*g+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?he=Ye=0:(Ye=0,he=2147483648):isNaN(C)?(Ye=0,he=2147483647):34028234663852886e22<C?(Ye=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Ye=0,he=(G<<31|C)>>>0):(g=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-g),C=Math.round(8388608*C),16777216<=C&&++g,Ye=0,he=(G<<31|g+127<<23|C&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var Se=typeof Uint8Array=="function";function Wn(h,g,G){if(h!=null)return typeof h=="object"?Se&&h instanceof Uint8Array?G(h):ln(h,g,G):g(h)}function ln(h,g,G){if(Array.isArray(h)){for(var C=Array(h.length),M=0;M<h.length;M++)C[M]=Wn(h[M],g,G);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(M in h)C[M]=Wn(h[M],g,G);return C}function Qe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var un={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,un),h}var Le;function Ge(h,g,G){var C=Le;Le=null,h||(h=C),C=this.constructor.ca,h||(h=C?[C]:[]),this.j=C?0:-1,this.m=this.g=null,this.h=h;t:{if(C=this.h.length,h=C-1,C&&(C=this.h[h],!(C===null||typeof C!="object"||Array.isArray(C)||Se&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}g!==void 0&&-1<g?(this.l=Math.max(g,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(g=0;g<G.length;g++)h=G[g],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=re):(De(this),(C=this.i[h])?ve(C):this.i[h]=re)}var re=Object.freeze(ve([]));function De(h){var g=h.l+h.j;h.h[g]||(h.i=h.h[g]={})}function te(h,g,G){return g===-1?null:(G===void 0?0:G)||g>=h.l?h.i?h.i[g]:void 0:h.h[g+h.j]}function Pt(h,g){var G=G===void 0?!1:G,C=te(h,g,G);return C==null&&(C=re),C===re&&(C=ve([]),Wt(h,g,C,G)),C}function hn(h){var g=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<g.length;G++)g[G]=+g[G];h.m[3]=!0}return g}function fe(h,g,G){return h=te(h,g),h==null?G:h}function Nt(h,g,G){return h=te(h,g),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Wt(h,g,G,C){(C===void 0?0:C)||g>=h.l?(De(h),h.i[g]=G):h.h[g+h.j]=G}function ie(h,g,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var C=te(h,G,!1);C&&(h.g[G]=new g(C))}return h.g[G]}function Fe(h,g){h.g||(h.g={});var G=h.g[1];if(!G){var C=Pt(h,1);G=[];for(var M=0;M<C.length;M++)G[M]=new g(C[M]);h.g[1]=G}return G}function ee(h,g,G){var C=C===void 0?!1:C;h.g||(h.g={});var M=G&&nt(G);h.g[g]=G,Wt(h,g,M,C)}function oe(h,g,G,C){var M=Fe(h,G);g=g||new G,h=Pt(h,1),C!=null?(M.splice(C,0,g),h.splice(C,0,nt(g))):(M.push(g),h.push(nt(g)))}Ge.prototype.toJSON=function(){var h=nt(this);return ln(h,Qe,bn)};function nt(h,g){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var M=0;M<C.length;M++)C[M]&&nt(C[M]);else C&&nt(C)}return h.h}Ge.prototype.toString=function(){return nt(this).toString()};function ot(h,g){if(h=h.o){Ot(g,g.g.end());for(var G=0;G<h.length;G++)Ot(g,h[G])}}function at(h,g){if(g.h==4)return!1;var G=g.m;return Bt(g),g.N||(g=Vn(g.g.h,G,g.g.g),(G=h.o)?G.push(g):h.o=[g]),!0}function _t(h){Ge.call(this,h,-1,ue)}ht(_t,Ge),_t.prototype.getRows=function(){return te(this,1)},_t.prototype.getCols=function(){return te(this,2)},_t.prototype.getPackedDataList=function(){return hn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function ae(h,g){for(;Ce(g);)switch(g.i){case 8:var G=g.g.i();Wt(h,1,G);break;case 16:G=g.g.i(),Wt(h,2,G);break;case 29:case 26:$e(g,h.getPackedDataList());break;case 32:G=Ve(g.g),Wt(h,4,G);break;default:if(!at(h,g))return h}return h}var ue=[3];function Tt(h,g){var G=void 0;return new(G||(G=Promise))(function(C,M){function Q(ct){try{tt(g.next(ct))}catch(s){M(s)}}function B(ct){try{tt(g.throw(ct))}catch(s){M(s)}}function tt(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(Q,B)}tt((g=g.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}ht(me,Ge);function Ne(h,g){for(;Ce(g);)switch(g.i){case 8:var G=g.g.i();Wt(h,1,G);break;case 21:G=zt(g),Wt(h,2,G);break;case 26:G=ye(g),Wt(h,3,G);break;case 34:G=ye(g),Wt(h,4,G);break;default:if(!at(h,g))return h}return h}function qe(h){Ge.call(this,h,-1,tn)}ht(qe,Ge),qe.prototype.addClassification=function(h,g){return oe(this,h,me,g),this};var tn=[1];function fn(h){Ge.call(this,h)}ht(fn,Ge);function yn(h,g){for(;Ce(g);)switch(g.i){case 13:var G=zt(g);Wt(h,1,G);break;case 21:G=zt(g),Wt(h,2,G);break;case 29:G=zt(g),Wt(h,3,G);break;case 37:G=zt(g),Wt(h,4,G);break;case 45:G=zt(g),Wt(h,5,G);break;default:if(!at(h,g))return h}return h}function He(h){Ge.call(this,h,-1,zn)}ht(He,Ge);function en(h){t:{var g=new He;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=Ie(h,new fn,yn);oe(g,G,fn,void 0);break;default:if(!at(g,h))break t}}return g}var zn=[1];function nn(h){Ge.call(this,h)}ht(nn,Ge);function Je(h){Ge.call(this,h,-1,Sn)}ht(Je,Ge),Je.prototype.getVertexType=function(){return fe(this,1,0)},Je.prototype.getPrimitiveType=function(){return fe(this,2,0)},Je.prototype.getVertexBufferList=function(){return hn(this)},Je.prototype.getIndexBufferList=function(){return Pt(this,4)};function Zn(h,g){for(;Ce(g);)switch(g.i){case 8:var G=Ve(g.g);Wt(h,1,G);break;case 16:G=Ve(g.g),Wt(h,2,G);break;case 29:case 26:$e(g,h.getVertexBufferList());break;case 32:case 34:G=g;var C=h.getIndexBufferList();G.h==2?we(G,Pe.prototype.i,C):C.push(G.g.i());break;default:if(!at(h,g))return h}return h}var Sn=[3,4];function Be(h){Ge.call(this,h)}ht(Be,Ge),Be.prototype.getMesh=function(){return ie(this,Je,1)},Be.prototype.getPoseTransformMatrix=function(){return ie(this,_t,2)};function En(h){t:{var g=new Be;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=Ie(h,new Je,Zn);ee(g,1,G);break;case 18:G=Ie(h,new _t,ae),ee(g,2,G);break;default:if(!at(g,h))break t}}return g}function rn(h,g,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,g),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
72
72
|
|
|
73
|
-
`+h.getShaderInfoLog(G));return G}function vn(h){return
|
|
73
|
+
`+h.getShaderInfoLog(G));return G}function vn(h){return Fe(h,me).map(function(g){return{index:fe(g,1,0),Y:Nt(g,2),label:te(g,3)!=null?fe(g,3,""):void 0,displayName:te(g,4)!=null?fe(g,4,""):void 0}})}function Yn(h){return{x:Nt(h,1),y:Nt(h,2),z:Nt(h,3),visibility:te(h,4)!=null?Nt(h,4):void 0}}function Mn(h,g){this.h=h,this.g=g,this.l=0}function cn(h,g,G){return Tn(h,g),typeof h.g.canvas.transferToImageBitmap=="function"?Promise.resolve(h.g.canvas.transferToImageBitmap()):G?Promise.resolve(h.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(h.g.canvas):(h.i===void 0&&(h.i=document.createElement("canvas")),new Promise(function(C){h.i.height=h.g.canvas.height,h.i.width=h.g.canvas.width,h.i.getContext("2d",{}).drawImage(h.g.canvas,0,0,h.g.canvas.width,h.g.canvas.height),C(h.i)}))}function Tn(h,g){var G=h.g;if(h.m===void 0){var C=rn(G,`
|
|
74
74
|
attribute vec2 aVertex;
|
|
75
75
|
attribute vec2 aTex;
|
|
76
76
|
varying vec2 vTex;
|
|
@@ -85,9 +85,9 @@
|
|
|
85
85
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
86
86
|
}`,1),Q=G.createProgram();if(G.attachShader(Q,C),G.attachShader(Q,M),G.linkProgram(Q),!G.getProgramParameter(Q,G.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
87
87
|
|
|
88
|
-
`+G.getProgramInfoLog(Q));C=h.m=Q,G.useProgram(C),M=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:M},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(M,0)}C=h.j,G.useProgram(h.m),G.canvas.width=g.width,G.canvas.height=g.height,G.viewport(0,0,g.width,g.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(g.glName),G.enableVertexAttribArray(C.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(C.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(C.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(C.I),G.disableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function Dn(h){this.g=h}var $n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function wn(h,g){return g+h}function Cn(h,g){window[h]=g}function p(h){var g=document.createElement("script");return g.setAttribute("src",h),g.setAttribute("crossorigin","anonymous"),new Promise(function(G){g.addEventListener("load",function(){G()},!1),g.addEventListener("error",function(){G()},!1),document.body.appendChild(g)})}function V(){return Tt(this,function h(){return de(h,function(g){switch(g.g){case 1:return g.m=2,_(g,WebAssembly.instantiate($n),4);case 4:g.g=3,g.m=0;break;case 2:return g.m=0,g.j=null,g.return(!1);case 3:return g.return(!0)}})})}function W(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||wn,typeof window=="object")var g=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")g=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=g,h.options){g=Y(Object.keys(h.options));for(var G=g.next();!G.done;G=g.next()){G=G.value;var C=h.options[G].default;C!==void 0&&(this.j[G]=typeof C=="function"?C():C)}}}o=W.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,g){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(g):h.g.files}function O(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X,R,w,N;return de(g,function(A){switch(A.g){case 1:return C=G,G.R?(M=E(G,G.j),_(A,V(),2)):A.return();case 2:if(Q=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=M.filter(function(K){return K.data!==void 0}),s=M.filter(function(K){return K.data===void 0}),X=Promise.all(ct.map(function(K){var rt=it(C,K.url);if(K.path!==void 0){var q=K.path;rt=rt.then(function(yt){return C.overrideFile(q,yt),Promise.resolve(yt)})}return rt})),R=Promise.all(s.map(function(K){return K.simd===void 0||K.simd&&Q||!K.simd&&!Q?p(C.locateFile(K.url,C.S)):Promise.resolve()})).then(function(){return Tt(C,function K(){var rt,q,yt=this;return de(K,function(Gt){if(Gt.g==1)return rt=window.createMediapipeSolutionsWasm,q=window.createMediapipeSolutionsPackedAssets,_(Gt,rt(q),2);yt.h=Gt.h,Gt.g=0})})}),w=function(){return Tt(C,function K(){var rt=this;return de(K,function(q){return rt.g.graph&&rt.g.graph.url?q=_(q,it(rt,rt.g.graph.url),0):(q.g=0,q=void 0),q})})}(),_(A,Promise.all([R,X,w]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return B=M.filter(function(K){return K.simd===void 0||K.simd&&Q||!K.simd&&!Q}).map(function(K){return C.locateFile(K.url,C.S)}),importScripts.apply(null,k(B)),_(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,tt=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(tt),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),N=G.l.getContext("webgl2",{}),!N&&(N=G.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=N,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function lt(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X;return de(g,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,_(R,it(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),M=Y(Object.keys(G.B)),Q=M.next();!Q.done;Q=M.next())B=Q.value,G.i.overrideFile(B,G.B[B]);if(G.B={},G.g.listeners)for(tt=Y(G.g.listeners),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,Kt(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}o.reset=function(){return Tt(this,function h(){var g=this;return de(h,function(G){g.i&&(g.i.reset(),g.m={},g.s={}),G.g=0})})},o.setOptions=function(h,g){var G=this;if(g=g||this.g.options){for(var C=[],M=[],Q={},B=Y(Object.keys(h)),tt=B.next();!tt.done;Q={K:Q.K,L:Q.L},tt=B.next()){var ct=tt.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],tt=g[ct],tt!==void 0&&(tt.onChange&&(Q.K=tt.onChange,Q.L=h[ct],C.push(function(s){return function(){return Tt(G,function X(){var R,w=this;return de(X,function(N){if(N.g==1)return _(N,s.K(s.L),2);R=N.h,R===!0&&(w.o=!0),N.g=0})})}}(Q))),tt.graphOptionXref&&(ct={valueNumber:tt.type===1?h[ct]:0,valueBoolean:tt.type===0?h[ct]:!1,valueString:tt.type===2?h[ct]:""},tt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),tt.graphOptionXref),ct),M.push(tt))))}(C.length!==0||M.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(M),this.u=(this.u===void 0?[]:this.u).concat(C))}};function z(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s;return de(g,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=Y(G.u),M=C.next();case 3:if(M.done){X.g=5;break}return Q=M.value,_(X,Q(),4);case 4:M=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(B=new G.h.GraphOptionChangeRequestList,tt=Y(G.A),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,B.push_back(s);G.i.changeOptions(B),B.delete(),G.A=void 0}G.o=!1,X.g=0}})})}o.initialize=function(){return Tt(this,function h(){var g=this;return de(h,function(G){return G.g==1?_(G,O(g),2):G.g!=3?_(G,lt(g),3):_(G,z(g),0)})})};function it(h,g){return Tt(h,function G(){var C=this,M,Q;return de(G,function(B){return g in C.F?B.return(C.F[g]):(M=C.locateFile(g,""),Q=fetch(M).then(function(tt){return tt.arrayBuffer()}),C.F[g]=Q,B.return(Q))})})}o.overrideFile=function(h,g){this.i?this.i.overrideFile(h,g):this.B[h]=g},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(h,g){return Tt(this,function G(){var C=this,M,Q,B,tt,ct,s,X,R,w;return de(G,function(N){switch(N.g){case 1:return C.g.inputs?(M=1e3*(g==null?performance.now():g),_(N,C.C,2)):N.return();case 2:return _(N,C.initialize(),3);case 3:for(Q=new C.h.PacketDataList,B=Y(Object.keys(h)),tt=B.next();!tt.done;tt=B.next())if(ct=tt.value,s=C.g.inputs[ct]){t:{var A=C,K=h[ct];switch(s.type){case"video":var rt=A.m[s.stream];if(rt||(rt=new Mn(A.h,A.D),A.m[s.stream]=rt),A=rt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&K instanceof HTMLVideoElement){var q=K.videoWidth;rt=K.videoHeight}else typeof HTMLImageElement<"u"&&K instanceof HTMLImageElement?(q=K.naturalWidth,rt=K.naturalHeight):(q=K.width,rt=K.height);rt={glName:A.l,width:q,height:rt},q=A.g,q.canvas.width=rt.width,q.canvas.height=rt.height,q.activeTexture(q.TEXTURE0),A.h.bindTexture2d(A.l),q.texImage2D(q.TEXTURE_2D,0,q.RGBA,q.RGBA,q.UNSIGNED_BYTE,K),A.h.bindTexture2d(0),A=rt;break t;case"detections":for(rt=A.m[s.stream],rt||(rt=new Dn(A.h),A.m[s.stream]=rt),A=rt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(K.length),rt=0;rt<K.length;++rt){q=K[rt];var yt=A.data,Gt=yt.setBoundingBox,Mt=rt,St=q.T,ft=new nn;Wt(ft,1,St.Z),Wt(ft,2,St.$),Wt(ft,3,St.height),Wt(ft,4,St.width),Wt(ft,5,St.rotation),Wt(ft,6,St.X);var Xt=St=new Xe;_e(Xt,1,te(ft,1)),_e(Xt,2,te(ft,2)),_e(Xt,3,te(ft,3)),_e(Xt,4,te(ft,4)),_e(Xt,5,te(ft,5));var Yt=te(ft,6);if(Yt!=null&&Yt!=null){Qt(Xt.g,48);var Ht=Xt.g,Ct=Yt;Yt=0>Ct,Ct=Math.abs(Ct);var l=Ct>>>0;for(Ct=Math.floor((Ct-l)/4294967296),Ct>>>=0,Yt&&(Ct=~Ct>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ct++,4294967295<Ct&&(Ct=0))),he=l,Ye=Ct,Yt=he,l=Ye;0<l||127<Yt;)Ht.push(Yt&127|128),Yt=(Yt>>>7|l<<25)>>>0,l>>>=7;Ht.push(Yt)}if(ot(ft,Xt),St=je(St),Gt.call(yt,Mt,St),q.O)for(yt=0;yt<q.O.length;++yt)ft=q.O[yt],Xt=!!ft.visibility,Gt=A.data,Mt=Gt.addNormalizedLandmark,St=rt,ft=Object.assign(Object.assign({},ft),{visibility:Xt?ft.visibility:0}),Xt=new fn,Wt(Xt,1,ft.x),Wt(Xt,2,ft.y),Wt(Xt,3,ft.z),ft.visibility&&Wt(Xt,4,ft.visibility),Ht=ft=new Xe,_e(Ht,1,te(Xt,1)),_e(Ht,2,te(Xt,2)),_e(Ht,3,te(Xt,3)),_e(Ht,4,te(Xt,4)),_e(Ht,5,te(Xt,5)),ot(Xt,Ht),ft=je(ft),Mt.call(Gt,St,ft);if(q.M)for(yt=0;yt<q.M.length;++yt){if(Gt=A.data,Mt=Gt.addClassification,St=rt,ft=q.M[yt],Xt=new me,Wt(Xt,2,ft.Y),ft.index&&Wt(Xt,1,ft.index),ft.label&&Wt(Xt,3,ft.label),ft.displayName&&Wt(Xt,4,ft.displayName),Ht=ft=new Xe,l=te(Xt,1),l!=null&&l!=null)if(Qt(Ht.g,8),Yt=Ht.g,0<=l)Qt(Yt,l);else{for(Ct=0;9>Ct;Ct++)Yt.push(l&127|128),l>>=7;Yt.push(1)}_e(Ht,2,te(Xt,2)),Yt=te(Xt,3),Yt!=null&&(Yt=xn(Yt),Qt(Ht.g,26),Qt(Ht.g,Yt.length),Pt(Ht,Ht.g.end()),Pt(Ht,Yt)),Yt=te(Xt,4),Yt!=null&&(Yt=xn(Yt),Qt(Ht.g,34),Qt(Ht.g,Yt.length),Pt(Ht,Ht.g.end()),Pt(Ht,Yt)),ot(Xt,Ht),ft=je(ft),Mt.call(Gt,St,ft)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":Q.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:M}));break;case"detections":w=X,w.stream=R,w.timestamp=M,Q.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(Q),_(N,C.C,4);case 4:Q.delete(),N.g=0}})})};function bt(h,g,G){return Tt(h,function C(){var M,Q,B,tt,ct,s,X=this,R,w,N,A,K,rt,q,yt;return de(C,function(Gt){switch(Gt.g){case 1:if(!G)return Gt.return(g);for(M={},Q=0,B=Y(Object.keys(G)),tt=B.next();!tt.done;tt=B.next())ct=tt.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&g[s.stream]!==void 0&&++Q;1<Q&&(X.G=!1),R=Y(Object.keys(G)),tt=R.next();case 2:if(tt.done){Gt.g=4;break}if(w=tt.value,N=G[w],typeof N=="string")return q=M,yt=w,_(Gt,It(X,w,g[N]),14);if(A=g[N.stream],N.type==="detection_list"){if(A){for(var Mt=A.getRectList(),St=A.getLandmarksList(),ft=A.getClassificationsList(),Xt=[],Yt=0;Yt<Mt.size();++Yt){var Ht=Mt.get(Yt);t:{var Ct=new nn;for(Ht=new Ze(Ht);Ce(Ht);)switch(Ht.i){case 13:var l=zt(Ht);Wt(Ct,1,l);break;case 21:l=zt(Ht),Wt(Ct,2,l);break;case 29:l=zt(Ht),Wt(Ct,3,l);break;case 37:l=zt(Ht),Wt(Ct,4,l);break;case 45:l=zt(Ht),Wt(Ct,5,l);break;case 48:l=Ve(Ht.g),Wt(Ct,6,l);break;default:if(!at(Ct,Ht))break t}}Ct={Z:Nt(Ct,1),$:Nt(Ct,2),height:Nt(Ct,3),width:Nt(Ct,4),rotation:Nt(Ct,5,0),X:fe(Ct,6,0)},Ht=He(en(St.get(Yt)),fn).map(Yn);var v=ft.get(Yt);t:for(l=new qe,v=new Ze(v);Ce(v);)switch(v.i){case 10:l.addClassification(Ie(v,new me,Ne));break;default:if(!at(l,v))break t}Ct={T:Ct,O:Ht,M:vn(l)},Xt.push(Ct)}Mt=Xt}else Mt=[];M[w]=Mt,Gt.g=7;break}if(N.type==="proto_list"){if(A){for(Mt=Array(A.size()),St=0;St<A.size();St++)Mt[St]=A.get(St);A.delete()}else Mt=[];M[w]=Mt,Gt.g=7;break}if(A===void 0){Gt.g=3;break}if(N.type==="float_list"){M[w]=A,Gt.g=7;break}if(N.type==="proto"){M[w]=A,Gt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return K=X.s[w],K||(K=new Mn(X.h,X.D),X.s[w]=K),_(Gt,cn(K,A,X.G),13);case 13:rt=Gt.h,M[w]=rt;case 7:N.transform&&M[w]&&(M[w]=N.transform(M[w])),Gt.g=3;break;case 14:q[yt]=Gt.h;case 3:tt=R.next(),Gt.g=2;break;case 4:return Gt.return(M)}})})}function It(h,g,G){return Tt(h,function C(){var M=this,Q;return de(C,function(B){return typeof G=="number"||G instanceof Uint8Array||G instanceof M.h.Uint8BlobList?B.return(G):G instanceof M.h.Texture2dDataOut?(Q=M.s[g],Q||(Q=new Mn(M.h,M.D),M.s[g]=Q),B.return(cn(Q,G,M.G))):B.return(void 0)})})}function Kt(h,g){for(var G=g.name||"$",C=[].concat(k(g.wants)),M=new h.h.StringList,Q=Y(g.wants),B=Q.next();!B.done;B=Q.next())M.push_back(B.value);Q=h.h.PacketListener.implement({onResults:function(tt){for(var ct={},s=0;s<g.wants.length;++s)ct[C[s]]=tt.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,g.outs).then(function(R){R=X(R);for(var w=0;w<g.wants.length;++w){var N=ct[C[w]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(M,Q),M.delete()}o.onResults=function(h,g){this.listeners[g||"$"]=h},Re("Solution",W),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function kt(h){h=En(h);var g=h.getMesh();if(!g)return h;var G=new Float32Array(g.getVertexBufferList());g.getVertexBufferList=function(){return G};var C=new Uint32Array(g.getIndexBufferList());return g.getIndexBufferList=function(){return C},h}var qt={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(kt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(g){return He(en(g),fn).map(Yn)})}}}}],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"}}}},Et=[[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]],wt=[[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]],Ut=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ce=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(k(Et),k(wt),k(Ut),k(Dt),k(ce),k(pe));function ke(h){h=h||{},h=Object.assign(Object.assign({},qt),h),this.g=new W(h)}o=ke.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(h){this.g.onResults(h)},o.initialize=function(){return Tt(this,function h(){var g=this;return de(h,function(G){return _(G,g.g.initialize(),0)})})},o.reset=function(){this.g.reset()},o.send=function(h){return Tt(this,function g(){var G=this;return de(g,function(C){return _(C,G.g.send(h),0)})})},o.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",ke),Re("FACEMESH_LIPS",Et),Re("FACEMESH_LEFT_EYE",wt),Re("FACEMESH_LEFT_EYEBROW",Ut),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ce),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var g=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),M=[],Q=0;Q<G;Q++)M.push(Array(g));for(Q=0;Q<G;Q++)for(var B=0;B<g;B++){var tt=h.getLayout()===1?Q*g+B:B*G+Q;M[Q][B]=C[tt]}return M}),Re("VERSION","0.4.1633559619")}).call(gi);const Zi={};(function(){var o;function n(t){var u=0;return function(){return u<t.length?{done:!1,value:t[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,u,a){return t==Array.prototype||t==Object.prototype||(t[u]=a.value),t};function m(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<t.length;++u){var a=t[u];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var y=m(this);function I(t,u){if(u)t:{var a=y;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],u=u(b),u!=b&&u!=null&&r(a,t,{configurable:!0,writable:!0,value:u})}}I("Symbol",function(t){function u(L){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new a(b+(L||"")+"_"+S++,L)}function a(L,F){this.g=L,r(this,"description",{configurable:!0,writable:!0,value:F})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return u}),I("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<u.length;a++){var b=y[u[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return t});function H(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function Y(t){var u=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return u?u.call(t):{next:n(t)}}function k(t){if(!(t instanceof Array)){t=Y(t);for(var u,a=[];!(u=t.next()).done;)a.push(u.value);t=a}return t}var nt=typeof Object.create=="function"?Object.create:function(t){function u(){}return u.prototype=t,new u},P;if(typeof Object.setPrototypeOf=="function")P=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}P=st?function(t,u){if(t.__proto__=u,t.__proto__!==u)throw new TypeError(t+" is not extensible");return t}:null}var dt=P;function ht(t,u){if(t.prototype=nt(u.prototype),t.prototype.constructor=t,dt)dt(t,u);else for(var a in u)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(u,a);b&&Object.defineProperty(t,a,b)}else t[a]=u[a];t.ka=u.prototype}function Ft(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Ft.prototype.o=function(t){this.h=t};function At(t,u){t.j={V:u,X:!0},t.g=t.m||t.s}Ft.prototype.return=function(t){this.j={return:t},this.g=this.s};function _(t,u,a){return t.g=a,{value:u}}function Ee(t){this.g=new Ft,this.h=t}function an(t,u){Lt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},u,t.g.return):(t.g.return(u),$t(t))}function We(t,u,a,b){try{var S=u.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var L=S.value}catch(F){return t.g.i=null,At(t.g,F),$t(t)}return t.g.i=null,b.call(t.g,L),$t(t)}function $t(t){for(;t.g.g;)try{var u=t.h(t.g);if(u)return t.g.l=!1,{value:u.value,done:!1}}catch(a){t.g.h=void 0,At(t.g,a)}if(t.g.l=!1,t.g.j){if(u=t.g.j,t.g.j=null,u.X)throw u.V;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function An(t){this.next=function(u){return Lt(t.g),t.g.i?u=We(t,t.g.i.next,u,t.g.o):(t.g.o(u),u=$t(t)),u},this.throw=function(u){return Lt(t.g),t.g.i?u=We(t,t.g.i.throw,u,t.g.o):(At(t.g,u),u=$t(t)),u},this.return=function(u){return an(t,u)},this[Symbol.iterator]=function(){return this}}function de(t){function u(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function L(F){F.done?b(F.value):Promise.resolve(F.value).then(u,a).then(L,S)}L(t.next())})}function gt(t){return de(new An(new Ee(t)))}I("Promise",function(t){function u(F){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{F(U.resolve,U.reject)}catch(j){U.reject(j)}}function a(){this.g=null}function b(F){return F instanceof u?F:new u(function(U){U(F)})}if(t)return t;a.prototype.h=function(F){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(F)};var S=y.setTimeout;a.prototype.i=function(F){S(F,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var F=this.g;this.g=[];for(var U=0;U<F.length;++U){var j=F[U];F[U]=null;try{j()}catch(D){this.j(D)}}}this.g=null},a.prototype.j=function(F){this.i(function(){throw F})},u.prototype.j=function(){function F(D){return function($){j||(j=!0,D.call(U,$))}}var U=this,j=!1;return{resolve:F(this.D),reject:F(this.l)}},u.prototype.D=function(F){if(F===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(F instanceof u)this.G(F);else{t:switch(typeof F){case"object":var U=F!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(F):this.m(F)}},u.prototype.A=function(F){var U=void 0;try{U=F.then}catch(j){this.l(j);return}typeof U=="function"?this.H(U,F):this.m(F)},u.prototype.l=function(F){this.s(2,F)},u.prototype.m=function(F){this.s(1,F)},u.prototype.s=function(F,U){if(this.h!=0)throw Error("Cannot settle("+F+", "+U+"): Promise already settled in state"+this.h);this.h=F,this.i=U,this.h===2&&this.F(),this.B()},u.prototype.F=function(){var F=this;S(function(){if(F.C()){var U=y.console;typeof U<"u"&&U.error(F.i)}},1)},u.prototype.C=function(){if(this.o)return!1;var F=y.CustomEvent,U=y.Event,j=y.dispatchEvent;return typeof j>"u"?!0:(typeof F=="function"?F=new F("unhandledrejection",{cancelable:!0}):typeof U=="function"?F=new U("unhandledrejection",{cancelable:!0}):(F=y.document.createEvent("CustomEvent"),F.initCustomEvent("unhandledrejection",!1,!0,F)),F.promise=this,F.reason=this.i,j(F))},u.prototype.B=function(){if(this.g!=null){for(var F=0;F<this.g.length;++F)L.h(this.g[F]);this.g=null}};var L=new a;return u.prototype.G=function(F){var U=this.j();F.K(U.resolve,U.reject)},u.prototype.H=function(F,U){var j=this.j();try{F.call(U,j.resolve,j.reject)}catch(D){j.reject(D)}},u.prototype.then=function(F,U){function j(mt,pt){return typeof mt=="function"?function(vt){try{D(mt(vt))}catch(Zt){$(Zt)}}:pt}var D,$,ut=new u(function(mt,pt){D=mt,$=pt});return this.K(j(F,D),j(U,$)),ut},u.prototype.catch=function(F){return this.then(void 0,F)},u.prototype.K=function(F,U){function j(){switch(D.h){case 1:F(D.i);break;case 2:U(D.i);break;default:throw Error("Unexpected state: "+D.h)}}var D=this;this.g==null?L.h(j):this.g.push(j),this.o=!0},u.resolve=b,u.reject=function(F){return new u(function(U,j){j(F)})},u.race=function(F){return new u(function(U,j){for(var D=Y(F),$=D.next();!$.done;$=D.next())b($.value).K(U,j)})},u.all=function(F){var U=Y(F),j=U.next();return j.done?b([]):new u(function(D,$){function ut(vt){return function(Zt){mt[vt]=Zt,pt--,pt==0&&D(mt)}}var mt=[],pt=0;do mt.push(void 0),pt++,b(j.value).K(ut(mt.length-1),$),j=U.next();while(!j.done)})},u});function pn(t,u){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var L=a++;return{value:u(L,t[L]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var jn=typeof Object.assign=="function"?Object.assign:function(t,u){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};I("Object.assign",function(t){return t||jn}),I("Object.is",function(t){return t||function(u,a){return u===a?u!==0||1/u===1/a:u!==u&&a!==a}}),I("Array.prototype.includes",function(t){return t||function(u,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var L=b[a];if(L===u||Object.is(L,u))return!0}return!1}}),I("String.prototype.includes",function(t){return t||function(u,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,a||0)!==-1}}),I("Array.prototype.keys",function(t){return t||function(){return pn(this,function(u){return u})}});var Re=this||self;function Jt(t,u){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||u===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=u}function Te(t){throw t}function on(t,u){Te(Error("Invalid wire type: "+t+" (at position "+u+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Hn(t,u){return u=String.fromCharCode.apply(null,u),t==null?u:t+u}var xn,Nn=typeof TextDecoder<"u",dn,bn=typeof TextEncoder<"u";function kn(t){if(bn)t=(dn||(dn=new TextEncoder)).encode(t);else{var u=void 0;u=u===void 0?!1:u;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var L=t.charCodeAt(S);if(128>L)b[a++]=L;else{if(2048>L)b[a++]=L>>6|192;else{if(55296<=L&&57343>=L){if(56319>=L&&S<t.length){var F=t.charCodeAt(++S);if(56320<=F&&57343>=F){L=1024*(L-55296)+F-56320+65536,b[a++]=L>>18|240,b[a++]=L>>12&63|128,b[a++]=L>>6&63|128,b[a++]=L&63|128;continue}else S--}if(u)throw Error("Found an unpaired surrogate");L=65533}b[a++]=L>>12|224,b[a++]=L>>6&63|128}b[a++]=L&63|128}}t=b.subarray(0,a)}return t}var Fn={},Pe=null;function Ae(t){var u;u===void 0&&(u=0),he(),u=Fn[u];for(var a=Array(Math.floor(t.length/3)),b=u[64]||"",S=0,L=0;S<t.length-2;S+=3){var F=t[S],U=t[S+1],j=t[S+2],D=u[F>>2];F=u[(F&3)<<4|U>>4],U=u[(U&15)<<2|j>>6],j=u[j&63],a[L++]=D+F+U+j}switch(D=0,j=b,t.length-S){case 2:D=t[S+1],j=u[(D&15)<<2]||b;case 1:t=t[S],a[L]=u[t>>2]+u[(t&3)<<4|D>>4]+j+b}return a.join("")}function In(t){var u=t.length,a=3*u/4;a%3?a=Math.floor(a):"=.".indexOf(t[u-1])!=-1&&(a="=.".indexOf(t[u-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Vn(t,function(L){b[S++]=L}),b.subarray(0,S)}function Vn(t,u){function a(j){for(;b<t.length;){var D=t.charAt(b++),$=Pe[D];if($!=null)return $;if(!/^[\s\xa0]*$/.test(D))throw Error("Unknown base64 encoding at char: "+D)}return j}he();for(var b=0;;){var S=a(-1),L=a(0),F=a(64),U=a(64);if(U===64&&S===-1)break;u(S<<2|L>>4),F!=64&&(u(L<<4&240|F>>2),U!=64&&u(F<<6&192|U))}}function he(){if(!Pe){Pe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(u[a].split(""));Fn[a]=b;for(var S=0;S<b.length;S++){var L=b[S];Pe[L]===void 0&&(Pe[L]=S)}}}}var Ye=typeof Uint8Array=="function",Oe;function ne(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function sn(t,u,a){return u===a?Oe||(Oe=new Uint8Array(0)):Ve?t.slice(u,a):new Uint8Array(t.subarray(u,a))}var Me=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return In(t);if(t.constructor===ne){if(t.g==null)var u=Oe||(Oe=new Uint8Array(0));else{u=Uint8Array;var a=t.g;a=a==null||Ye&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?In(a):null,t=t.g=a,u=new u(t)}return u}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ce(t,u){u=u===void 0?{}:u,u=u.v===void 0?!1:u.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=u,t&&Bt(this,t)}function Bt(t,u){t.h=Ze(u),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function Ie(t){for(var u=128,a=0,b=0,S=0;4>S&&128<=u;S++)u=t.h[t.g++],a|=(u&127)<<7*S;if(128<=u&&(u=t.h[t.g++],a|=(u&127)<<28,b|=(u&127)>>4),128<=u)for(S=0;5>S&&128<=u;S++)u=t.h[t.g++],b|=(u&127)<<7*S+3;if(128>u)return t=a>>>0,u=b>>>0,(b=u&2147483648)&&(t=~t+1>>>0,u=~u>>>0,t==0&&(u=u+1>>>0)),t=4294967296*u+(t>>>0),b?-t:t;t.j=!0,Xn()}function zt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var u=t.h,a=u[t.g],b=a&127;return 128>a?(t.g+=1,zt(t),b):(a=u[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,zt(t),b):(a=u[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,zt(t),b):(a=u[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,zt(t),b):(a=u[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,zt(t),b>>>0):(t.g+=5,128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]?(t.j=!0,Xn(),b):(zt(t),b))))))}function we(t){var u=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,zt(t),(u<<0|a<<8|b<<16|S<<24)>>>0}Ce.prototype.m=function(){var t=we(this),u=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*u:a==0?u*Math.pow(2,-149)*t:u*Math.pow(2,a-150)*(t+Math.pow(2,23))};var $e=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Pt(t,u){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=u}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,u=this.h;return this.h=0,sn(t,0,u)};function je(t,u){for(;127<u;)Pt(t,u&127|128),u>>>=7;Pt(t,u)}function _e(t){var u={},a=u.O===void 0?!1:u.O;this.m={v:u.v===void 0?!1:u.v},this.O=a,u=this.m,$e.length?(a=$e.pop(),u&&(a.v=u.v),t&&Bt(a,t),t=a):t=new Ce(t,u),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}_e.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Se(t){var u=t.g;if((u=u.g==u.i)||(u=t.j)||(u=t.g,u=u.j||0>u.g||u.g>u.i),u)return!1;t.l=t.g.g;var a=ye(t.g);return u=a>>>3,a&=7,0<=a&&5>=a?(t.i=u,t.h=a,!0):(t.j=!0,on(a,t.l),!1)}function Wn(t){switch(t.h){case 0:if(t.h!=0)Wn(t);else t:{t=t.g;for(var u=t.g,a=0;10>a;a++){if((t.h[u]&128)===0){t.g=u+1,zt(t);break t}u++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,zt(t);break;case 2:t.h!=2?Wn(t):(u=ye(t.g),t=t.g,t.g+=u,zt(t));break;case 5:t=t.g,t.g+=4,zt(t);break;case 3:u=t.i;do{if(!Se(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=u&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,on(t.h,t.l)}}function ln(t,u,a){var b=t.g.i,S=ye(t.g),L=t.g.g+S;if(t.g.i=L,a(u,t),a=L-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=L,t.g.i=b,u}var Qe=[];function un(){this.h=[],this.i=0,this.g=new Xe}function ve(t,u){u.length!==0&&(t.h.push(u),t.i+=u.length)}function Le(t,u,a){je(t.g,8*u+2),je(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function re(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function De(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function te(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Ye&&t!=null&&t instanceof Uint8Array)return Ae(t);if(t instanceof ne){if(t.g==null)t="";else{var u=t.g;u=u==null||typeof u=="string"?u:Ye&&u instanceof Uint8Array?Ae(u):null,t=t.g=u}return t}}return t}function Ot(t,u){if(t!=null)return Array.isArray(t)||De(t)?hn(t,u):u(t)}function hn(t,u){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Ot(t[b],u);if(u=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,u=(S==null?0:S)&1}return u&&re(a),a}S={};for(a in t)S[a]=Ot(t[a],u);return S}function fe(t){return t=te(t),Array.isArray(t)?hn(t,fe):t}var Nt;function Wt(t,u,a){var b=Nt;Nt=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],De(b))){this.j=t-this.i,this.h=b;break t}u!==void 0&&-1<u?(this.j=Math.max(u,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(u=0;u<a.length;u++)t=a[u],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&re(b):this.u[t]=ie):(He(this),(b=this.h[t])?Array.isArray(b)&&re(b):this.h[t]=ie)}var ie=Object.freeze(re([]));function He(t){var u=t.j+t.i;t.u[u]||(t.h=t.u[u]={})}function ee(t,u,a){return u===-1?null:(a===void 0?0:a)||u>=t.j?t.h?t.h[u]:void 0:t.u[u+t.i]}function oe(t,u,a){a=a===void 0?!1:a;var b=ee(t,u,a);return b==null&&(b=ie),b===ie&&(b=re(b.slice()),at(t,u,b,a)),b}function et(t,u){var a=oe(t,u);if(t.l||(t.l={}),!t.l[u]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[u]=!0}return a}function ot(t,u,a){return t=ee(t,u),t=t==null?t:+t,t==null?a===void 0?0:a:t}function at(t,u,a,b){(b===void 0?0:b)||u>=t.j?(He(t),t.h[u]=a):t.u[u+t.i]=a}function _t(t,u,a,b){a!==b?at(t,u,a):at(t,u,void 0,!1)}function ae(t,u,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=ee(t,a,!1);return S==null?b:(u=new u(S),t.g[a]=u)}function ue(t,u,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=oe(t,a,!1);b=[];for(var L=0;L<S.length;L++)b[L]=new u(S[L]);t.g[a]=b}return b}function Tt(t,u,a,b,S){var L=ue(t,b,u);a=a||new b,t=oe(t,u),S!=null?(L.splice(S,0,a),t.splice(S,0,a.u)):(L.push(a),t.push(a.u))}Wt.prototype.toJSON=function(){return hn(this.u,fe)},Wt.prototype.toString=function(){return this.u.toString()};function me(t,u){return t=ee(t,u),t==null?0:t}function Ne(t,u){return t=ee(t,u),t==null?"":t}function qe(t,u){if(t=t.m){ve(u,u.g.end());for(var a=0;a<t.length;a++)ve(u,t[a])}}var tn=Symbol();function fn(t,u,a){return t[tn]||(t[tn]=function(b,S){return u(b,S,a)})}function yn(t){var u=t[tn];if(!u){var a=t[nn]||(t[nn]=t());u=function(b,S){return Je(b,S,a)},t[tn]=u}return u}function Fe(t){var u=t.da;if(u)return yn(u);if(u=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,u,a)}}function en(t){var u=Fe(t),a=t.W,b=t.ea;return u?function(S,L){return b(S,L,a,u)}:function(S,L){return b(S,L,a)}}function zn(t){var u=t[0];switch(t.length){case 2:var a=t[1];return function(pt,vt,Zt){return u(pt,vt,Zt,a)};case 3:var b=t[1],S=yn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,b,S)};case 4:var L=t[1],F=t[3],U=yn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,L,U,F)};case 5:var j=t[1],D=fn(j,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,j,D)};case 6:var $=t[1],ut=t[5],mt=fn($,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,$,mt,ut)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var nn=Symbol();function Je(t,u,a){for(;Se(u)&&u.h!=4;){var b=u.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=zn(S));else{var L=a[0];L&&(L=L[b])&&(S=a[b]=en(L))}S&&S(u,t,b)||(S=u,b=t,L=S.l,Wn(S),S.O||(S=sn(S.g.h,L,S.g.g),(L=b.m)?L.push(S):b.m=[S]))}return t}function Zn(t,u){var a=new un;if(u(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,L=u=0;L<S;L++){var F=b[L];F.length!==0&&(t.set(F,u),u+=F.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),u),b.h=0),a.h=[t],a=t}return a}function Sn(t,u,a){if(Qe.length){var b=Qe.pop();t&&(Bt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new _e(t);try{var S=new u;return Je(S,t,a[nn]||(a[nn]=a()))}finally{u=t.g,u.h=null,u.l=0,u.i=0,u.g=0,u.j=!1,u.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Qe.length&&Qe.push(t)}}function Be(t,u,a){if(u=ee(u,a),u!=null){je(t.g,8*a+5),t=t.g;var b=u;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Me=Qt=0:(Qt=0,Me=2147483648):isNaN(b)?(Qt=0,Me=2147483647):34028234663852886e22<b?(Qt=0,Me=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Me=(a<<31|b)>>>0):(u=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-u),b=Math.round(8388608*b),16777216<=b&&++u,Qt=0,Me=(a<<31|u+127<<23|b&8388607)>>>0),a=Me,Pt(t,a>>>0&255),Pt(t,a>>>8&255),Pt(t,a>>>16&255),Pt(t,a>>>24&255)}}function En(t,u,a){if(t.h!==1)return!1;var b=t.g;t=we(b);var S=we(b);b=2*(S>>31)+1;var L=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(u,a,L==2047?t?NaN:1/0*b:L==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,L-1075)*(t+4503599627370496),0),!0}function rn(t,u,a){return t.h!==5?!1:(at(u,a,t.g.m()),!0)}function vn(t,u,a){if(t.h!==5&&t.h!==2)return!1;if(u=oe(u,a),t.h==2){a=Ce.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)u.push(a.call(t.g))}else u.push(t.g.m());return!0}function Yn(t,u,a){return t.h!==5?!1:(t=t.g.m(),_t(u,a,t,0),!0)}function Mn(t,u,a){return t.h!==0?!1:(at(u,a,Ie(t.g)),!0)}function cn(t,u,a){return t.h!==0?!1:(at(u,a,ye(t.g)),!0)}function Tn(t,u,a){return t.h!==0?!1:(t=ye(t.g),_t(u,a,t,0),!0)}function Dn(t,u,a){return t.h!==0?!1:(t=!!ye(t.g),_t(u,a,t,!1),!0)}function $n(t,u,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,zt(t),t=t.h;var L;if(Nn)(L=xn)||(L=xn=new TextDecoder("utf-8",{fatal:!1})),L=L.decode(t.subarray(S,S+b));else{b=S+b;for(var F=[],U=null,j,D,$;S<b;)j=t[S++],128>j?F.push(j):224>j?S>=b?F.push(65533):(D=t[S++],194>j||(D&192)!==128?(S--,F.push(65533)):F.push((j&31)<<6|D&63)):240>j?S>=b-1?F.push(65533):(D=t[S++],(D&192)!==128||j===224&&160>D||j===237&&160<=D||((L=t[S++])&192)!==128?(S--,F.push(65533)):F.push((j&15)<<12|(D&63)<<6|L&63)):244>=j?S>=b-2?F.push(65533):(D=t[S++],(D&192)!==128||(j<<28)+(D-144)>>30!==0||((L=t[S++])&192)!==128||(($=t[S++])&192)!==128?(S--,F.push(65533)):(j=(j&7)<<18|(D&63)<<12|(L&63)<<6|$&63,j-=65536,F.push((j>>10&1023)+55296,(j&1023)+56320))):F.push(65533),8192<=F.length&&(U=Hn(U,F),F.length=0);L=Hn(U,F)}return at(u,a,L),!0}function wn(t,u,a,b,S){return t.h!==2?!1:(t=ln(t,new b,S),u.g||(u.g={}),b=t&&t.u,u.g[a]=t,at(u,a,b,!1),!0)}function Cn(t,u,a,b,S){return t.h!==2?!1:(t=ln(t,new b,S),Tt(u,a,t,b,void 0),!0)}function p(t,u,a){return t.h!==0?!1:(at(u,a,Ie(t.g)),!0)}function V(t){Wt.call(this,t)}ht(V,Wt);function W(){return{1:cn,2:rn,3:$n,4:$n}}function E(t,u){var a=ee(t,1);if(a!=null&&a!=null){je(u.g,8);var b=u.g;if(0<=a)je(b,a);else{for(var S=0;9>S;S++)Pt(b,a&127|128),a>>=7;Pt(b,1)}}Be(u,t,2),b=ee(t,3),b!=null&&Le(u,3,kn(b)),b=ee(t,4),b!=null&&Le(u,4,kn(b)),qe(t,u)}function O(t){Wt.call(this,t,-1,z)}ht(O,Wt),O.prototype.addClassification=function(t,u){return Tt(this,1,t,V,u),this};function lt(){return{1:[Cn,V,W]}}var z=[1];function it(t){Wt.call(this,t)}ht(it,Wt);function bt(){return{1:rn,2:rn,3:rn,4:rn,5:rn}}function It(t,u){Be(u,t,1),Be(u,t,2),Be(u,t,3),Be(u,t,4),Be(u,t,5),qe(t,u)}function Kt(t){Wt.call(this,t,-1,qt)}ht(Kt,Wt);function kt(){return{1:[Cn,it,bt]}}var qt=[1];function Et(t){Wt.call(this,t)}ht(Et,Wt);function wt(){return{1:rn,2:rn,3:rn,4:rn,5:rn,6:Mn}}function Ut(t,u){Be(u,t,1),Be(u,t,2),Be(u,t,3),Be(u,t,4),Be(u,t,5);var a=ee(t,6);if(a!=null&&a!=null){je(u.g,48);var b=u.g,S=a;a=0>S,S=Math.abs(S);var L=S>>>0;for(S=Math.floor((S-L)/4294967296),S>>>=0,a&&(S=~S>>>0,L=(~L>>>0)+1,4294967295<L&&(L=0,S++,4294967295<S&&(S=0))),Me=L,Qt=S,a=Me,L=Qt;0<L||127<a;)Pt(b,a&127|128),a=(a>>>7|L<<25)>>>0,L>>>=7;Pt(b,a)}qe(t,u)}function Dt(t){Wt.call(this,t,-1,ke)}ht(Dt,Wt);function ce(){return{1:p,2:p,3:vn,4:[wn,pe,ge],5:cn,6:cn,7:vn,8:vn,9:vn}}function pe(t){Wt.call(this,t)}ht(pe,Wt);function ge(){return{1:rn,2:rn,3:rn}}var ke=[3,7,8,9];function h(t){Wt.call(this,t)}ht(h,Wt);function g(){return{1:Yn,2:Yn,3:Yn}}function G(t){Wt.call(this,t)}ht(G,Wt);function C(){return{1:Yn,2:Yn,3:Yn}}function M(t){Wt.call(this,t)}ht(M,Wt);function Q(){return{1:Tn,2:[wn,G,C],3:[wn,h,g],4:Dn}}function B(t){Wt.call(this,t,-1,ct)}ht(B,Wt);function tt(){return{1:Tn,2:[Cn,M,Q],3:Yn,4:vn,5:vn,6:vn}}var ct=[2,4,5,6];function s(t){Wt.call(this,t,-1,R)}ht(s,Wt);function X(){return{1:Tn,2:[Cn,B,tt],3:[wn,Dt,ce],4:En,5:vn,6:vn}}var R=[2,5,6];function w(t,u,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,u),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
88
|
+
`+G.getProgramInfoLog(Q));C=h.m=Q,G.useProgram(C),M=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:M},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(M,0)}C=h.j,G.useProgram(h.m),G.canvas.width=g.width,G.canvas.height=g.height,G.viewport(0,0,g.width,g.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(g.glName),G.enableVertexAttribArray(C.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(C.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(C.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(C.I),G.disableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function Dn(h){this.g=h}var $n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function wn(h,g){return g+h}function Cn(h,g){window[h]=g}function p(h){var g=document.createElement("script");return g.setAttribute("src",h),g.setAttribute("crossorigin","anonymous"),new Promise(function(G){g.addEventListener("load",function(){G()},!1),g.addEventListener("error",function(){G()},!1),document.body.appendChild(g)})}function V(){return Tt(this,function h(){return de(h,function(g){switch(g.g){case 1:return g.m=2,_(g,WebAssembly.instantiate($n),4);case 4:g.g=3,g.m=0;break;case 2:return g.m=0,g.j=null,g.return(!1);case 3:return g.return(!0)}})})}function W(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||wn,typeof window=="object")var g=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")g=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=g,h.options){g=Y(Object.keys(h.options));for(var G=g.next();!G.done;G=g.next()){G=G.value;var C=h.options[G].default;C!==void 0&&(this.j[G]=typeof C=="function"?C():C)}}}o=W.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,g){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(g):h.g.files}function P(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X,R,w,N;return de(g,function(A){switch(A.g){case 1:return C=G,G.R?(M=E(G,G.j),_(A,V(),2)):A.return();case 2:if(Q=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=M.filter(function(U){return U.data!==void 0}),s=M.filter(function(U){return U.data===void 0}),X=Promise.all(ct.map(function(U){var rt=it(C,U.url);if(U.path!==void 0){var q=U.path;rt=rt.then(function(yt){return C.overrideFile(q,yt),Promise.resolve(yt)})}return rt})),R=Promise.all(s.map(function(U){return U.simd===void 0||U.simd&&Q||!U.simd&&!Q?p(C.locateFile(U.url,C.S)):Promise.resolve()})).then(function(){return Tt(C,function U(){var rt,q,yt=this;return de(U,function(Gt){if(Gt.g==1)return rt=window.createMediapipeSolutionsWasm,q=window.createMediapipeSolutionsPackedAssets,_(Gt,rt(q),2);yt.h=Gt.h,Gt.g=0})})}),w=function(){return Tt(C,function U(){var rt=this;return de(U,function(q){return rt.g.graph&&rt.g.graph.url?q=_(q,it(rt,rt.g.graph.url),0):(q.g=0,q=void 0),q})})}(),_(A,Promise.all([R,X,w]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return B=M.filter(function(U){return U.simd===void 0||U.simd&&Q||!U.simd&&!Q}).map(function(U){return C.locateFile(U.url,C.S)}),importScripts.apply(null,k(B)),_(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,tt=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(tt),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),N=G.l.getContext("webgl2",{}),!N&&(N=G.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=N,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function lt(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X;return de(g,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,_(R,it(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),M=Y(Object.keys(G.B)),Q=M.next();!Q.done;Q=M.next())B=Q.value,G.i.overrideFile(B,G.B[B]);if(G.B={},G.g.listeners)for(tt=Y(G.g.listeners),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}o.reset=function(){return Tt(this,function h(){var g=this;return de(h,function(G){g.i&&(g.i.reset(),g.m={},g.s={}),G.g=0})})},o.setOptions=function(h,g){var G=this;if(g=g||this.g.options){for(var C=[],M=[],Q={},B=Y(Object.keys(h)),tt=B.next();!tt.done;Q={K:Q.K,L:Q.L},tt=B.next()){var ct=tt.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],tt=g[ct],tt!==void 0&&(tt.onChange&&(Q.K=tt.onChange,Q.L=h[ct],C.push(function(s){return function(){return Tt(G,function X(){var R,w=this;return de(X,function(N){if(N.g==1)return _(N,s.K(s.L),2);R=N.h,R===!0&&(w.o=!0),N.g=0})})}}(Q))),tt.graphOptionXref&&(ct={valueNumber:tt.type===1?h[ct]:0,valueBoolean:tt.type===0?h[ct]:!1,valueString:tt.type===2?h[ct]:""},tt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),tt.graphOptionXref),ct),M.push(tt))))}(C.length!==0||M.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(M),this.u=(this.u===void 0?[]:this.u).concat(C))}};function z(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s;return de(g,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=Y(G.u),M=C.next();case 3:if(M.done){X.g=5;break}return Q=M.value,_(X,Q(),4);case 4:M=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(B=new G.h.GraphOptionChangeRequestList,tt=Y(G.A),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,B.push_back(s);G.i.changeOptions(B),B.delete(),G.A=void 0}G.o=!1,X.g=0}})})}o.initialize=function(){return Tt(this,function h(){var g=this;return de(h,function(G){return G.g==1?_(G,P(g),2):G.g!=3?_(G,lt(g),3):_(G,z(g),0)})})};function it(h,g){return Tt(h,function G(){var C=this,M,Q;return de(G,function(B){return g in C.F?B.return(C.F[g]):(M=C.locateFile(g,""),Q=fetch(M).then(function(tt){return tt.arrayBuffer()}),C.F[g]=Q,B.return(Q))})})}o.overrideFile=function(h,g){this.i?this.i.overrideFile(h,g):this.B[h]=g},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(h,g){return Tt(this,function G(){var C=this,M,Q,B,tt,ct,s,X,R,w;return de(G,function(N){switch(N.g){case 1:return C.g.inputs?(M=1e3*(g==null?performance.now():g),_(N,C.C,2)):N.return();case 2:return _(N,C.initialize(),3);case 3:for(Q=new C.h.PacketDataList,B=Y(Object.keys(h)),tt=B.next();!tt.done;tt=B.next())if(ct=tt.value,s=C.g.inputs[ct]){t:{var A=C,U=h[ct];switch(s.type){case"video":var rt=A.m[s.stream];if(rt||(rt=new Mn(A.h,A.D),A.m[s.stream]=rt),A=rt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement){var q=U.videoWidth;rt=U.videoHeight}else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(q=U.naturalWidth,rt=U.naturalHeight):(q=U.width,rt=U.height);rt={glName:A.l,width:q,height:rt},q=A.g,q.canvas.width=rt.width,q.canvas.height=rt.height,q.activeTexture(q.TEXTURE0),A.h.bindTexture2d(A.l),q.texImage2D(q.TEXTURE_2D,0,q.RGBA,q.RGBA,q.UNSIGNED_BYTE,U),A.h.bindTexture2d(0),A=rt;break t;case"detections":for(rt=A.m[s.stream],rt||(rt=new Dn(A.h),A.m[s.stream]=rt),A=rt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(U.length),rt=0;rt<U.length;++rt){q=U[rt];var yt=A.data,Gt=yt.setBoundingBox,Mt=rt,St=q.T,ft=new nn;Wt(ft,1,St.Z),Wt(ft,2,St.$),Wt(ft,3,St.height),Wt(ft,4,St.width),Wt(ft,5,St.rotation),Wt(ft,6,St.X);var Xt=St=new Xe;_e(Xt,1,te(ft,1)),_e(Xt,2,te(ft,2)),_e(Xt,3,te(ft,3)),_e(Xt,4,te(ft,4)),_e(Xt,5,te(ft,5));var Yt=te(ft,6);if(Yt!=null&&Yt!=null){Qt(Xt.g,48);var Ft=Xt.g,Ct=Yt;Yt=0>Ct,Ct=Math.abs(Ct);var l=Ct>>>0;for(Ct=Math.floor((Ct-l)/4294967296),Ct>>>=0,Yt&&(Ct=~Ct>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ct++,4294967295<Ct&&(Ct=0))),he=l,Ye=Ct,Yt=he,l=Ye;0<l||127<Yt;)Ft.push(Yt&127|128),Yt=(Yt>>>7|l<<25)>>>0,l>>>=7;Ft.push(Yt)}if(ot(ft,Xt),St=je(St),Gt.call(yt,Mt,St),q.O)for(yt=0;yt<q.O.length;++yt)ft=q.O[yt],Xt=!!ft.visibility,Gt=A.data,Mt=Gt.addNormalizedLandmark,St=rt,ft=Object.assign(Object.assign({},ft),{visibility:Xt?ft.visibility:0}),Xt=new fn,Wt(Xt,1,ft.x),Wt(Xt,2,ft.y),Wt(Xt,3,ft.z),ft.visibility&&Wt(Xt,4,ft.visibility),Ft=ft=new Xe,_e(Ft,1,te(Xt,1)),_e(Ft,2,te(Xt,2)),_e(Ft,3,te(Xt,3)),_e(Ft,4,te(Xt,4)),_e(Ft,5,te(Xt,5)),ot(Xt,Ft),ft=je(ft),Mt.call(Gt,St,ft);if(q.M)for(yt=0;yt<q.M.length;++yt){if(Gt=A.data,Mt=Gt.addClassification,St=rt,ft=q.M[yt],Xt=new me,Wt(Xt,2,ft.Y),ft.index&&Wt(Xt,1,ft.index),ft.label&&Wt(Xt,3,ft.label),ft.displayName&&Wt(Xt,4,ft.displayName),Ft=ft=new Xe,l=te(Xt,1),l!=null&&l!=null)if(Qt(Ft.g,8),Yt=Ft.g,0<=l)Qt(Yt,l);else{for(Ct=0;9>Ct;Ct++)Yt.push(l&127|128),l>>=7;Yt.push(1)}_e(Ft,2,te(Xt,2)),Yt=te(Xt,3),Yt!=null&&(Yt=xn(Yt),Qt(Ft.g,26),Qt(Ft.g,Yt.length),Ot(Ft,Ft.g.end()),Ot(Ft,Yt)),Yt=te(Xt,4),Yt!=null&&(Yt=xn(Yt),Qt(Ft.g,34),Qt(Ft.g,Yt.length),Ot(Ft,Ft.g.end()),Ot(Ft,Yt)),ot(Xt,Ft),ft=je(ft),Mt.call(Gt,St,ft)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":Q.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:M}));break;case"detections":w=X,w.stream=R,w.timestamp=M,Q.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(Q),_(N,C.C,4);case 4:Q.delete(),N.g=0}})})};function bt(h,g,G){return Tt(h,function C(){var M,Q,B,tt,ct,s,X=this,R,w,N,A,U,rt,q,yt;return de(C,function(Gt){switch(Gt.g){case 1:if(!G)return Gt.return(g);for(M={},Q=0,B=Y(Object.keys(G)),tt=B.next();!tt.done;tt=B.next())ct=tt.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&g[s.stream]!==void 0&&++Q;1<Q&&(X.G=!1),R=Y(Object.keys(G)),tt=R.next();case 2:if(tt.done){Gt.g=4;break}if(w=tt.value,N=G[w],typeof N=="string")return q=M,yt=w,_(Gt,It(X,w,g[N]),14);if(A=g[N.stream],N.type==="detection_list"){if(A){for(var Mt=A.getRectList(),St=A.getLandmarksList(),ft=A.getClassificationsList(),Xt=[],Yt=0;Yt<Mt.size();++Yt){var Ft=Mt.get(Yt);t:{var Ct=new nn;for(Ft=new Ze(Ft);Ce(Ft);)switch(Ft.i){case 13:var l=zt(Ft);Wt(Ct,1,l);break;case 21:l=zt(Ft),Wt(Ct,2,l);break;case 29:l=zt(Ft),Wt(Ct,3,l);break;case 37:l=zt(Ft),Wt(Ct,4,l);break;case 45:l=zt(Ft),Wt(Ct,5,l);break;case 48:l=Ve(Ft.g),Wt(Ct,6,l);break;default:if(!at(Ct,Ft))break t}}Ct={Z:Nt(Ct,1),$:Nt(Ct,2),height:Nt(Ct,3),width:Nt(Ct,4),rotation:Nt(Ct,5,0),X:fe(Ct,6,0)},Ft=Fe(en(St.get(Yt)),fn).map(Yn);var v=ft.get(Yt);t:for(l=new qe,v=new Ze(v);Ce(v);)switch(v.i){case 10:l.addClassification(Ie(v,new me,Ne));break;default:if(!at(l,v))break t}Ct={T:Ct,O:Ft,M:vn(l)},Xt.push(Ct)}Mt=Xt}else Mt=[];M[w]=Mt,Gt.g=7;break}if(N.type==="proto_list"){if(A){for(Mt=Array(A.size()),St=0;St<A.size();St++)Mt[St]=A.get(St);A.delete()}else Mt=[];M[w]=Mt,Gt.g=7;break}if(A===void 0){Gt.g=3;break}if(N.type==="float_list"){M[w]=A,Gt.g=7;break}if(N.type==="proto"){M[w]=A,Gt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return U=X.s[w],U||(U=new Mn(X.h,X.D),X.s[w]=U),_(Gt,cn(U,A,X.G),13);case 13:rt=Gt.h,M[w]=rt;case 7:N.transform&&M[w]&&(M[w]=N.transform(M[w])),Gt.g=3;break;case 14:q[yt]=Gt.h;case 3:tt=R.next(),Gt.g=2;break;case 4:return Gt.return(M)}})})}function It(h,g,G){return Tt(h,function C(){var M=this,Q;return de(C,function(B){return typeof G=="number"||G instanceof Uint8Array||G instanceof M.h.Uint8BlobList?B.return(G):G instanceof M.h.Texture2dDataOut?(Q=M.s[g],Q||(Q=new Mn(M.h,M.D),M.s[g]=Q),B.return(cn(Q,G,M.G))):B.return(void 0)})})}function Ut(h,g){for(var G=g.name||"$",C=[].concat(k(g.wants)),M=new h.h.StringList,Q=Y(g.wants),B=Q.next();!B.done;B=Q.next())M.push_back(B.value);Q=h.h.PacketListener.implement({onResults:function(tt){for(var ct={},s=0;s<g.wants.length;++s)ct[C[s]]=tt.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,g.outs).then(function(R){R=X(R);for(var w=0;w<g.wants.length;++w){var N=ct[C[w]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(M,Q),M.delete()}o.onResults=function(h,g){this.listeners[g||"$"]=h},Re("Solution",W),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function kt(h){h=En(h);var g=h.getMesh();if(!g)return h;var G=new Float32Array(g.getVertexBufferList());g.getVertexBufferList=function(){return G};var C=new Uint32Array(g.getIndexBufferList());return g.getIndexBufferList=function(){return C},h}var qt={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(kt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(g){return Fe(en(g),fn).map(Yn)})}}}}],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"}}}},Et=[[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]],wt=[[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]],Kt=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ce=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(k(Et),k(wt),k(Kt),k(Dt),k(ce),k(pe));function ke(h){h=h||{},h=Object.assign(Object.assign({},qt),h),this.g=new W(h)}o=ke.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(h){this.g.onResults(h)},o.initialize=function(){return Tt(this,function h(){var g=this;return de(h,function(G){return _(G,g.g.initialize(),0)})})},o.reset=function(){this.g.reset()},o.send=function(h){return Tt(this,function g(){var G=this;return de(g,function(C){return _(C,G.g.send(h),0)})})},o.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",ke),Re("FACEMESH_LIPS",Et),Re("FACEMESH_LEFT_EYE",wt),Re("FACEMESH_LEFT_EYEBROW",Kt),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ce),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var g=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),M=[],Q=0;Q<G;Q++)M.push(Array(g));for(Q=0;Q<G;Q++)for(var B=0;B<g;B++){var tt=h.getLayout()===1?Q*g+B:B*G+Q;M[Q][B]=C[tt]}return M}),Re("VERSION","0.4.1633559619")}).call(gi);const Zi={};(function(){var o;function n(t){var u=0;return function(){return u<t.length?{done:!1,value:t[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,u,a){return t==Array.prototype||t==Object.prototype||(t[u]=a.value),t};function m(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<t.length;++u){var a=t[u];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var y=m(this);function I(t,u){if(u)t:{var a=y;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],u=u(b),u!=b&&u!=null&&r(a,t,{configurable:!0,writable:!0,value:u})}}I("Symbol",function(t){function u(L){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new a(b+(L||"")+"_"+S++,L)}function a(L,H){this.g=L,r(this,"description",{configurable:!0,writable:!0,value:H})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return u}),I("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<u.length;a++){var b=y[u[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return t});function F(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function Y(t){var u=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return u?u.call(t):{next:n(t)}}function k(t){if(!(t instanceof Array)){t=Y(t);for(var u,a=[];!(u=t.next()).done;)a.push(u.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function u(){}return u.prototype=t,new u},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(t,u){if(t.__proto__=u,t.__proto__!==u)throw new TypeError(t+" is not extensible");return t}:null}var dt=O;function ht(t,u){if(t.prototype=et(u.prototype),t.prototype.constructor=t,dt)dt(t,u);else for(var a in u)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(u,a);b&&Object.defineProperty(t,a,b)}else t[a]=u[a];t.ka=u.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Ht.prototype.o=function(t){this.h=t};function At(t,u){t.j={V:u,X:!0},t.g=t.m||t.s}Ht.prototype.return=function(t){this.j={return:t},this.g=this.s};function _(t,u,a){return t.g=a,{value:u}}function Ee(t){this.g=new Ht,this.h=t}function an(t,u){Lt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},u,t.g.return):(t.g.return(u),$t(t))}function We(t,u,a,b){try{var S=u.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var L=S.value}catch(H){return t.g.i=null,At(t.g,H),$t(t)}return t.g.i=null,b.call(t.g,L),$t(t)}function $t(t){for(;t.g.g;)try{var u=t.h(t.g);if(u)return t.g.l=!1,{value:u.value,done:!1}}catch(a){t.g.h=void 0,At(t.g,a)}if(t.g.l=!1,t.g.j){if(u=t.g.j,t.g.j=null,u.X)throw u.V;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function An(t){this.next=function(u){return Lt(t.g),t.g.i?u=We(t,t.g.i.next,u,t.g.o):(t.g.o(u),u=$t(t)),u},this.throw=function(u){return Lt(t.g),t.g.i?u=We(t,t.g.i.throw,u,t.g.o):(At(t.g,u),u=$t(t)),u},this.return=function(u){return an(t,u)},this[Symbol.iterator]=function(){return this}}function de(t){function u(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function L(H){H.done?b(H.value):Promise.resolve(H.value).then(u,a).then(L,S)}L(t.next())})}function gt(t){return de(new An(new Ee(t)))}I("Promise",function(t){function u(H){this.h=0,this.i=void 0,this.g=[],this.o=!1;var K=this.j();try{H(K.resolve,K.reject)}catch(j){K.reject(j)}}function a(){this.g=null}function b(H){return H instanceof u?H:new u(function(K){K(H)})}if(t)return t;a.prototype.h=function(H){if(this.g==null){this.g=[];var K=this;this.i(function(){K.l()})}this.g.push(H)};var S=y.setTimeout;a.prototype.i=function(H){S(H,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var H=this.g;this.g=[];for(var K=0;K<H.length;++K){var j=H[K];H[K]=null;try{j()}catch(D){this.j(D)}}}this.g=null},a.prototype.j=function(H){this.i(function(){throw H})},u.prototype.j=function(){function H(D){return function($){j||(j=!0,D.call(K,$))}}var K=this,j=!1;return{resolve:H(this.D),reject:H(this.l)}},u.prototype.D=function(H){if(H===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(H instanceof u)this.G(H);else{t:switch(typeof H){case"object":var K=H!=null;break t;case"function":K=!0;break t;default:K=!1}K?this.A(H):this.m(H)}},u.prototype.A=function(H){var K=void 0;try{K=H.then}catch(j){this.l(j);return}typeof K=="function"?this.H(K,H):this.m(H)},u.prototype.l=function(H){this.s(2,H)},u.prototype.m=function(H){this.s(1,H)},u.prototype.s=function(H,K){if(this.h!=0)throw Error("Cannot settle("+H+", "+K+"): Promise already settled in state"+this.h);this.h=H,this.i=K,this.h===2&&this.F(),this.B()},u.prototype.F=function(){var H=this;S(function(){if(H.C()){var K=y.console;typeof K<"u"&&K.error(H.i)}},1)},u.prototype.C=function(){if(this.o)return!1;var H=y.CustomEvent,K=y.Event,j=y.dispatchEvent;return typeof j>"u"?!0:(typeof H=="function"?H=new H("unhandledrejection",{cancelable:!0}):typeof K=="function"?H=new K("unhandledrejection",{cancelable:!0}):(H=y.document.createEvent("CustomEvent"),H.initCustomEvent("unhandledrejection",!1,!0,H)),H.promise=this,H.reason=this.i,j(H))},u.prototype.B=function(){if(this.g!=null){for(var H=0;H<this.g.length;++H)L.h(this.g[H]);this.g=null}};var L=new a;return u.prototype.G=function(H){var K=this.j();H.K(K.resolve,K.reject)},u.prototype.H=function(H,K){var j=this.j();try{H.call(K,j.resolve,j.reject)}catch(D){j.reject(D)}},u.prototype.then=function(H,K){function j(mt,pt){return typeof mt=="function"?function(vt){try{D(mt(vt))}catch(Zt){$(Zt)}}:pt}var D,$,ut=new u(function(mt,pt){D=mt,$=pt});return this.K(j(H,D),j(K,$)),ut},u.prototype.catch=function(H){return this.then(void 0,H)},u.prototype.K=function(H,K){function j(){switch(D.h){case 1:H(D.i);break;case 2:K(D.i);break;default:throw Error("Unexpected state: "+D.h)}}var D=this;this.g==null?L.h(j):this.g.push(j),this.o=!0},u.resolve=b,u.reject=function(H){return new u(function(K,j){j(H)})},u.race=function(H){return new u(function(K,j){for(var D=Y(H),$=D.next();!$.done;$=D.next())b($.value).K(K,j)})},u.all=function(H){var K=Y(H),j=K.next();return j.done?b([]):new u(function(D,$){function ut(vt){return function(Zt){mt[vt]=Zt,pt--,pt==0&&D(mt)}}var mt=[],pt=0;do mt.push(void 0),pt++,b(j.value).K(ut(mt.length-1),$),j=K.next();while(!j.done)})},u});function pn(t,u){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var L=a++;return{value:u(L,t[L]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var jn=typeof Object.assign=="function"?Object.assign:function(t,u){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};I("Object.assign",function(t){return t||jn}),I("Object.is",function(t){return t||function(u,a){return u===a?u!==0||1/u===1/a:u!==u&&a!==a}}),I("Array.prototype.includes",function(t){return t||function(u,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var L=b[a];if(L===u||Object.is(L,u))return!0}return!1}}),I("String.prototype.includes",function(t){return t||function(u,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,a||0)!==-1}}),I("Array.prototype.keys",function(t){return t||function(){return pn(this,function(u){return u})}});var Re=this||self;function Jt(t,u){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||u===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=u}function Te(t){throw t}function on(t,u){Te(Error("Invalid wire type: "+t+" (at position "+u+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Fn(t,u){return u=String.fromCharCode.apply(null,u),t==null?u:t+u}var xn,Nn=typeof TextDecoder<"u",dn,bn=typeof TextEncoder<"u";function kn(t){if(bn)t=(dn||(dn=new TextEncoder)).encode(t);else{var u=void 0;u=u===void 0?!1:u;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var L=t.charCodeAt(S);if(128>L)b[a++]=L;else{if(2048>L)b[a++]=L>>6|192;else{if(55296<=L&&57343>=L){if(56319>=L&&S<t.length){var H=t.charCodeAt(++S);if(56320<=H&&57343>=H){L=1024*(L-55296)+H-56320+65536,b[a++]=L>>18|240,b[a++]=L>>12&63|128,b[a++]=L>>6&63|128,b[a++]=L&63|128;continue}else S--}if(u)throw Error("Found an unpaired surrogate");L=65533}b[a++]=L>>12|224,b[a++]=L>>6&63|128}b[a++]=L&63|128}}t=b.subarray(0,a)}return t}var Hn={},Oe=null;function Ae(t){var u;u===void 0&&(u=0),he(),u=Hn[u];for(var a=Array(Math.floor(t.length/3)),b=u[64]||"",S=0,L=0;S<t.length-2;S+=3){var H=t[S],K=t[S+1],j=t[S+2],D=u[H>>2];H=u[(H&3)<<4|K>>4],K=u[(K&15)<<2|j>>6],j=u[j&63],a[L++]=D+H+K+j}switch(D=0,j=b,t.length-S){case 2:D=t[S+1],j=u[(D&15)<<2]||b;case 1:t=t[S],a[L]=u[t>>2]+u[(t&3)<<4|D>>4]+j+b}return a.join("")}function In(t){var u=t.length,a=3*u/4;a%3?a=Math.floor(a):"=.".indexOf(t[u-1])!=-1&&(a="=.".indexOf(t[u-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Vn(t,function(L){b[S++]=L}),b.subarray(0,S)}function Vn(t,u){function a(j){for(;b<t.length;){var D=t.charAt(b++),$=Oe[D];if($!=null)return $;if(!/^[\s\xa0]*$/.test(D))throw Error("Unknown base64 encoding at char: "+D)}return j}he();for(var b=0;;){var S=a(-1),L=a(0),H=a(64),K=a(64);if(K===64&&S===-1)break;u(S<<2|L>>4),H!=64&&(u(L<<4&240|H>>2),K!=64&&u(H<<6&192|K))}}function he(){if(!Oe){Oe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(u[a].split(""));Hn[a]=b;for(var S=0;S<b.length;S++){var L=b[S];Oe[L]===void 0&&(Oe[L]=S)}}}}var Ye=typeof Uint8Array=="function",Pe;function ne(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function sn(t,u,a){return u===a?Pe||(Pe=new Uint8Array(0)):Ve?t.slice(u,a):new Uint8Array(t.subarray(u,a))}var Me=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return In(t);if(t.constructor===ne){if(t.g==null)var u=Pe||(Pe=new Uint8Array(0));else{u=Uint8Array;var a=t.g;a=a==null||Ye&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?In(a):null,t=t.g=a,u=new u(t)}return u}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ce(t,u){u=u===void 0?{}:u,u=u.v===void 0?!1:u.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=u,t&&Bt(this,t)}function Bt(t,u){t.h=Ze(u),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function Ie(t){for(var u=128,a=0,b=0,S=0;4>S&&128<=u;S++)u=t.h[t.g++],a|=(u&127)<<7*S;if(128<=u&&(u=t.h[t.g++],a|=(u&127)<<28,b|=(u&127)>>4),128<=u)for(S=0;5>S&&128<=u;S++)u=t.h[t.g++],b|=(u&127)<<7*S+3;if(128>u)return t=a>>>0,u=b>>>0,(b=u&2147483648)&&(t=~t+1>>>0,u=~u>>>0,t==0&&(u=u+1>>>0)),t=4294967296*u+(t>>>0),b?-t:t;t.j=!0,Xn()}function zt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var u=t.h,a=u[t.g],b=a&127;return 128>a?(t.g+=1,zt(t),b):(a=u[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,zt(t),b):(a=u[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,zt(t),b):(a=u[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,zt(t),b):(a=u[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,zt(t),b>>>0):(t.g+=5,128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]?(t.j=!0,Xn(),b):(zt(t),b))))))}function we(t){var u=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,zt(t),(u<<0|a<<8|b<<16|S<<24)>>>0}Ce.prototype.m=function(){var t=we(this),u=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*u:a==0?u*Math.pow(2,-149)*t:u*Math.pow(2,a-150)*(t+Math.pow(2,23))};var $e=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,u){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=u}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,u=this.h;return this.h=0,sn(t,0,u)};function je(t,u){for(;127<u;)Ot(t,u&127|128),u>>>=7;Ot(t,u)}function _e(t){var u={},a=u.O===void 0?!1:u.O;this.m={v:u.v===void 0?!1:u.v},this.O=a,u=this.m,$e.length?(a=$e.pop(),u&&(a.v=u.v),t&&Bt(a,t),t=a):t=new Ce(t,u),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}_e.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Se(t){var u=t.g;if((u=u.g==u.i)||(u=t.j)||(u=t.g,u=u.j||0>u.g||u.g>u.i),u)return!1;t.l=t.g.g;var a=ye(t.g);return u=a>>>3,a&=7,0<=a&&5>=a?(t.i=u,t.h=a,!0):(t.j=!0,on(a,t.l),!1)}function Wn(t){switch(t.h){case 0:if(t.h!=0)Wn(t);else t:{t=t.g;for(var u=t.g,a=0;10>a;a++){if((t.h[u]&128)===0){t.g=u+1,zt(t);break t}u++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,zt(t);break;case 2:t.h!=2?Wn(t):(u=ye(t.g),t=t.g,t.g+=u,zt(t));break;case 5:t=t.g,t.g+=4,zt(t);break;case 3:u=t.i;do{if(!Se(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=u&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,on(t.h,t.l)}}function ln(t,u,a){var b=t.g.i,S=ye(t.g),L=t.g.g+S;if(t.g.i=L,a(u,t),a=L-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=L,t.g.i=b,u}var Qe=[];function un(){this.h=[],this.i=0,this.g=new Xe}function ve(t,u){u.length!==0&&(t.h.push(u),t.i+=u.length)}function Le(t,u,a){je(t.g,8*u+2),je(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function re(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function De(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function te(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Ye&&t!=null&&t instanceof Uint8Array)return Ae(t);if(t instanceof ne){if(t.g==null)t="";else{var u=t.g;u=u==null||typeof u=="string"?u:Ye&&u instanceof Uint8Array?Ae(u):null,t=t.g=u}return t}}return t}function Pt(t,u){if(t!=null)return Array.isArray(t)||De(t)?hn(t,u):u(t)}function hn(t,u){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],u);if(u=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,u=(S==null?0:S)&1}return u&&re(a),a}S={};for(a in t)S[a]=Pt(t[a],u);return S}function fe(t){return t=te(t),Array.isArray(t)?hn(t,fe):t}var Nt;function Wt(t,u,a){var b=Nt;Nt=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],De(b))){this.j=t-this.i,this.h=b;break t}u!==void 0&&-1<u?(this.j=Math.max(u,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(u=0;u<a.length;u++)t=a[u],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&re(b):this.u[t]=ie):(Fe(this),(b=this.h[t])?Array.isArray(b)&&re(b):this.h[t]=ie)}var ie=Object.freeze(re([]));function Fe(t){var u=t.j+t.i;t.u[u]||(t.h=t.u[u]={})}function ee(t,u,a){return u===-1?null:(a===void 0?0:a)||u>=t.j?t.h?t.h[u]:void 0:t.u[u+t.i]}function oe(t,u,a){a=a===void 0?!1:a;var b=ee(t,u,a);return b==null&&(b=ie),b===ie&&(b=re(b.slice()),at(t,u,b,a)),b}function nt(t,u){var a=oe(t,u);if(t.l||(t.l={}),!t.l[u]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[u]=!0}return a}function ot(t,u,a){return t=ee(t,u),t=t==null?t:+t,t==null?a===void 0?0:a:t}function at(t,u,a,b){(b===void 0?0:b)||u>=t.j?(Fe(t),t.h[u]=a):t.u[u+t.i]=a}function _t(t,u,a,b){a!==b?at(t,u,a):at(t,u,void 0,!1)}function ae(t,u,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=ee(t,a,!1);return S==null?b:(u=new u(S),t.g[a]=u)}function ue(t,u,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=oe(t,a,!1);b=[];for(var L=0;L<S.length;L++)b[L]=new u(S[L]);t.g[a]=b}return b}function Tt(t,u,a,b,S){var L=ue(t,b,u);a=a||new b,t=oe(t,u),S!=null?(L.splice(S,0,a),t.splice(S,0,a.u)):(L.push(a),t.push(a.u))}Wt.prototype.toJSON=function(){return hn(this.u,fe)},Wt.prototype.toString=function(){return this.u.toString()};function me(t,u){return t=ee(t,u),t==null?0:t}function Ne(t,u){return t=ee(t,u),t==null?"":t}function qe(t,u){if(t=t.m){ve(u,u.g.end());for(var a=0;a<t.length;a++)ve(u,t[a])}}var tn=Symbol();function fn(t,u,a){return t[tn]||(t[tn]=function(b,S){return u(b,S,a)})}function yn(t){var u=t[tn];if(!u){var a=t[nn]||(t[nn]=t());u=function(b,S){return Je(b,S,a)},t[tn]=u}return u}function He(t){var u=t.da;if(u)return yn(u);if(u=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,u,a)}}function en(t){var u=He(t),a=t.W,b=t.ea;return u?function(S,L){return b(S,L,a,u)}:function(S,L){return b(S,L,a)}}function zn(t){var u=t[0];switch(t.length){case 2:var a=t[1];return function(pt,vt,Zt){return u(pt,vt,Zt,a)};case 3:var b=t[1],S=yn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,b,S)};case 4:var L=t[1],H=t[3],K=yn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,L,K,H)};case 5:var j=t[1],D=fn(j,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,j,D)};case 6:var $=t[1],ut=t[5],mt=fn($,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,$,mt,ut)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var nn=Symbol();function Je(t,u,a){for(;Se(u)&&u.h!=4;){var b=u.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=zn(S));else{var L=a[0];L&&(L=L[b])&&(S=a[b]=en(L))}S&&S(u,t,b)||(S=u,b=t,L=S.l,Wn(S),S.O||(S=sn(S.g.h,L,S.g.g),(L=b.m)?L.push(S):b.m=[S]))}return t}function Zn(t,u){var a=new un;if(u(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,L=u=0;L<S;L++){var H=b[L];H.length!==0&&(t.set(H,u),u+=H.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),u),b.h=0),a.h=[t],a=t}return a}function Sn(t,u,a){if(Qe.length){var b=Qe.pop();t&&(Bt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new _e(t);try{var S=new u;return Je(S,t,a[nn]||(a[nn]=a()))}finally{u=t.g,u.h=null,u.l=0,u.i=0,u.g=0,u.j=!1,u.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Qe.length&&Qe.push(t)}}function Be(t,u,a){if(u=ee(u,a),u!=null){je(t.g,8*a+5),t=t.g;var b=u;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Me=Qt=0:(Qt=0,Me=2147483648):isNaN(b)?(Qt=0,Me=2147483647):34028234663852886e22<b?(Qt=0,Me=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Me=(a<<31|b)>>>0):(u=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-u),b=Math.round(8388608*b),16777216<=b&&++u,Qt=0,Me=(a<<31|u+127<<23|b&8388607)>>>0),a=Me,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function En(t,u,a){if(t.h!==1)return!1;var b=t.g;t=we(b);var S=we(b);b=2*(S>>31)+1;var L=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(u,a,L==2047?t?NaN:1/0*b:L==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,L-1075)*(t+4503599627370496),0),!0}function rn(t,u,a){return t.h!==5?!1:(at(u,a,t.g.m()),!0)}function vn(t,u,a){if(t.h!==5&&t.h!==2)return!1;if(u=oe(u,a),t.h==2){a=Ce.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)u.push(a.call(t.g))}else u.push(t.g.m());return!0}function Yn(t,u,a){return t.h!==5?!1:(t=t.g.m(),_t(u,a,t,0),!0)}function Mn(t,u,a){return t.h!==0?!1:(at(u,a,Ie(t.g)),!0)}function cn(t,u,a){return t.h!==0?!1:(at(u,a,ye(t.g)),!0)}function Tn(t,u,a){return t.h!==0?!1:(t=ye(t.g),_t(u,a,t,0),!0)}function Dn(t,u,a){return t.h!==0?!1:(t=!!ye(t.g),_t(u,a,t,!1),!0)}function $n(t,u,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,zt(t),t=t.h;var L;if(Nn)(L=xn)||(L=xn=new TextDecoder("utf-8",{fatal:!1})),L=L.decode(t.subarray(S,S+b));else{b=S+b;for(var H=[],K=null,j,D,$;S<b;)j=t[S++],128>j?H.push(j):224>j?S>=b?H.push(65533):(D=t[S++],194>j||(D&192)!==128?(S--,H.push(65533)):H.push((j&31)<<6|D&63)):240>j?S>=b-1?H.push(65533):(D=t[S++],(D&192)!==128||j===224&&160>D||j===237&&160<=D||((L=t[S++])&192)!==128?(S--,H.push(65533)):H.push((j&15)<<12|(D&63)<<6|L&63)):244>=j?S>=b-2?H.push(65533):(D=t[S++],(D&192)!==128||(j<<28)+(D-144)>>30!==0||((L=t[S++])&192)!==128||(($=t[S++])&192)!==128?(S--,H.push(65533)):(j=(j&7)<<18|(D&63)<<12|(L&63)<<6|$&63,j-=65536,H.push((j>>10&1023)+55296,(j&1023)+56320))):H.push(65533),8192<=H.length&&(K=Fn(K,H),H.length=0);L=Fn(K,H)}return at(u,a,L),!0}function wn(t,u,a,b,S){return t.h!==2?!1:(t=ln(t,new b,S),u.g||(u.g={}),b=t&&t.u,u.g[a]=t,at(u,a,b,!1),!0)}function Cn(t,u,a,b,S){return t.h!==2?!1:(t=ln(t,new b,S),Tt(u,a,t,b,void 0),!0)}function p(t,u,a){return t.h!==0?!1:(at(u,a,Ie(t.g)),!0)}function V(t){Wt.call(this,t)}ht(V,Wt);function W(){return{1:cn,2:rn,3:$n,4:$n}}function E(t,u){var a=ee(t,1);if(a!=null&&a!=null){je(u.g,8);var b=u.g;if(0<=a)je(b,a);else{for(var S=0;9>S;S++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Be(u,t,2),b=ee(t,3),b!=null&&Le(u,3,kn(b)),b=ee(t,4),b!=null&&Le(u,4,kn(b)),qe(t,u)}function P(t){Wt.call(this,t,-1,z)}ht(P,Wt),P.prototype.addClassification=function(t,u){return Tt(this,1,t,V,u),this};function lt(){return{1:[Cn,V,W]}}var z=[1];function it(t){Wt.call(this,t)}ht(it,Wt);function bt(){return{1:rn,2:rn,3:rn,4:rn,5:rn}}function It(t,u){Be(u,t,1),Be(u,t,2),Be(u,t,3),Be(u,t,4),Be(u,t,5),qe(t,u)}function Ut(t){Wt.call(this,t,-1,qt)}ht(Ut,Wt);function kt(){return{1:[Cn,it,bt]}}var qt=[1];function Et(t){Wt.call(this,t)}ht(Et,Wt);function wt(){return{1:rn,2:rn,3:rn,4:rn,5:rn,6:Mn}}function Kt(t,u){Be(u,t,1),Be(u,t,2),Be(u,t,3),Be(u,t,4),Be(u,t,5);var a=ee(t,6);if(a!=null&&a!=null){je(u.g,48);var b=u.g,S=a;a=0>S,S=Math.abs(S);var L=S>>>0;for(S=Math.floor((S-L)/4294967296),S>>>=0,a&&(S=~S>>>0,L=(~L>>>0)+1,4294967295<L&&(L=0,S++,4294967295<S&&(S=0))),Me=L,Qt=S,a=Me,L=Qt;0<L||127<a;)Ot(b,a&127|128),a=(a>>>7|L<<25)>>>0,L>>>=7;Ot(b,a)}qe(t,u)}function Dt(t){Wt.call(this,t,-1,ke)}ht(Dt,Wt);function ce(){return{1:p,2:p,3:vn,4:[wn,pe,ge],5:cn,6:cn,7:vn,8:vn,9:vn}}function pe(t){Wt.call(this,t)}ht(pe,Wt);function ge(){return{1:rn,2:rn,3:rn}}var ke=[3,7,8,9];function h(t){Wt.call(this,t)}ht(h,Wt);function g(){return{1:Yn,2:Yn,3:Yn}}function G(t){Wt.call(this,t)}ht(G,Wt);function C(){return{1:Yn,2:Yn,3:Yn}}function M(t){Wt.call(this,t)}ht(M,Wt);function Q(){return{1:Tn,2:[wn,G,C],3:[wn,h,g],4:Dn}}function B(t){Wt.call(this,t,-1,ct)}ht(B,Wt);function tt(){return{1:Tn,2:[Cn,M,Q],3:Yn,4:vn,5:vn,6:vn}}var ct=[2,4,5,6];function s(t){Wt.call(this,t,-1,R)}ht(s,Wt);function X(){return{1:Tn,2:[Cn,B,tt],3:[wn,Dt,ce],4:En,5:vn,6:vn}}var R=[2,5,6];function w(t,u,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,u),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
89
89
|
|
|
90
|
-
`+t.getShaderInfoLog(a));return a}function N(t){return ue(t,V,1).map(function(u){return{index:me(u,1),$:ot(u,2),label:ee(u,3)!=null?Ne(u,3):void 0,displayName:ee(u,4)!=null?Ne(u,4):void 0}})}function A(t){return{x:ot(t,1),y:ot(t,2),z:ot(t,3),visibility:ee(t,4)!=null?ot(t,4):void 0}}function
|
|
90
|
+
`+t.getShaderInfoLog(a));return a}function N(t){return ue(t,V,1).map(function(u){return{index:me(u,1),$:ot(u,2),label:ee(u,3)!=null?Ne(u,3):void 0,displayName:ee(u,4)!=null?Ne(u,4):void 0}})}function A(t){return{x:ot(t,1),y:ot(t,2),z:ot(t,3),visibility:ee(t,4)!=null?ot(t,4):void 0}}function U(t,u){this.h=t,this.g=u,this.l=0}function rt(t,u,a){return q(t,u),typeof t.g.canvas.transferToImageBitmap=="function"?Promise.resolve(t.g.canvas.transferToImageBitmap()):a?Promise.resolve(t.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(t.g.canvas):(t.i===void 0&&(t.i=document.createElement("canvas")),new Promise(function(b){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),b(t.i)}))}function q(t,u){var a=t.g;if(t.m===void 0){var b=w(a,`
|
|
91
91
|
attribute vec2 aVertex;
|
|
92
92
|
attribute vec2 aTex;
|
|
93
93
|
varying vec2 vTex;
|
|
@@ -102,9 +102,9 @@
|
|
|
102
102
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
103
103
|
}`,1),L=a.createProgram();if(a.attachShader(L,b),a.attachShader(L,S),a.linkProgram(L),!a.getProgramParameter(L,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
104
104
|
|
|
105
|
-
`+a.getProgramInfoLog(L));b=t.m=L,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=u.width,a.canvas.height=u.height,a.viewport(0,0,u.width,u.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(u.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Gt=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 Mt(t,u){return u+t}function St(t,u){window[t]=u}function ft(t){var u=document.createElement("script");return u.setAttribute("src",t),u.setAttribute("crossorigin","anonymous"),new Promise(function(a){u.addEventListener("load",function(){a()},!1),u.addEventListener("error",function(){a()},!1),document.body.appendChild(u)})}function Xt(){return gt(function(t){switch(t.g){case 1:return t.m=2,_(t,WebAssembly.instantiate(Gt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function Yt(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||Mt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=u,t.options){u=Y(Object.keys(t.options));for(var a=u.next();!a.done;a=u.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}o=Yt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Ht(t){var u,a,b,S,L,F,U,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return t.S?(u=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,_(mt,Xt(),2)):mt.return();case 2:if(a=mt.h,typeof window=="object")return St("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),St("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),F=u.filter(function(pt){return pt.data!==void 0}),U=u.filter(function(pt){return pt.data===void 0}),j=Promise.all(F.map(function(pt){var vt=v(t,pt.url);if(pt.path!==void 0){var Zt=pt.path;vt=vt.then(function(jt){return t.overrideFile(Zt,jt),Promise.resolve(jt)})}return vt})),D=Promise.all(U.map(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a?ft(t.locateFile(pt.url,t.T)):Promise.resolve()})).then(function(){var pt,vt,Zt;return gt(function(jt){if(jt.g==1)return pt=window.createMediapipeSolutionsWasm,vt=window.createMediapipeSolutionsPackedAssets,Zt=t,_(jt,pt(vt),2);Zt.h=jt.h,jt.g=0})}),$=function(){return gt(function(pt){return t.g.graph&&t.g.graph.url?pt=_(pt,v(t,t.g.graph.url),0):(pt.g=0,pt=void 0),pt})}(),_(mt,Promise.all([D,j,$]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=u.filter(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a}).map(function(pt){return t.locateFile(pt.url,t.T)}),importScripts.apply(null,k(b)),S=t,_(mt,createMediapipeSolutionsWasm(Module),6);case 6:S.h=mt.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,L=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(L),mt.g=4;break;case 7:if(t.l=document.createElement("canvas"),ut=t.l.getContext("webgl2",{}),!ut&&(ut=t.l.getContext("webgl",{}),!ut))return alert("Failed to create WebGL canvas context when passing video frame."),mt.return();t.F=ut,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,mt.g=0}})}function Ct(t){var u,a,b,S,L,F,U,j;return gt(function(D){if(D.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return D.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){D.g=2;return}return t.R=t.g.graph.url,_(D,v(t,t.g.graph.url),3)}for(D.g!=2&&(u=D.h,t.i.loadGraph(u)),a=Y(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(L=Y(t.g.listeners),F=L.next();!F.done;F=L.next())U=F.value,J(t,U);j=t.j,t.j={},t.setOptions(j),D.g=0})}o.reset=function(){var t=this;return gt(function(u){t.i&&(t.i.reset(),t.m={},t.s={}),u.g=0})},o.setOptions=function(t,u){var a=this;if(u=u||this.g.options){for(var b=[],S=[],L={},F=Y(Object.keys(t)),U=F.next();!U.done;L={L:L.L,M:L.M},U=F.next()){var j=U.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],U=u[j],U!==void 0&&(U.onChange&&(L.L=U.onChange,L.M=t[j],b.push(function(D){return function(){var $;return gt(function(ut){if(ut.g==1)return _(ut,D.L(D.M),2);$=ut.h,$===!0&&(a.o=!0),ut.g=0})}}(L))),U.graphOptionXref&&(j={valueNumber:U.type===1?t[j]:0,valueBoolean:U.type===0?t[j]:!1,valueString:U.type===2?t[j]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),j),S.push(U))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var u,a,b,S,L,F,U;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}u=Y(t.A),a=u.next();case 3:if(a.done){j.g=5;break}return b=a.value,_(j,b(),4);case 4:a=u.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,L=Y(t.B),F=L.next();!F.done;F=L.next())U=F.value,S.push_back(U);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,j.g=0}})}o.initialize=function(){var t=this;return gt(function(u){return u.g==1?_(u,Ht(t),2):u.g!=3?_(u,Ct(t),3):_(u,l(t),0)})};function v(t,u){var a,b;return gt(function(S){return u in t.G?S.return(t.G[u]):(a=t.locateFile(u,""),b=fetch(a).then(function(L){return L.arrayBuffer()}),t.G[u]=b,S.return(b))})}o.overrideFile=function(t,u){this.i?this.i.overrideFile(t,u):this.C[t]=u},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(t,u){var a=this,b,S,L,F,U,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return a.g.inputs?(b=1e3*(u==null?performance.now():u),_(mt,a.D,2)):mt.return();case 2:return _(mt,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,L=Y(Object.keys(t)),F=L.next();!F.done;F=L.next())if(U=F.value,j=a.g.inputs[U]){t:{var pt=t[U];switch(j.type){case"video":var vt=a.m[j.stream];if(vt||(vt=new K(a.h,a.F),a.m[j.stream]=vt),vt.l===0&&(vt.l=vt.h.createTexture()),typeof HTMLVideoElement<"u"&&pt instanceof HTMLVideoElement)var Zt=pt.videoWidth,jt=pt.videoHeight;else typeof HTMLImageElement<"u"&&pt instanceof HTMLImageElement?(Zt=pt.naturalWidth,jt=pt.naturalHeight):(Zt=pt.width,jt=pt.height);jt={glName:vt.l,width:Zt,height:jt},Zt=vt.g,Zt.canvas.width=jt.width,Zt.canvas.height=jt.height,Zt.activeTexture(Zt.TEXTURE0),vt.h.bindTexture2d(vt.l),Zt.texImage2D(Zt.TEXTURE_2D,0,Zt.RGBA,Zt.RGBA,Zt.UNSIGNED_BYTE,pt),vt.h.bindTexture2d(0),vt=jt;break t;case"detections":for(vt=a.m[j.stream],vt||(vt=new yt(a.h),a.m[j.stream]=vt),vt.data||(vt.data=new vt.g.DetectionListData),vt.data.reset(pt.length),jt=0;jt<pt.length;++jt){Zt=pt[jt];var se=vt.data,le=se.setBoundingBox,Ue=jt,Rn=Zt.U,Ke=new Et;if(at(Ke,1,Rn.aa),at(Ke,2,Rn.ba),at(Ke,3,Rn.height),at(Ke,4,Rn.width),at(Ke,5,Rn.rotation),at(Ke,6,Rn.Z),Rn=Zn(Ke,Ut),le.call(se,Ue,Rn),Zt.P)for(se=0;se<Zt.P.length;++se){Ke=Zt.P[se];var Jn=!!Ke.visibility;le=vt.data,Ue=le.addNormalizedLandmark,Rn=jt,Ke=Object.assign(Object.assign({},Ke),{visibility:Jn?Ke.visibility:0}),Jn=new it,at(Jn,1,Ke.x),at(Jn,2,Ke.y),at(Jn,3,Ke.z),Ke.visibility&&at(Jn,4,Ke.visibility),Ke=Zn(Jn,It),Ue.call(le,Rn,Ke)}if(Zt.N)for(se=0;se<Zt.N.length;++se)le=vt.data,Ue=le.addClassification,Rn=jt,Ke=Zt.N[se],Jn=new V,at(Jn,2,Ke.$),Ke.index&&at(Jn,1,Ke.index),Ke.label&&at(Jn,3,Ke.label),Ke.displayName&&at(Jn,4,Ke.displayName),Ke=Zn(Jn,E),Ue.call(le,Rn,Ke)}vt=vt.data;break t;default:vt={}}}switch(D=vt,$=j.stream,j.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},D),{stream:$,timestamp:b}));break;case"detections":ut=D,ut.stream=$,ut.timestamp=b,S.pushDetectionList(ut);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(S),_(mt,a.D,4);case 4:S.delete(),mt.g=0}})};function x(t,u,a){var b,S,L,F,U,j,D,$,ut,mt,pt,vt,Zt,jt;return gt(function(se){switch(se.g){case 1:if(!a)return se.return(u);for(b={},S=0,L=Y(Object.keys(a)),F=L.next();!F.done;F=L.next())U=F.value,j=a[U],typeof j!="string"&&j.type==="texture"&&u[j.stream]!==void 0&&++S;1<S&&(t.H=!1),D=Y(Object.keys(a)),F=D.next();case 2:if(F.done){se.g=4;break}if($=F.value,ut=a[$],typeof ut=="string")return Zt=b,jt=$,_(se,T(t,$,u[ut]),14);if(mt=u[ut.stream],ut.type==="detection_list"){if(mt){for(var le=mt.getRectList(),Ue=mt.getLandmarksList(),Rn=mt.getClassificationsList(),Ke=[],Jn=0;Jn<le.size();++Jn){var yr=Sn(le.get(Jn),Et,wt);yr={U:{aa:ot(yr,1),ba:ot(yr,2),height:ot(yr,3),width:ot(yr,4),rotation:ot(yr,5,0),Z:me(yr,6)},P:ue(Sn(Ue.get(Jn),Kt,kt),it,1).map(A),N:N(Sn(Rn.get(Jn),O,lt))},Ke.push(yr)}le=Ke}else le=[];b[$]=le,se.g=7;break}if(ut.type==="proto_list"){if(mt){for(le=Array(mt.size()),Ue=0;Ue<mt.size();Ue++)le[Ue]=mt.get(Ue);mt.delete()}else le=[];b[$]=le,se.g=7;break}if(mt===void 0){se.g=3;break}if(ut.type==="float_list"){b[$]=mt,se.g=7;break}if(ut.type==="proto"){b[$]=mt,se.g=7;break}if(ut.type!=="texture")throw Error("Unknown output config type: '"+ut.type+"'");return pt=t.s[$],pt||(pt=new K(t.h,t.F),t.s[$]=pt),_(se,rt(pt,mt,t.H),13);case 13:vt=se.h,b[$]=vt;case 7:ut.transform&&b[$]&&(b[$]=ut.transform(b[$])),se.g=3;break;case 14:Zt[jt]=se.h;case 3:F=D.next(),se.g=2;break;case 4:return se.return(b)}})}function T(t,u,a){var b;return gt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[u],b||(b=new K(t.h,t.F),t.s[u]=b),S.return(rt(b,a,t.H))):S.return(void 0)})}function J(t,u){for(var a=u.name||"$",b=[].concat(k(u.wants)),S=new t.h.StringList,L=Y(u.wants),F=L.next();!F.done;F=L.next())S.push_back(F.value);L=t.h.PacketListener.implement({onResults:function(U){for(var j={},D=0;D<u.wants.length;++D)j[b[D]]=U.get(D);var $=t.listeners[a];$&&(t.D=x(t,j,u.outs).then(function(ut){ut=$(ut);for(var mt=0;mt<u.wants.length;++mt){var pt=j[b[mt]];typeof pt=="object"&&pt.hasOwnProperty&&pt.hasOwnProperty("delete")&&pt.delete()}ut&&(t.D=ut)}))}}),t.i.attachMultiListener(S,L),S.delete()}o.onResults=function(t,u){this.listeners[u||"$"]=t},Jt("Solution",Yt),Jt("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function i(t){var u=me(t,1),a=ae(t,h,3);return a={x:ot(a,1),y:ot(a,2),depth:ot(a,3)},t=ae(t,G,2),{id:u,point2d:a,point3d:{x:ot(t,1),y:ot(t,2),z:ot(t,3)}}}function d(t){var u=Sn(t,s,X);t=[],u=ue(u,B,2);for(var a=0;a<u.length;a++)t.push({id:me(u[a],1),keypoints:ue(u[a],M,2).map(i),visibility:ot(u[a],3),scale:et(u[a],6),translation:et(u[a],5),rotation:et(u[a],4)});return t}function Z(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var c={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 f(t){var u=this;t=t||{},this.g=new Yt({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,L,F;return gt(function(U){return U.g==1?(b=a,u.g.setOptions({allowedLabels:e(b)},c),S=Z(b),L="object_detection_3d.tflite",_(U,v(u.g,S),2)):(F=U.h,u.g.overrideFile(L,F),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(S){return b=a,u.h=b,u.g.setOptions({focalX:b[0],focalY:b[1]},c),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(S){return b=a,u.i=b,u.g.setOptions({principalX:b[0],principalY:b[1]},c),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,L,F;return gt(function(U){if(u.h===void 0||u.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,S=[b[0]/2,b[1]/2],L=[u.h[0]/S[0],u.h[1]/S[1]],F=[u.i[0]/S[0],u.i[1]/S[1]],u.setOptions({focalLength:L,principalPoint:F}),U.g=0})}}}})}o=f.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(t){this.g.onResults(t)},o.initialize=function(){var t=this;return gt(function(u){return _(u,t.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(t){var u=this;return gt(function(a){return _(a,u.g.send(t),0)})},o.setOptions=function(t){this.g.setOptions(t)},Jt("Objectron",f),Jt("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]]),Jt("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}),Jt("VERSION","0.4.1636596145")}).call(Zi);const vi={};(function(){var o;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function m(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var y=m(this);function I(s,X){if(X)t:{var R=y;s=s.split(".");for(var w=0;w<s.length-1;w++){var N=s[w];if(!(N in R))break t;R=R[N]}s=s[s.length-1],w=R[s],X=X(w),X!=w&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}I("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(w+(A||"")+"_"+N++,A)}function R(A,K){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:K})}if(s)return s;R.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),I("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var w=y[X[R]];typeof w=="function"&&typeof w.prototype[s]!="function"&&r(w.prototype,s,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return s});function H(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function Y(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function k(s){if(!(s instanceof Array)){s=Y(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var nt=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},P;if(typeof Object.setPrototypeOf=="function")P=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}P=st?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var dt=P;function ht(s,X){if(s.prototype=nt(X.prototype),s.prototype.constructor=s,dt)dt(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(X,R);w&&Object.defineProperty(s,R,w)}else s[R]=X[R];s.ea=X.prototype}function Ft(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Ft.prototype.o=function(s){this.h=s};function At(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Ft.prototype.return=function(s){this.j={return:s},this.g=this.s};function _(s,X,R){return s.g=R,{value:X}}function Ee(s){this.g=new Ft,this.h=s}function an(s,X){Lt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(w){return{value:w,done:!0}},X,s.g.return):(s.g.return(X),$t(s))}function We(s,X,R,w){try{var N=X.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var A=N.value}catch(K){return s.g.i=null,At(s.g,K),$t(s)}return s.g.i=null,w.call(s.g,A),$t(s)}function $t(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,At(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function An(s){this.next=function(X){return Lt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=$t(s)),X},this.throw=function(X){return Lt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(At(s.g,X),X=$t(s)),X},this.return=function(X){return an(s,X)},this[Symbol.iterator]=function(){return this}}function de(s){function X(w){return s.next(w)}function R(w){return s.throw(w)}return new Promise(function(w,N){function A(K){K.done?w(K.value):Promise.resolve(K.value).then(X,R).then(A,N)}A(s.next())})}function gt(s){return de(new An(new Ee(s)))}I("Promise",function(s){function X(K){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{K(rt.resolve,rt.reject)}catch(q){rt.reject(q)}}function R(){this.g=null}function w(K){return K instanceof X?K:new X(function(rt){rt(K)})}if(s)return s;R.prototype.h=function(K){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(K)};var N=y.setTimeout;R.prototype.i=function(K){N(K,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var K=this.g;this.g=[];for(var rt=0;rt<K.length;++rt){var q=K[rt];K[rt]=null;try{q()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(K){this.i(function(){throw K})},X.prototype.j=function(){function K(yt){return function(Gt){q||(q=!0,yt.call(rt,Gt))}}var rt=this,q=!1;return{resolve:K(this.C),reject:K(this.l)}},X.prototype.C=function(K){if(K===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(K instanceof X)this.F(K);else{t:switch(typeof K){case"object":var rt=K!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.v(K):this.m(K)}},X.prototype.v=function(K){var rt=void 0;try{rt=K.then}catch(q){this.l(q);return}typeof rt=="function"?this.G(rt,K):this.m(K)},X.prototype.l=function(K){this.s(2,K)},X.prototype.m=function(K){this.s(1,K)},X.prototype.s=function(K,rt){if(this.h!=0)throw Error("Cannot settle("+K+", "+rt+"): Promise already settled in state"+this.h);this.h=K,this.i=rt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var K=this;N(function(){if(K.B()){var rt=y.console;typeof rt<"u"&&rt.error(K.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var K=y.CustomEvent,rt=y.Event,q=y.dispatchEvent;return typeof q>"u"?!0:(typeof K=="function"?K=new K("unhandledrejection",{cancelable:!0}):typeof rt=="function"?K=new rt("unhandledrejection",{cancelable:!0}):(K=y.document.createEvent("CustomEvent"),K.initCustomEvent("unhandledrejection",!1,!0,K)),K.promise=this,K.reason=this.i,q(K))},X.prototype.A=function(){if(this.g!=null){for(var K=0;K<this.g.length;++K)A.h(this.g[K]);this.g=null}};var A=new R;return X.prototype.F=function(K){var rt=this.j();K.J(rt.resolve,rt.reject)},X.prototype.G=function(K,rt){var q=this.j();try{K.call(rt,q.resolve,q.reject)}catch(yt){q.reject(yt)}},X.prototype.then=function(K,rt){function q(St,ft){return typeof St=="function"?function(Xt){try{yt(St(Xt))}catch(Yt){Gt(Yt)}}:ft}var yt,Gt,Mt=new X(function(St,ft){yt=St,Gt=ft});return this.J(q(K,yt),q(rt,Gt)),Mt},X.prototype.catch=function(K){return this.then(void 0,K)},X.prototype.J=function(K,rt){function q(){switch(yt.h){case 1:K(yt.i);break;case 2:rt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h(q):this.g.push(q),this.o=!0},X.resolve=w,X.reject=function(K){return new X(function(rt,q){q(K)})},X.race=function(K){return new X(function(rt,q){for(var yt=Y(K),Gt=yt.next();!Gt.done;Gt=yt.next())w(Gt.value).J(rt,q)})},X.all=function(K){var rt=Y(K),q=rt.next();return q.done?w([]):new X(function(yt,Gt){function Mt(Xt){return function(Yt){St[Xt]=Yt,ft--,ft==0&&yt(St)}}var St=[],ft=0;do St.push(void 0),ft++,w(q.value).J(Mt(St.length-1),Gt),q=rt.next();while(!q.done)})},X});function pn(s,X){s instanceof String&&(s+="");var R=0,w=!1,N={next:function(){if(!w&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return w=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var jn=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var w=arguments[R];if(w)for(var N in w)Object.prototype.hasOwnProperty.call(w,N)&&(s[N]=w[N])}return s};I("Object.assign",function(s){return s||jn}),I("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),I("Array.prototype.includes",function(s){return s||function(X,R){var w=this;w instanceof String&&(w=String(w));var N=w.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var A=w[R];if(A===X||Object.is(A,X))return!0}return!1}}),I("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),I("Array.prototype.keys",function(s){return s||function(){return pn(this,function(X){return X})}});var Re=this||self;function Jt(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var w;s.length&&(w=s.shift());)s.length||X===void 0?R[w]&&R[w]!==Object.prototype[w]?R=R[w]:R=R[w]={}:R[w]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function on(s){Te(s)}function Xn(s,X){on(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Hn(){on(Error("Failed to read varint, encoding is invalid."))}function xn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Nn,dn=typeof TextDecoder<"u",bn,kn=typeof TextEncoder<"u";function Fn(s){if(kn)s=(bn||(bn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,w=new Uint8Array(3*s.length),N=0;N<s.length;N++){var A=s.charCodeAt(N);if(128>A)w[R++]=A;else{if(2048>A)w[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&N<s.length){var K=s.charCodeAt(++N);if(56320<=K&&57343>=K){A=1024*(A-55296)+K-56320+65536,w[R++]=A>>18|240,w[R++]=A>>12&63|128,w[R++]=A>>6&63|128,w[R++]=A&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");A=65533}w[R++]=A>>12|224,w[R++]=A>>6&63|128}w[R++]=A&63|128}}s=w.subarray(0,R)}return s}var Pe={},Ae=null;function In(s){var X;X===void 0&&(X=0),Ye(),X=Pe[X];for(var R=Array(Math.floor(s.length/3)),w=X[64]||"",N=0,A=0;N<s.length-2;N+=3){var K=s[N],rt=s[N+1],q=s[N+2],yt=X[K>>2];K=X[(K&3)<<4|rt>>4],rt=X[(rt&15)<<2|q>>6],q=X[q&63],R[A++]=yt+K+rt+q}switch(yt=0,q=w,s.length-N){case 2:yt=s[N+1],q=X[(yt&15)<<2]||w;case 1:s=s[N],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+q+w}return R.join("")}function Vn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var w=new Uint8Array(R),N=0;return he(s,function(A){w[N++]=A}),w.subarray(0,N)}function he(s,X){function R(q){for(;w<s.length;){var yt=s.charAt(w++),Gt=Ae[yt];if(Gt!=null)return Gt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return q}Ye();for(var w=0;;){var N=R(-1),A=R(0),K=R(64),rt=R(64);if(rt===64&&N===-1)break;X(N<<2|A>>4),K!=64&&(X(A<<4&240|K>>2),rt!=64&&X(K<<6&192|rt))}}function Ye(){if(!Ae){Ae={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var w=s.concat(X[R].split(""));Pe[R]=w;for(var N=0;N<w.length;N++){var A=w[N];Ae[A]===void 0&&(Ae[A]=N)}}}}var Oe=typeof Uint8Array=="function",ne;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Oe&&s instanceof Uint8Array?In(s):null;return s};var sn=typeof Uint8Array.prototype.slice=="function";function Me(s,X,R){return X===R?ne||(ne=new Uint8Array(0)):sn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Ce(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Vn(s);if(s.constructor===Ve){if(s.g==null)var X=ne||(ne=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Oe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Vn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Bt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&Ie(this,s)}function Ie(s,X){s.h=Ce(X),s.l=0,s.i=s.h.length,s.g=s.l}Bt.prototype.reset=function(){this.g=this.l};function zt(s){s.g>s.i&&(s.j=!0,on(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],w=R&127;return 128>R?(s.g+=1,zt(s),w):(R=X[s.g+1],w|=(R&127)<<7,128>R?(s.g+=2,zt(s),w):(R=X[s.g+2],w|=(R&127)<<14,128>R?(s.g+=3,zt(s),w):(R=X[s.g+3],w|=(R&127)<<21,128>R?(s.g+=4,zt(s),w):(R=X[s.g+4],w|=(R&15)<<28,128>R?(s.g+=5,zt(s),w>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Hn(),w):(zt(s),w))))))}var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Me(s,0,X)};function Pt(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function je(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,we.length?(R=we.pop(),X&&(R.u=X.u),s&&Ie(R,s),s=R):s=new Bt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Xn(R,s.l),!1)}function Se(s){switch(s.h){case 0:if(s.h!=0)Se(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,zt(s);break t}X++}s.j=!0,Hn()}break;case 1:s=s.g,s.g+=8,zt(s);break;case 2:s.h!=2?Se(s):(X=ye(s.g),s=s.g,s.g+=X,zt(s));break;case 5:s=s.g,s.g+=4,zt(s);break;case 3:X=s.i;do{if(!_e(s)){s.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,on(Error("Unmatched end-group tag")));break}Se(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Wn(s,X,R){s.N||(s=Me(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var ln=[];function Qe(){this.h=[],this.i=0,this.g=new $e}function un(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Pt(s.g,8*X+2),Pt(s.g,R.length),un(s,s.g.end()),un(s,R)}var Le=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(Le?s[Le]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function re(s){if(!s)return 0;var X;return Le?X=s[Le]:X=s.g,X==null?0:X}function De(s){return Array.isArray(s)&&Ge(s,1),s}function te(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Ot(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Oe&&s!=null&&s instanceof Uint8Array?In(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Ot(s)?Nt(s,X):X(s)}function Nt(s,X){if(Array.isArray(s)){for(var R=Array(s.length),w=0;w<s.length;w++)R[w]=fe(s[w],X);return re(s)&1&&De(R),R}R={};for(w in s)R[w]=fe(s[w],X);return R}var Wt;function ie(s,X,R){var w=Wt;Wt=null,s||(s=w),w=this.constructor.ca,s||(s=w?[w]:[]),this.j=(w?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(w=this.g.length,s=w-1,w&&(w=this.g[s],Ot(w))){this.l=s-this.j,this.h=w;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(w=this.g[s])?De(w):this.g[s]=He):(ee(this),(w=this.h[s])?De(w):this.h[s]=He)}var He=Object.freeze(De([]));function ee(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function oe(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function et(s,X,R){R=R===void 0?!0:R;var w=w===void 0?!1:w,N=oe(s,X,w);return N==null&&(N=He),N===He?(N=De([]),at(s,X,N,w)):R&&Array.isArray(N)&&re(N)&2&&(N=N.slice(),at(s,X,N,w)),N}function ot(s,X,R){return s=oe(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function at(s,X,R,w){(w===void 0?0:w)||X>=s.l?(ee(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var w=s.i[R];if(!w){var N=et(s,R,!1);w=[];for(var A=Array.isArray(N)?!!(re(N)&2):!1,K=0;K<N.length;K++)w[K]=new X(N[K]),A&&te(w[K].g);A&&(te(w),Object.freeze(w)),s.i[R]=w}return w}function ae(s,X,R,w,N){var A=_t(s,w,X);R=R||new w,s=et(s,X),N!=null?(A.splice(N,0,R),s.splice(N,0,ue(R))):(A.push(R),s.push(ue(R)))}ie.prototype.toJSON=function(){var s=ue(this);return Nt(s,hn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var w=0;w<R.length;w++)R[w]&&ue(R[w]);else R&&ue(R)}return s.g}ie.prototype.toString=function(){return ue(this).toString()};function Tt(s,X){return s=oe(s,X),s==null?0:s}function me(s,X){return s=oe(s,X),s==null?"":s}function Ne(s,X){if(s=s.m){un(X,X.g.end());for(var R=0;R<s.length;R++)un(X,s[R])}}function qe(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function(q,yt,Gt){return X(q,yt,Gt,R)};case 3:var w=s[1],N=s[2];return function(q,yt,Gt){return X(q,yt,Gt,w,N)};case 4:var A=s[1],K=s[2],rt=s[3];return function(q,yt,Gt){return X(q,yt,Gt,A,K,rt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function tn(s,X,R){for(;_e(X)&&X.h!=4;){var w=X.i,N=R[w];if(N){if(Array.isArray(N)&&(N=R[w]=qe(N)),!N(X,s,w)){w=X,N=s;var A=w.l;Se(w),Wn(w,N,A)}}else w=X,N=s,A=w.l,Se(w),Wn(w,N,A)}return s}function fn(s,X){var R=new Qe;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var w=R.h,N=w.length,A=X=0;A<N;A++){var K=w[A];K.length!==0&&(s.set(K,X),X+=K.length)}w=R.g,N=w.h,N!==0&&(s.set(w.g.subarray(0,N),X),w.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(ln.length){var w=ln.pop();s&&(Ie(w.g,s),w.i=-1,w.h=-1),s=w}else s=new je(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>ln.length&&ln.push(s)}}function Fe(s,X,R){if(X=oe(X,R),X!=null){Pt(s.g,8*R+5),s=s.g;var w=X;w=(R=0>w?1:0)?-w:w,w===0?0<1/w?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(w)?(Ze=0,Qt=2147483647):34028234663852886e22<w?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ze=0,Qt=(R<<31|w)>>>0):(X=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-X),w=Math.round(8388608*w),16777216<=w&&++X,Ze=0,Qt=(R<<31|X+127<<23|w&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function en(s,X,R){if(s.h!==5)return!1;s=s.g;var w=s.h[s.g],N=s.h[s.g+1],A=s.h[s.g+2],K=s.h[s.g+3];return s.g+=4,zt(s),N=(w<<0|N<<8|A<<16|K<<24)>>>0,s=2*(N>>31)+1,w=N>>>23&255,N&=8388607,at(X,R,w==255?N?NaN:1/0*s:w==0?s*Math.pow(2,-149)*N:s*Math.pow(2,w-150)*(N+Math.pow(2,23))),!0}function zn(s,X,R){if(s.h!==0)return!1;for(var w=s.g,N=128,A=0,K=s=0;4>K&&128<=N;K++)N=w.h[w.g++],A|=(N&127)<<7*K;if(128<=N&&(N=w.h[w.g++],A|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(K=0;5>K&&128<=N;K++)N=w.h[w.g++],s|=(N&127)<<7*K+3;return 128>N?(w=A>>>0,N=s>>>0,(s=N&2147483648)&&(w=~w+1>>>0,N=~N>>>0,w==0&&(N=N+1>>>0)),w=4294967296*N+(w>>>0),s=s?-w:w):(w.j=!0,Hn(),s=void 0),at(X,R,s),!0}function nn(s,X,R){return s.h!==0?!1:(at(X,R,ye(s.g)),!0)}function Je(s,X,R){if(s.h!==2)return!1;var w=ye(s.g);s=s.g;var N=s.g;s.g+=w,zt(s),s=s.h;var A;if(dn)(A=Nn)||(A=Nn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(N,N+w));else{w=N+w;for(var K=[],rt=null,q,yt,Gt;N<w;)q=s[N++],128>q?K.push(q):224>q?N>=w?K.push(65533):(yt=s[N++],194>q||(yt&192)!==128?(N--,K.push(65533)):K.push((q&31)<<6|yt&63)):240>q?N>=w-1?K.push(65533):(yt=s[N++],(yt&192)!==128||q===224&&160>yt||q===237&&160<=yt||((A=s[N++])&192)!==128?(N--,K.push(65533)):K.push((q&15)<<12|(yt&63)<<6|A&63)):244>=q?N>=w-2?K.push(65533):(yt=s[N++],(yt&192)!==128||(q<<28)+(yt-144)>>30!==0||((A=s[N++])&192)!==128||((Gt=s[N++])&192)!==128?(N--,K.push(65533)):(q=(q&7)<<18|(yt&63)<<12|(A&63)<<6|Gt&63,q-=65536,K.push((q>>10&1023)+55296,(q&1023)+56320))):K.push(65533),8192<=K.length&&(rt=xn(rt,K),K.length=0);A=xn(rt,K)}return at(X,R,A),!0}function Zn(s,X,R,w,N){if(s.h!==2)return!1;var A=new w,K=s.g.i,rt=ye(s.g),q=s.g.g+rt;if(s.g.i=q,N(A,s),N=q-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(rt+" bytes, instead read "+(rt-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=q,s.g.i=K,ae(X,R,A,w,void 0),!0}function Sn(s){ie.call(this,s)}var Be;ht(Sn,ie);function En(s,X){var R=oe(s,1);if(R!=null&&R!=null){Pt(X.g,8);var w=X.g;if(0<=R)Pt(w,R);else{for(var N=0;9>N;N++)Xe(w,R&127|128),R>>=7;Xe(w,1)}}Fe(X,s,2),w=oe(s,3),w!=null&&ve(X,3,Fn(w)),w=oe(s,4),w!=null&&ve(X,4,Fn(w)),Ne(s,X)}function rn(s,X){return tn(s,X,Be||(Be={1:nn,2:en,3:Je,4:Je}))}function vn(s){ie.call(this,s,-1,cn)}var Yn;ht(vn,ie),vn.prototype.addClassification=function(s,X){return ae(this,1,s,Sn,X),this};function Mn(s,X){return tn(s,X,Yn||(Yn={1:[Zn,Sn,rn]}))}var cn=[1];function Tn(s){ie.call(this,s)}var Dn;ht(Tn,ie);function $n(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5),Ne(s,X)}function wn(s,X){return tn(s,X,Dn||(Dn={1:en,2:en,3:en,4:en,5:en}))}function Cn(s){ie.call(this,s,-1,W)}var p;ht(Cn,ie);function V(s,X){return tn(s,X,p||(p={1:[Zn,Tn,wn]}))}var W=[1];function E(s){ie.call(this,s)}var O;ht(E,ie);function lt(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5);var R=oe(s,6);if(R!=null&&R!=null){Pt(X.g,48);var w=X.g,N=R;R=0>N,N=Math.abs(N);var A=N>>>0;for(N=Math.floor((N-A)/4294967296),N>>>=0,R&&(N=~N>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,N++,4294967295<N&&(N=0))),Qt=A,Ze=N,R=Qt,A=Ze;0<A||127<R;)Xe(w,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(w,R)}Ne(s,X)}function z(s,X){return tn(s,X,O||(O={1:en,2:en,3:en,4:en,5:en,6:zn}))}function it(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
105
|
+
`+a.getProgramInfoLog(L));b=t.m=L,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=u.width,a.canvas.height=u.height,a.viewport(0,0,u.width,u.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(u.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Gt=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 Mt(t,u){return u+t}function St(t,u){window[t]=u}function ft(t){var u=document.createElement("script");return u.setAttribute("src",t),u.setAttribute("crossorigin","anonymous"),new Promise(function(a){u.addEventListener("load",function(){a()},!1),u.addEventListener("error",function(){a()},!1),document.body.appendChild(u)})}function Xt(){return gt(function(t){switch(t.g){case 1:return t.m=2,_(t,WebAssembly.instantiate(Gt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function Yt(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||Mt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=u,t.options){u=Y(Object.keys(t.options));for(var a=u.next();!a.done;a=u.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}o=Yt.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function Ft(t){var u,a,b,S,L,H,K,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return t.S?(u=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,_(mt,Xt(),2)):mt.return();case 2:if(a=mt.h,typeof window=="object")return St("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),St("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),H=u.filter(function(pt){return pt.data!==void 0}),K=u.filter(function(pt){return pt.data===void 0}),j=Promise.all(H.map(function(pt){var vt=v(t,pt.url);if(pt.path!==void 0){var Zt=pt.path;vt=vt.then(function(jt){return t.overrideFile(Zt,jt),Promise.resolve(jt)})}return vt})),D=Promise.all(K.map(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a?ft(t.locateFile(pt.url,t.T)):Promise.resolve()})).then(function(){var pt,vt,Zt;return gt(function(jt){if(jt.g==1)return pt=window.createMediapipeSolutionsWasm,vt=window.createMediapipeSolutionsPackedAssets,Zt=t,_(jt,pt(vt),2);Zt.h=jt.h,jt.g=0})}),$=function(){return gt(function(pt){return t.g.graph&&t.g.graph.url?pt=_(pt,v(t,t.g.graph.url),0):(pt.g=0,pt=void 0),pt})}(),_(mt,Promise.all([D,j,$]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=u.filter(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a}).map(function(pt){return t.locateFile(pt.url,t.T)}),importScripts.apply(null,k(b)),S=t,_(mt,createMediapipeSolutionsWasm(Module),6);case 6:S.h=mt.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,L=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(L),mt.g=4;break;case 7:if(t.l=document.createElement("canvas"),ut=t.l.getContext("webgl2",{}),!ut&&(ut=t.l.getContext("webgl",{}),!ut))return alert("Failed to create WebGL canvas context when passing video frame."),mt.return();t.F=ut,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,mt.g=0}})}function Ct(t){var u,a,b,S,L,H,K,j;return gt(function(D){if(D.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return D.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){D.g=2;return}return t.R=t.g.graph.url,_(D,v(t,t.g.graph.url),3)}for(D.g!=2&&(u=D.h,t.i.loadGraph(u)),a=Y(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(L=Y(t.g.listeners),H=L.next();!H.done;H=L.next())K=H.value,J(t,K);j=t.j,t.j={},t.setOptions(j),D.g=0})}o.reset=function(){var t=this;return gt(function(u){t.i&&(t.i.reset(),t.m={},t.s={}),u.g=0})},o.setOptions=function(t,u){var a=this;if(u=u||this.g.options){for(var b=[],S=[],L={},H=Y(Object.keys(t)),K=H.next();!K.done;L={L:L.L,M:L.M},K=H.next()){var j=K.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],K=u[j],K!==void 0&&(K.onChange&&(L.L=K.onChange,L.M=t[j],b.push(function(D){return function(){var $;return gt(function(ut){if(ut.g==1)return _(ut,D.L(D.M),2);$=ut.h,$===!0&&(a.o=!0),ut.g=0})}}(L))),K.graphOptionXref&&(j={valueNumber:K.type===1?t[j]:0,valueBoolean:K.type===0?t[j]:!1,valueString:K.type===2?t[j]:""},K=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),K.graphOptionXref),j),S.push(K))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var u,a,b,S,L,H,K;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}u=Y(t.A),a=u.next();case 3:if(a.done){j.g=5;break}return b=a.value,_(j,b(),4);case 4:a=u.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,L=Y(t.B),H=L.next();!H.done;H=L.next())K=H.value,S.push_back(K);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,j.g=0}})}o.initialize=function(){var t=this;return gt(function(u){return u.g==1?_(u,Ft(t),2):u.g!=3?_(u,Ct(t),3):_(u,l(t),0)})};function v(t,u){var a,b;return gt(function(S){return u in t.G?S.return(t.G[u]):(a=t.locateFile(u,""),b=fetch(a).then(function(L){return L.arrayBuffer()}),t.G[u]=b,S.return(b))})}o.overrideFile=function(t,u){this.i?this.i.overrideFile(t,u):this.C[t]=u},o.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},o.send=function(t,u){var a=this,b,S,L,H,K,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return a.g.inputs?(b=1e3*(u==null?performance.now():u),_(mt,a.D,2)):mt.return();case 2:return _(mt,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,L=Y(Object.keys(t)),H=L.next();!H.done;H=L.next())if(K=H.value,j=a.g.inputs[K]){t:{var pt=t[K];switch(j.type){case"video":var vt=a.m[j.stream];if(vt||(vt=new U(a.h,a.F),a.m[j.stream]=vt),vt.l===0&&(vt.l=vt.h.createTexture()),typeof HTMLVideoElement<"u"&&pt instanceof HTMLVideoElement)var Zt=pt.videoWidth,jt=pt.videoHeight;else typeof HTMLImageElement<"u"&&pt instanceof HTMLImageElement?(Zt=pt.naturalWidth,jt=pt.naturalHeight):(Zt=pt.width,jt=pt.height);jt={glName:vt.l,width:Zt,height:jt},Zt=vt.g,Zt.canvas.width=jt.width,Zt.canvas.height=jt.height,Zt.activeTexture(Zt.TEXTURE0),vt.h.bindTexture2d(vt.l),Zt.texImage2D(Zt.TEXTURE_2D,0,Zt.RGBA,Zt.RGBA,Zt.UNSIGNED_BYTE,pt),vt.h.bindTexture2d(0),vt=jt;break t;case"detections":for(vt=a.m[j.stream],vt||(vt=new yt(a.h),a.m[j.stream]=vt),vt.data||(vt.data=new vt.g.DetectionListData),vt.data.reset(pt.length),jt=0;jt<pt.length;++jt){Zt=pt[jt];var se=vt.data,le=se.setBoundingBox,Ke=jt,Rn=Zt.U,Ue=new Et;if(at(Ue,1,Rn.aa),at(Ue,2,Rn.ba),at(Ue,3,Rn.height),at(Ue,4,Rn.width),at(Ue,5,Rn.rotation),at(Ue,6,Rn.Z),Rn=Zn(Ue,Kt),le.call(se,Ke,Rn),Zt.P)for(se=0;se<Zt.P.length;++se){Ue=Zt.P[se];var Jn=!!Ue.visibility;le=vt.data,Ke=le.addNormalizedLandmark,Rn=jt,Ue=Object.assign(Object.assign({},Ue),{visibility:Jn?Ue.visibility:0}),Jn=new it,at(Jn,1,Ue.x),at(Jn,2,Ue.y),at(Jn,3,Ue.z),Ue.visibility&&at(Jn,4,Ue.visibility),Ue=Zn(Jn,It),Ke.call(le,Rn,Ue)}if(Zt.N)for(se=0;se<Zt.N.length;++se)le=vt.data,Ke=le.addClassification,Rn=jt,Ue=Zt.N[se],Jn=new V,at(Jn,2,Ue.$),Ue.index&&at(Jn,1,Ue.index),Ue.label&&at(Jn,3,Ue.label),Ue.displayName&&at(Jn,4,Ue.displayName),Ue=Zn(Jn,E),Ke.call(le,Rn,Ue)}vt=vt.data;break t;default:vt={}}}switch(D=vt,$=j.stream,j.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},D),{stream:$,timestamp:b}));break;case"detections":ut=D,ut.stream=$,ut.timestamp=b,S.pushDetectionList(ut);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(S),_(mt,a.D,4);case 4:S.delete(),mt.g=0}})};function x(t,u,a){var b,S,L,H,K,j,D,$,ut,mt,pt,vt,Zt,jt;return gt(function(se){switch(se.g){case 1:if(!a)return se.return(u);for(b={},S=0,L=Y(Object.keys(a)),H=L.next();!H.done;H=L.next())K=H.value,j=a[K],typeof j!="string"&&j.type==="texture"&&u[j.stream]!==void 0&&++S;1<S&&(t.H=!1),D=Y(Object.keys(a)),H=D.next();case 2:if(H.done){se.g=4;break}if($=H.value,ut=a[$],typeof ut=="string")return Zt=b,jt=$,_(se,T(t,$,u[ut]),14);if(mt=u[ut.stream],ut.type==="detection_list"){if(mt){for(var le=mt.getRectList(),Ke=mt.getLandmarksList(),Rn=mt.getClassificationsList(),Ue=[],Jn=0;Jn<le.size();++Jn){var yr=Sn(le.get(Jn),Et,wt);yr={U:{aa:ot(yr,1),ba:ot(yr,2),height:ot(yr,3),width:ot(yr,4),rotation:ot(yr,5,0),Z:me(yr,6)},P:ue(Sn(Ke.get(Jn),Ut,kt),it,1).map(A),N:N(Sn(Rn.get(Jn),P,lt))},Ue.push(yr)}le=Ue}else le=[];b[$]=le,se.g=7;break}if(ut.type==="proto_list"){if(mt){for(le=Array(mt.size()),Ke=0;Ke<mt.size();Ke++)le[Ke]=mt.get(Ke);mt.delete()}else le=[];b[$]=le,se.g=7;break}if(mt===void 0){se.g=3;break}if(ut.type==="float_list"){b[$]=mt,se.g=7;break}if(ut.type==="proto"){b[$]=mt,se.g=7;break}if(ut.type!=="texture")throw Error("Unknown output config type: '"+ut.type+"'");return pt=t.s[$],pt||(pt=new U(t.h,t.F),t.s[$]=pt),_(se,rt(pt,mt,t.H),13);case 13:vt=se.h,b[$]=vt;case 7:ut.transform&&b[$]&&(b[$]=ut.transform(b[$])),se.g=3;break;case 14:Zt[jt]=se.h;case 3:H=D.next(),se.g=2;break;case 4:return se.return(b)}})}function T(t,u,a){var b;return gt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[u],b||(b=new U(t.h,t.F),t.s[u]=b),S.return(rt(b,a,t.H))):S.return(void 0)})}function J(t,u){for(var a=u.name||"$",b=[].concat(k(u.wants)),S=new t.h.StringList,L=Y(u.wants),H=L.next();!H.done;H=L.next())S.push_back(H.value);L=t.h.PacketListener.implement({onResults:function(K){for(var j={},D=0;D<u.wants.length;++D)j[b[D]]=K.get(D);var $=t.listeners[a];$&&(t.D=x(t,j,u.outs).then(function(ut){ut=$(ut);for(var mt=0;mt<u.wants.length;++mt){var pt=j[b[mt]];typeof pt=="object"&&pt.hasOwnProperty&&pt.hasOwnProperty("delete")&&pt.delete()}ut&&(t.D=ut)}))}}),t.i.attachMultiListener(S,L),S.delete()}o.onResults=function(t,u){this.listeners[u||"$"]=t},Jt("Solution",Yt),Jt("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function i(t){var u=me(t,1),a=ae(t,h,3);return a={x:ot(a,1),y:ot(a,2),depth:ot(a,3)},t=ae(t,G,2),{id:u,point2d:a,point3d:{x:ot(t,1),y:ot(t,2),z:ot(t,3)}}}function d(t){var u=Sn(t,s,X);t=[],u=ue(u,B,2);for(var a=0;a<u.length;a++)t.push({id:me(u[a],1),keypoints:ue(u[a],M,2).map(i),visibility:ot(u[a],3),scale:nt(u[a],6),translation:nt(u[a],5),rotation:nt(u[a],4)});return t}function Z(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var c={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 f(t){var u=this;t=t||{},this.g=new Yt({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,L,H;return gt(function(K){return K.g==1?(b=a,u.g.setOptions({allowedLabels:e(b)},c),S=Z(b),L="object_detection_3d.tflite",_(K,v(u.g,S),2)):(H=K.h,u.g.overrideFile(L,H),K.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(S){return b=a,u.h=b,u.g.setOptions({focalX:b[0],focalY:b[1]},c),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(S){return b=a,u.i=b,u.g.setOptions({principalX:b[0],principalY:b[1]},c),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,L,H;return gt(function(K){if(u.h===void 0||u.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),K.return();b=a,S=[b[0]/2,b[1]/2],L=[u.h[0]/S[0],u.h[1]/S[1]],H=[u.i[0]/S[0],u.i[1]/S[1]],u.setOptions({focalLength:L,principalPoint:H}),K.g=0})}}}})}o=f.prototype,o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(t){this.g.onResults(t)},o.initialize=function(){var t=this;return gt(function(u){return _(u,t.g.initialize(),0)})},o.reset=function(){this.g.reset()},o.send=function(t){var u=this;return gt(function(a){return _(a,u.g.send(t),0)})},o.setOptions=function(t){this.g.setOptions(t)},Jt("Objectron",f),Jt("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]]),Jt("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}),Jt("VERSION","0.4.1636596145")}).call(Zi);const vi={};(function(){var o;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function m(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var y=m(this);function I(s,X){if(X)t:{var R=y;s=s.split(".");for(var w=0;w<s.length-1;w++){var N=s[w];if(!(N in R))break t;R=R[N]}s=s[s.length-1],w=R[s],X=X(w),X!=w&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}I("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(w+(A||"")+"_"+N++,A)}function R(A,U){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:U})}if(s)return s;R.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),I("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var w=y[X[R]];typeof w=="function"&&typeof w.prototype[s]!="function"&&r(w.prototype,s,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return s});function F(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function Y(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function k(s){if(!(s instanceof Array)){s=Y(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},O;if(typeof Object.setPrototypeOf=="function")O=Object.setPrototypeOf;else{var st;t:{var xt={a:!0},Vt={};try{Vt.__proto__=xt,st=Vt.a;break t}catch{}st=!1}O=st?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var dt=O;function ht(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,dt)dt(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(X,R);w&&Object.defineProperty(s,R,w)}else s[R]=X[R];s.ea=X.prototype}function Ht(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Lt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Ht.prototype.o=function(s){this.h=s};function At(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Ht.prototype.return=function(s){this.j={return:s},this.g=this.s};function _(s,X,R){return s.g=R,{value:X}}function Ee(s){this.g=new Ht,this.h=s}function an(s,X){Lt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(w){return{value:w,done:!0}},X,s.g.return):(s.g.return(X),$t(s))}function We(s,X,R,w){try{var N=X.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var A=N.value}catch(U){return s.g.i=null,At(s.g,U),$t(s)}return s.g.i=null,w.call(s.g,A),$t(s)}function $t(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,At(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function An(s){this.next=function(X){return Lt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=$t(s)),X},this.throw=function(X){return Lt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(At(s.g,X),X=$t(s)),X},this.return=function(X){return an(s,X)},this[Symbol.iterator]=function(){return this}}function de(s){function X(w){return s.next(w)}function R(w){return s.throw(w)}return new Promise(function(w,N){function A(U){U.done?w(U.value):Promise.resolve(U.value).then(X,R).then(A,N)}A(s.next())})}function gt(s){return de(new An(new Ee(s)))}I("Promise",function(s){function X(U){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{U(rt.resolve,rt.reject)}catch(q){rt.reject(q)}}function R(){this.g=null}function w(U){return U instanceof X?U:new X(function(rt){rt(U)})}if(s)return s;R.prototype.h=function(U){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(U)};var N=y.setTimeout;R.prototype.i=function(U){N(U,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var U=this.g;this.g=[];for(var rt=0;rt<U.length;++rt){var q=U[rt];U[rt]=null;try{q()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(U){this.i(function(){throw U})},X.prototype.j=function(){function U(yt){return function(Gt){q||(q=!0,yt.call(rt,Gt))}}var rt=this,q=!1;return{resolve:U(this.C),reject:U(this.l)}},X.prototype.C=function(U){if(U===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(U instanceof X)this.F(U);else{t:switch(typeof U){case"object":var rt=U!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.v(U):this.m(U)}},X.prototype.v=function(U){var rt=void 0;try{rt=U.then}catch(q){this.l(q);return}typeof rt=="function"?this.G(rt,U):this.m(U)},X.prototype.l=function(U){this.s(2,U)},X.prototype.m=function(U){this.s(1,U)},X.prototype.s=function(U,rt){if(this.h!=0)throw Error("Cannot settle("+U+", "+rt+"): Promise already settled in state"+this.h);this.h=U,this.i=rt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var U=this;N(function(){if(U.B()){var rt=y.console;typeof rt<"u"&&rt.error(U.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var U=y.CustomEvent,rt=y.Event,q=y.dispatchEvent;return typeof q>"u"?!0:(typeof U=="function"?U=new U("unhandledrejection",{cancelable:!0}):typeof rt=="function"?U=new rt("unhandledrejection",{cancelable:!0}):(U=y.document.createEvent("CustomEvent"),U.initCustomEvent("unhandledrejection",!1,!0,U)),U.promise=this,U.reason=this.i,q(U))},X.prototype.A=function(){if(this.g!=null){for(var U=0;U<this.g.length;++U)A.h(this.g[U]);this.g=null}};var A=new R;return X.prototype.F=function(U){var rt=this.j();U.J(rt.resolve,rt.reject)},X.prototype.G=function(U,rt){var q=this.j();try{U.call(rt,q.resolve,q.reject)}catch(yt){q.reject(yt)}},X.prototype.then=function(U,rt){function q(St,ft){return typeof St=="function"?function(Xt){try{yt(St(Xt))}catch(Yt){Gt(Yt)}}:ft}var yt,Gt,Mt=new X(function(St,ft){yt=St,Gt=ft});return this.J(q(U,yt),q(rt,Gt)),Mt},X.prototype.catch=function(U){return this.then(void 0,U)},X.prototype.J=function(U,rt){function q(){switch(yt.h){case 1:U(yt.i);break;case 2:rt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h(q):this.g.push(q),this.o=!0},X.resolve=w,X.reject=function(U){return new X(function(rt,q){q(U)})},X.race=function(U){return new X(function(rt,q){for(var yt=Y(U),Gt=yt.next();!Gt.done;Gt=yt.next())w(Gt.value).J(rt,q)})},X.all=function(U){var rt=Y(U),q=rt.next();return q.done?w([]):new X(function(yt,Gt){function Mt(Xt){return function(Yt){St[Xt]=Yt,ft--,ft==0&&yt(St)}}var St=[],ft=0;do St.push(void 0),ft++,w(q.value).J(Mt(St.length-1),Gt),q=rt.next();while(!q.done)})},X});function pn(s,X){s instanceof String&&(s+="");var R=0,w=!1,N={next:function(){if(!w&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return w=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var jn=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var w=arguments[R];if(w)for(var N in w)Object.prototype.hasOwnProperty.call(w,N)&&(s[N]=w[N])}return s};I("Object.assign",function(s){return s||jn}),I("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),I("Array.prototype.includes",function(s){return s||function(X,R){var w=this;w instanceof String&&(w=String(w));var N=w.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var A=w[R];if(A===X||Object.is(A,X))return!0}return!1}}),I("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),I("Array.prototype.keys",function(s){return s||function(){return pn(this,function(X){return X})}});var Re=this||self;function Jt(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var w;s.length&&(w=s.shift());)s.length||X===void 0?R[w]&&R[w]!==Object.prototype[w]?R=R[w]:R=R[w]={}:R[w]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function on(s){Te(s)}function Xn(s,X){on(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Fn(){on(Error("Failed to read varint, encoding is invalid."))}function xn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Nn,dn=typeof TextDecoder<"u",bn,kn=typeof TextEncoder<"u";function Hn(s){if(kn)s=(bn||(bn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,w=new Uint8Array(3*s.length),N=0;N<s.length;N++){var A=s.charCodeAt(N);if(128>A)w[R++]=A;else{if(2048>A)w[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&N<s.length){var U=s.charCodeAt(++N);if(56320<=U&&57343>=U){A=1024*(A-55296)+U-56320+65536,w[R++]=A>>18|240,w[R++]=A>>12&63|128,w[R++]=A>>6&63|128,w[R++]=A&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");A=65533}w[R++]=A>>12|224,w[R++]=A>>6&63|128}w[R++]=A&63|128}}s=w.subarray(0,R)}return s}var Oe={},Ae=null;function In(s){var X;X===void 0&&(X=0),Ye(),X=Oe[X];for(var R=Array(Math.floor(s.length/3)),w=X[64]||"",N=0,A=0;N<s.length-2;N+=3){var U=s[N],rt=s[N+1],q=s[N+2],yt=X[U>>2];U=X[(U&3)<<4|rt>>4],rt=X[(rt&15)<<2|q>>6],q=X[q&63],R[A++]=yt+U+rt+q}switch(yt=0,q=w,s.length-N){case 2:yt=s[N+1],q=X[(yt&15)<<2]||w;case 1:s=s[N],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+q+w}return R.join("")}function Vn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var w=new Uint8Array(R),N=0;return he(s,function(A){w[N++]=A}),w.subarray(0,N)}function he(s,X){function R(q){for(;w<s.length;){var yt=s.charAt(w++),Gt=Ae[yt];if(Gt!=null)return Gt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return q}Ye();for(var w=0;;){var N=R(-1),A=R(0),U=R(64),rt=R(64);if(rt===64&&N===-1)break;X(N<<2|A>>4),U!=64&&(X(A<<4&240|U>>2),rt!=64&&X(U<<6&192|rt))}}function Ye(){if(!Ae){Ae={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var w=s.concat(X[R].split(""));Oe[R]=w;for(var N=0;N<w.length;N++){var A=w[N];Ae[A]===void 0&&(Ae[A]=N)}}}}var Pe=typeof Uint8Array=="function",ne;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Pe&&s instanceof Uint8Array?In(s):null;return s};var sn=typeof Uint8Array.prototype.slice=="function";function Me(s,X,R){return X===R?ne||(ne=new Uint8Array(0)):sn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Ce(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Vn(s);if(s.constructor===Ve){if(s.g==null)var X=ne||(ne=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Pe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Vn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Bt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&Ie(this,s)}function Ie(s,X){s.h=Ce(X),s.l=0,s.i=s.h.length,s.g=s.l}Bt.prototype.reset=function(){this.g=this.l};function zt(s){s.g>s.i&&(s.j=!0,on(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],w=R&127;return 128>R?(s.g+=1,zt(s),w):(R=X[s.g+1],w|=(R&127)<<7,128>R?(s.g+=2,zt(s),w):(R=X[s.g+2],w|=(R&127)<<14,128>R?(s.g+=3,zt(s),w):(R=X[s.g+3],w|=(R&127)<<21,128>R?(s.g+=4,zt(s),w):(R=X[s.g+4],w|=(R&15)<<28,128>R?(s.g+=5,zt(s),w>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Fn(),w):(zt(s),w))))))}var we=[];function $e(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}$e.prototype.length=function(){return this.h},$e.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Me(s,0,X)};function Ot(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function je(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,we.length?(R=we.pop(),X&&(R.u=X.u),s&&Ie(R,s),s=R):s=new Bt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}je.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Xn(R,s.l),!1)}function Se(s){switch(s.h){case 0:if(s.h!=0)Se(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,zt(s);break t}X++}s.j=!0,Fn()}break;case 1:s=s.g,s.g+=8,zt(s);break;case 2:s.h!=2?Se(s):(X=ye(s.g),s=s.g,s.g+=X,zt(s));break;case 5:s=s.g,s.g+=4,zt(s);break;case 3:X=s.i;do{if(!_e(s)){s.j=!0,on(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,on(Error("Unmatched end-group tag")));break}Se(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Wn(s,X,R){s.N||(s=Me(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var ln=[];function Qe(){this.h=[],this.i=0,this.g=new $e}function un(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Ot(s.g,8*X+2),Ot(s.g,R.length),un(s,s.g.end()),un(s,R)}var Le=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(Le?s[Le]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function re(s){if(!s)return 0;var X;return Le?X=s[Le]:X=s.g,X==null?0:X}function De(s){return Array.isArray(s)&&Ge(s,1),s}function te(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Pe&&s!=null&&s instanceof Uint8Array?In(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Pt(s)?Nt(s,X):X(s)}function Nt(s,X){if(Array.isArray(s)){for(var R=Array(s.length),w=0;w<s.length;w++)R[w]=fe(s[w],X);return re(s)&1&&De(R),R}R={};for(w in s)R[w]=fe(s[w],X);return R}var Wt;function ie(s,X,R){var w=Wt;Wt=null,s||(s=w),w=this.constructor.ca,s||(s=w?[w]:[]),this.j=(w?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(w=this.g.length,s=w-1,w&&(w=this.g[s],Pt(w))){this.l=s-this.j,this.h=w;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(w=this.g[s])?De(w):this.g[s]=Fe):(ee(this),(w=this.h[s])?De(w):this.h[s]=Fe)}var Fe=Object.freeze(De([]));function ee(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function oe(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function nt(s,X,R){R=R===void 0?!0:R;var w=w===void 0?!1:w,N=oe(s,X,w);return N==null&&(N=Fe),N===Fe?(N=De([]),at(s,X,N,w)):R&&Array.isArray(N)&&re(N)&2&&(N=N.slice(),at(s,X,N,w)),N}function ot(s,X,R){return s=oe(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function at(s,X,R,w){(w===void 0?0:w)||X>=s.l?(ee(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var w=s.i[R];if(!w){var N=nt(s,R,!1);w=[];for(var A=Array.isArray(N)?!!(re(N)&2):!1,U=0;U<N.length;U++)w[U]=new X(N[U]),A&&te(w[U].g);A&&(te(w),Object.freeze(w)),s.i[R]=w}return w}function ae(s,X,R,w,N){var A=_t(s,w,X);R=R||new w,s=nt(s,X),N!=null?(A.splice(N,0,R),s.splice(N,0,ue(R))):(A.push(R),s.push(ue(R)))}ie.prototype.toJSON=function(){var s=ue(this);return Nt(s,hn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var w=0;w<R.length;w++)R[w]&&ue(R[w]);else R&&ue(R)}return s.g}ie.prototype.toString=function(){return ue(this).toString()};function Tt(s,X){return s=oe(s,X),s==null?0:s}function me(s,X){return s=oe(s,X),s==null?"":s}function Ne(s,X){if(s=s.m){un(X,X.g.end());for(var R=0;R<s.length;R++)un(X,s[R])}}function qe(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function(q,yt,Gt){return X(q,yt,Gt,R)};case 3:var w=s[1],N=s[2];return function(q,yt,Gt){return X(q,yt,Gt,w,N)};case 4:var A=s[1],U=s[2],rt=s[3];return function(q,yt,Gt){return X(q,yt,Gt,A,U,rt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function tn(s,X,R){for(;_e(X)&&X.h!=4;){var w=X.i,N=R[w];if(N){if(Array.isArray(N)&&(N=R[w]=qe(N)),!N(X,s,w)){w=X,N=s;var A=w.l;Se(w),Wn(w,N,A)}}else w=X,N=s,A=w.l,Se(w),Wn(w,N,A)}return s}function fn(s,X){var R=new Qe;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var w=R.h,N=w.length,A=X=0;A<N;A++){var U=w[A];U.length!==0&&(s.set(U,X),X+=U.length)}w=R.g,N=w.h,N!==0&&(s.set(w.g.subarray(0,N),X),w.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(ln.length){var w=ln.pop();s&&(Ie(w.g,s),w.i=-1,w.h=-1),s=w}else s=new je(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>ln.length&&ln.push(s)}}function He(s,X,R){if(X=oe(X,R),X!=null){Ot(s.g,8*R+5),s=s.g;var w=X;w=(R=0>w?1:0)?-w:w,w===0?0<1/w?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(w)?(Ze=0,Qt=2147483647):34028234663852886e22<w?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ze=0,Qt=(R<<31|w)>>>0):(X=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-X),w=Math.round(8388608*w),16777216<=w&&++X,Ze=0,Qt=(R<<31|X+127<<23|w&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function en(s,X,R){if(s.h!==5)return!1;s=s.g;var w=s.h[s.g],N=s.h[s.g+1],A=s.h[s.g+2],U=s.h[s.g+3];return s.g+=4,zt(s),N=(w<<0|N<<8|A<<16|U<<24)>>>0,s=2*(N>>31)+1,w=N>>>23&255,N&=8388607,at(X,R,w==255?N?NaN:1/0*s:w==0?s*Math.pow(2,-149)*N:s*Math.pow(2,w-150)*(N+Math.pow(2,23))),!0}function zn(s,X,R){if(s.h!==0)return!1;for(var w=s.g,N=128,A=0,U=s=0;4>U&&128<=N;U++)N=w.h[w.g++],A|=(N&127)<<7*U;if(128<=N&&(N=w.h[w.g++],A|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(U=0;5>U&&128<=N;U++)N=w.h[w.g++],s|=(N&127)<<7*U+3;return 128>N?(w=A>>>0,N=s>>>0,(s=N&2147483648)&&(w=~w+1>>>0,N=~N>>>0,w==0&&(N=N+1>>>0)),w=4294967296*N+(w>>>0),s=s?-w:w):(w.j=!0,Fn(),s=void 0),at(X,R,s),!0}function nn(s,X,R){return s.h!==0?!1:(at(X,R,ye(s.g)),!0)}function Je(s,X,R){if(s.h!==2)return!1;var w=ye(s.g);s=s.g;var N=s.g;s.g+=w,zt(s),s=s.h;var A;if(dn)(A=Nn)||(A=Nn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(N,N+w));else{w=N+w;for(var U=[],rt=null,q,yt,Gt;N<w;)q=s[N++],128>q?U.push(q):224>q?N>=w?U.push(65533):(yt=s[N++],194>q||(yt&192)!==128?(N--,U.push(65533)):U.push((q&31)<<6|yt&63)):240>q?N>=w-1?U.push(65533):(yt=s[N++],(yt&192)!==128||q===224&&160>yt||q===237&&160<=yt||((A=s[N++])&192)!==128?(N--,U.push(65533)):U.push((q&15)<<12|(yt&63)<<6|A&63)):244>=q?N>=w-2?U.push(65533):(yt=s[N++],(yt&192)!==128||(q<<28)+(yt-144)>>30!==0||((A=s[N++])&192)!==128||((Gt=s[N++])&192)!==128?(N--,U.push(65533)):(q=(q&7)<<18|(yt&63)<<12|(A&63)<<6|Gt&63,q-=65536,U.push((q>>10&1023)+55296,(q&1023)+56320))):U.push(65533),8192<=U.length&&(rt=xn(rt,U),U.length=0);A=xn(rt,U)}return at(X,R,A),!0}function Zn(s,X,R,w,N){if(s.h!==2)return!1;var A=new w,U=s.g.i,rt=ye(s.g),q=s.g.g+rt;if(s.g.i=q,N(A,s),N=q-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(rt+" bytes, instead read "+(rt-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=q,s.g.i=U,ae(X,R,A,w,void 0),!0}function Sn(s){ie.call(this,s)}var Be;ht(Sn,ie);function En(s,X){var R=oe(s,1);if(R!=null&&R!=null){Ot(X.g,8);var w=X.g;if(0<=R)Ot(w,R);else{for(var N=0;9>N;N++)Xe(w,R&127|128),R>>=7;Xe(w,1)}}He(X,s,2),w=oe(s,3),w!=null&&ve(X,3,Hn(w)),w=oe(s,4),w!=null&&ve(X,4,Hn(w)),Ne(s,X)}function rn(s,X){return tn(s,X,Be||(Be={1:nn,2:en,3:Je,4:Je}))}function vn(s){ie.call(this,s,-1,cn)}var Yn;ht(vn,ie),vn.prototype.addClassification=function(s,X){return ae(this,1,s,Sn,X),this};function Mn(s,X){return tn(s,X,Yn||(Yn={1:[Zn,Sn,rn]}))}var cn=[1];function Tn(s){ie.call(this,s)}var Dn;ht(Tn,ie);function $n(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5),Ne(s,X)}function wn(s,X){return tn(s,X,Dn||(Dn={1:en,2:en,3:en,4:en,5:en}))}function Cn(s){ie.call(this,s,-1,W)}var p;ht(Cn,ie);function V(s,X){return tn(s,X,p||(p={1:[Zn,Tn,wn]}))}var W=[1];function E(s){ie.call(this,s)}var P;ht(E,ie);function lt(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5);var R=oe(s,6);if(R!=null&&R!=null){Ot(X.g,48);var w=X.g,N=R;R=0>N,N=Math.abs(N);var A=N>>>0;for(N=Math.floor((N-A)/4294967296),N>>>=0,R&&(N=~N>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,N++,4294967295<N&&(N=0))),Qt=A,Ze=N,R=Qt,A=Ze;0<A||127<R;)Xe(w,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(w,R)}Ne(s,X)}function z(s,X){return tn(s,X,P||(P={1:en,2:en,3:en,4:en,5:en,6:zn}))}function it(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
106
106
|
|
|
107
|
-
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,Sn,1).map(function(X){return{index:Tt(X,1),X:ot(X,2),label:oe(X,3)!=null?me(X,3):void 0,displayName:oe(X,4)!=null?me(X,4):void 0}})}function It(s){return{x:ot(s,1),y:ot(s,2),z:ot(s,3),visibility:oe(s,4)!=null?ot(s,4):void 0}}function
|
|
107
|
+
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,Sn,1).map(function(X){return{index:Tt(X,1),X:ot(X,2),label:oe(X,3)!=null?me(X,3):void 0,displayName:oe(X,4)!=null?me(X,4):void 0}})}function It(s){return{x:ot(s,1),y:ot(s,2),z:ot(s,3),visibility:oe(s,4)!=null?ot(s,4):void 0}}function Ut(s){return _t(yn(s,Cn,V),Tn,1).map(It)}function kt(s,X){this.h=s,this.g=X,this.l=0}function qt(s,X,R){return Et(s,X),typeof s.g.canvas.transferToImageBitmap=="function"?Promise.resolve(s.g.canvas.transferToImageBitmap()):R?Promise.resolve(s.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(s.g.canvas):(s.i===void 0&&(s.i=document.createElement("canvas")),new Promise(function(w){s.i.height=s.g.canvas.height,s.i.width=s.g.canvas.width,s.i.getContext("2d",{}).drawImage(s.g.canvas,0,0,s.g.canvas.width,s.g.canvas.height),w(s.i)}))}function Et(s,X){var R=s.g;if(s.m===void 0){var w=it(R,`
|
|
108
108
|
attribute vec2 aVertex;
|
|
109
109
|
attribute vec2 aTex;
|
|
110
110
|
varying vec2 vTex;
|
|
@@ -119,20 +119,20 @@
|
|
|
119
119
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
120
120
|
}`,1),A=R.createProgram();if(R.attachShader(A,w),R.attachShader(A,N),R.linkProgram(A),!R.getProgramParameter(A,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
121
121
|
|
|
122
|
-
`+R.getProgramInfoLog(A));w=s.m=A,R.useProgram(w),N=R.getUniformLocation(w,"sampler0"),s.j={I:R.getAttribLocation(w,"aVertex"),H:R.getAttribLocation(w,"aTex"),da:N},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(N,0)}w=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(w.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(w.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(w.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(w.I),R.disableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function wt(s){this.g=s}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 Dt(s,X){return X+s}function ce(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return gt(function(s){switch(s.g){case 1:return s.m=2,_(s,WebAssembly.instantiate(Ut),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function ke(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=Y(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var w=s.options[R].default;w!==void 0&&(this.j[R]=typeof w=="function"?w():w)}}}o=ke.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,w,N,A,K,rt,q,yt,Gt,Mt;return gt(function(St){switch(St.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,_(St,ge(),2)):St.return();case 2:if(R=St.h,typeof window=="object")return ce("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ce("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),K=X.filter(function(ft){return ft.data!==void 0}),rt=X.filter(function(ft){return ft.data===void 0}),q=Promise.all(K.map(function(ft){var Xt=C(s,ft.url);if(ft.path!==void 0){var Yt=ft.path;Xt=Xt.then(function(Ht){return s.overrideFile(Yt,Ht),Promise.resolve(Ht)})}return Xt})),yt=Promise.all(rt.map(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R?pe(s.locateFile(ft.url,s.S)):Promise.resolve()})).then(function(){var ft,Xt,Yt;return gt(function(Ht){if(Ht.g==1)return ft=window.createMediapipeSolutionsWasm,Xt=window.createMediapipeSolutionsPackedAssets,Yt=s,_(Ht,ft(Xt),2);Yt.h=Ht.h,Ht.g=0})}),Gt=function(){return gt(function(ft){return s.g.graph&&s.g.graph.url?ft=_(ft,C(s,s.g.graph.url),0):(ft.g=0,ft=void 0),ft})}(),_(St,Promise.all([yt,q,Gt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=X.filter(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R}).map(function(ft){return s.locateFile(ft.url,s.S)}),importScripts.apply(null,k(w)),N=s,_(St,createMediapipeSolutionsWasm(Module),6);case 6:N.h=St.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),St.g=4;break;case 7:if(s.l=document.createElement("canvas"),Mt=s.l.getContext("webgl2",{}),!Mt&&(Mt=s.l.getContext("webgl",{}),!Mt))return alert("Failed to create WebGL canvas context when passing video frame."),St.return();s.D=Mt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,St.g=0}})}function g(s){var X,R,w,N,A,K,rt,q;return gt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,_(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=Y(Object.keys(s.B)),w=R.next();!w.done;w=R.next())N=w.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(A=Y(s.g.listeners),K=A.next();!K.done;K=A.next())rt=K.value,B(s,rt);q=s.j,s.j={},s.setOptions(q),yt.g=0})}o.reset=function(){var s=this;return gt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},o.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var w=[],N=[],A={},K=Y(Object.keys(s)),rt=K.next();!rt.done;A={K:A.K,L:A.L},rt=K.next()){var q=rt.value;q in this.j&&this.j[q]===s[q]||(this.j[q]=s[q],rt=X[q],rt!==void 0&&(rt.onChange&&(A.K=rt.onChange,A.L=s[q],w.push(function(yt){return function(){var Gt;return gt(function(Mt){if(Mt.g==1)return _(Mt,yt.K(yt.L),2);Gt=Mt.h,Gt===!0&&(R.o=!0),Mt.g=0})}}(A))),rt.graphOptionXref&&(q={valueNumber:rt.type===1?s[q]:0,valueBoolean:rt.type===0?s[q]:!1,valueString:rt.type===2?s[q]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),q),N.push(rt))))}(w.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(w))}};function G(s){var X,R,w,N,A,K,rt;return gt(function(q){switch(q.g){case 1:if(!s.o)return q.return();if(!s.v){q.g=2;break}X=Y(s.v),R=X.next();case 3:if(R.done){q.g=5;break}return w=R.value,_(q,w(),4);case 4:R=X.next(),q.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,A=Y(s.A),K=A.next();!K.done;K=A.next())rt=K.value,N.push_back(rt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,q.g=0}})}o.initialize=function(){var s=this;return gt(function(X){return X.g==1?_(X,h(s),2):X.g!=3?_(X,g(s),3):_(X,G(s),0)})};function C(s,X){var R,w;return gt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),w=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=w,N.return(w))})}o.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(s,X){var R=this,w,N,A,K,rt,q,yt,Gt,Mt;return gt(function(St){switch(St.g){case 1:return R.g.inputs?(w=1e3*(X==null?performance.now():X),_(St,R.C,2)):St.return();case 2:return _(St,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,A=Y(Object.keys(s)),K=A.next();!K.done;K=A.next())if(rt=K.value,q=R.g.inputs[rt]){t:{var ft=s[rt];switch(q.type){case"video":var Xt=R.m[q.stream];if(Xt||(Xt=new kt(R.h,R.D),R.m[q.stream]=Xt),Xt.l===0&&(Xt.l=Xt.h.createTexture()),typeof HTMLVideoElement<"u"&&ft instanceof HTMLVideoElement)var Yt=ft.videoWidth,Ht=ft.videoHeight;else typeof HTMLImageElement<"u"&&ft instanceof HTMLImageElement?(Yt=ft.naturalWidth,Ht=ft.naturalHeight):(Yt=ft.width,Ht=ft.height);Ht={glName:Xt.l,width:Yt,height:Ht},Yt=Xt.g,Yt.canvas.width=Ht.width,Yt.canvas.height=Ht.height,Yt.activeTexture(Yt.TEXTURE0),Xt.h.bindTexture2d(Xt.l),Yt.texImage2D(Yt.TEXTURE_2D,0,Yt.RGBA,Yt.RGBA,Yt.UNSIGNED_BYTE,ft),Xt.h.bindTexture2d(0),Xt=Ht;break t;case"detections":for(Xt=R.m[q.stream],Xt||(Xt=new wt(R.h),R.m[q.stream]=Xt),Xt.data||(Xt.data=new Xt.g.DetectionListData),Xt.data.reset(ft.length),Ht=0;Ht<ft.length;++Ht){Yt=ft[Ht];var Ct=Xt.data,l=Ct.setBoundingBox,v=Ht,x=Yt.T,T=new E;if(at(T,1,x.Y),at(T,2,x.Z),at(T,3,x.height),at(T,4,x.width),at(T,5,x.rotation),at(T,6,x.W),x=fn(T,lt),l.call(Ct,v,x),Yt.O)for(Ct=0;Ct<Yt.O.length;++Ct){T=Yt.O[Ct];var J=!!T.visibility;l=Xt.data,v=l.addNormalizedLandmark,x=Ht,T=Object.assign(Object.assign({},T),{visibility:J?T.visibility:0}),J=new Tn,at(J,1,T.x),at(J,2,T.y),at(J,3,T.z),T.visibility&&at(J,4,T.visibility),T=fn(J,$n),v.call(l,x,T)}if(Yt.M)for(Ct=0;Ct<Yt.M.length;++Ct)l=Xt.data,v=l.addClassification,x=Ht,T=Yt.M[Ct],J=new Sn,at(J,2,T.X),T.index&&at(J,1,T.index),T.label&&at(J,3,T.label),T.displayName&&at(J,4,T.displayName),T=fn(J,En),v.call(l,x,T)}Xt=Xt.data;break t;default:Xt={}}}switch(yt=Xt,Gt=q.stream,q.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Gt,timestamp:w}));break;case"detections":Mt=yt,Mt.stream=Gt,Mt.timestamp=w,N.pushDetectionList(Mt);break;default:throw Error("Unknown input config type: '"+q.type+"'")}}return R.i.send(N),_(St,R.C,4);case 4:N.delete(),St.g=0}})};function M(s,X,R){var w,N,A,K,rt,q,yt,Gt,Mt,St,ft,Xt,Yt,Ht;return gt(function(Ct){switch(Ct.g){case 1:if(!R)return Ct.return(X);for(w={},N=0,A=Y(Object.keys(R)),K=A.next();!K.done;K=A.next())rt=K.value,q=R[rt],typeof q!="string"&&q.type==="texture"&&X[q.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=Y(Object.keys(R)),K=yt.next();case 2:if(K.done){Ct.g=4;break}if(Gt=K.value,Mt=R[Gt],typeof Mt=="string")return Yt=w,Ht=Gt,_(Ct,Q(s,Gt,X[Mt]),14);if(St=X[Mt.stream],Mt.type==="detection_list"){if(St){for(var l=St.getRectList(),v=St.getLandmarksList(),x=St.getClassificationsList(),T=[],J=0;J<l.size();++J){var i=yn(l.get(J),E,z);i={T:{Y:ot(i,1),Z:ot(i,2),height:ot(i,3),width:ot(i,4),rotation:ot(i,5,0),W:Tt(i,6)},O:Kt(v.get(J)),M:bt(yn(x.get(J),vn,Mn))},T.push(i)}l=T}else l=[];w[Gt]=l,Ct.g=7;break}if(Mt.type==="proto_list"){if(St){for(l=Array(St.size()),v=0;v<St.size();v++)l[v]=St.get(v);St.delete()}else l=[];w[Gt]=l,Ct.g=7;break}if(St===void 0){Ct.g=3;break}if(Mt.type==="float_list"){w[Gt]=St,Ct.g=7;break}if(Mt.type==="proto"){w[Gt]=St,Ct.g=7;break}if(Mt.type!=="texture")throw Error("Unknown output config type: '"+Mt.type+"'");return ft=s.s[Gt],ft||(ft=new kt(s.h,s.D),s.s[Gt]=ft),_(Ct,qt(ft,St,s.G),13);case 13:Xt=Ct.h,w[Gt]=Xt;case 7:Mt.transform&&w[Gt]&&(w[Gt]=Mt.transform(w[Gt])),Ct.g=3;break;case 14:Yt[Ht]=Ct.h;case 3:K=yt.next(),Ct.g=2;break;case 4:return Ct.return(w)}})}function Q(s,X,R){var w;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(w=s.s[X],w||(w=new kt(s.h,s.D),s.s[X]=w),N.return(qt(w,R,s.G))):N.return(void 0)})}function B(s,X){for(var R=X.name||"$",w=[].concat(k(X.wants)),N=new s.h.StringList,A=Y(X.wants),K=A.next();!K.done;K=A.next())N.push_back(K.value);A=s.h.PacketListener.implement({onResults:function(rt){for(var q={},yt=0;yt<X.wants.length;++yt)q[w[yt]]=rt.get(yt);var Gt=s.listeners[R];Gt&&(s.C=M(s,q,X.outs).then(function(Mt){Mt=Gt(Mt);for(var St=0;St<X.wants.length;++St){var ft=q[w[St]];typeof ft=="object"&&ft.hasOwnProperty&&ft.hasOwnProperty("delete")&&ft.delete()}Mt&&(s.C=Mt)}))}}),s.i.attachMultiListener(N,A),N.delete()}o.onResults=function(s,X){this.listeners[X||"$"]=s},Jt("Solution",ke),Jt("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function tt(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new ke({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:tt(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Kt},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Kt},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var w,N,A;return gt(function(K){return K.g==1?(w=tt(R),N="third_party/mediapipe/modules/pose_landmark/"+w,_(K,C(X.g,w),2)):(A=K.h,X.g.overrideFile(N,A),K.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"}}}})}o=ct.prototype,o.reset=function(){this.g.reset()},o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(s){this.g.onResults(s)},o.initialize=function(){var s=this;return gt(function(X){return _(X,s.g.initialize(),0)})},o.send=function(s,X){var R=this;return gt(function(w){return _(w,R.g.send(s,X),0)})},o.setOptions=function(s){this.g.setOptions(s)},Jt("Pose",ct),Jt("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]]),Jt("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}),Jt("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}),Jt("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}),Jt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Jt("VERSION","0.5.1635988162")}).call(vi);const lr=class{constructor(){Rt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return yi.VERSION;case"face_mesh":return gi.VERSION;case"hands":return pi.VERSION;case"holistic":return bi.VERSION;case"objectron":return Zi.VERSION;case"selfie_segmentation":return mi.VERSION;case"pose":return vi.VERSION;default:return""}}initialize(n){return new Promise(async(r,m)=>{if(n.mediaPipeModelConfigArray.length==0){m("no model was selected");return}for(let y=0;y<n.mediaPipeModelConfigArray.length;y++){const I=n.mediaPipeModelConfigArray[y];if(this.mediapipeMap_.has(I.modelType)){m("setting same type is not supported");return}if(typeof I.listener!="function"){m(`[${I.modelType}] ResultsListener must be provided`);return}let H;switch(I.modelType){case"face_mesh":H=new gi.FaceMesh({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+Y});break;case"face_detection":H=new yi.FaceDetection({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+Y});break;case"hands":H=new pi.Hands({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+Y});break;case"holistic":H=new bi.Holistic({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+Y});break;case"objectron":H=new Zi.Objectron({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+Y});break;case"selfie_segmentation":H=new mi.SelfieSegmentation({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+Y});break;case"pose":H=new vi.Pose({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+Y});break;default:m("unknown model type");return}H.onResults(I.listener),I.options&&H.setOptions(I.options);try{await H.initialize(),this.mediapipeMap_.set(I.modelType,H)}catch(Y){m(Y);return}}r()})}close(n){return new Promise((r,m)=>{let y=[];if(n){let I=this.mediapipeMap_.get(n);if(I)this.mediapipeMap_.delete(n),y.push(I.close());else{m("model not exit");return}}else{for(const[I,H]of this.mediapipeMap_.entries())y.push(H.close());this.mediapipeMap_.clear()}Promise.all(y).then(()=>{r()}).catch(I=>{m(I)})})}send(n,r){return new Promise((m,y)=>{let I=[];if(r){let H=this.mediapipeMap_.get(r);if(H)I.push(H.send({image:n}));else{y("model not exit");return}}else for(const[H,Y]of this.mediapipeMap_.entries())I.push(Y.send({image:n}));Promise.all(I).then(()=>{m()}).catch(H=>{y(H)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,m]of this.mediapipeMap_.entries())m&&typeof m.reset=="function"&&m.reset()}};let Gi=lr;Rt(Gi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const ar=new WeakMap,Xi=new WeakMap,Br=new WeakMap,fo=Symbol("anyProducer"),Us=Promise.resolve(),Vi=Symbol("listenerAdded"),Wi=Symbol("listenerRemoved");let mo=!1;function Lr(o){if(typeof o!="string"&&typeof o!="symbol")throw new TypeError("eventName must be a string or a symbol")}function Ri(o){if(typeof o!="function")throw new TypeError("listener must be a function")}function Hr(o,n){const r=Xi.get(o);return r.has(n)||r.set(n,new Set),r.get(n)}function Ar(o,n){const r=typeof n=="string"||typeof n=="symbol"?n:fo,m=Br.get(o);return m.has(r)||m.set(r,new Set),m.get(r)}function t2(o,n,r){const m=Br.get(o);if(m.has(n))for(const y of m.get(n))y.enqueue(r);if(m.has(fo)){const y=Promise.all([n,r]);for(const I of m.get(fo))I.enqueue(y)}}function Ks(o,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},y=[];const I={enqueue(H){y.push(H),m()},finish(){r=!0,m()}};for(const H of n)Ar(o,H).add(I);return{async next(){return y?y.length===0?r?(y=void 0,this.next()):(await new Promise(H=>{m=H}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(H){y=void 0;for(const Y of n)Ar(o,Y).delete(I);return m(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Ms(o){if(o===void 0)return Bs;if(!Array.isArray(o))throw new TypeError("`methodNames` must be an array of strings");for(const n of o)if(!Bs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return o}const po=o=>o===Vi||o===Wi;class Zr{static mixin(n,r){return r=Ms(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const H of r)if(m.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new Zr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const I=H=>function(...Y){return this[n][H](...Y)};for(const H of r)Object.defineProperty(m.prototype,H,{enumerable:!1,value:I(H)});return m}}static get isDebugEnabled(){if(typeof process!="object")return mo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||mo}static set isDebugEnabled(n){mo=n}constructor(n={}){ar.set(this,new Set),Xi.set(this,new Map),Br.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,y,I)=>{try{I=JSON.stringify(I)}catch{I=`Object with the following keys failed to stringify: ${Object.keys(I).join(",")}`}typeof y=="symbol"&&(y=y.toString());const H=new Date,Y=`${H.getHours()}:${H.getMinutes()}:${H.getSeconds()}.${H.getMilliseconds()}`;console.log(`[${Y}][emittery:${r}][${m}] Event Name: ${y}
|
|
123
|
-
data: ${I}`)})}logIfDebugEnabled(n,r,m){(Zr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){Ri(r),n=Array.isArray(n)?n:[n];for(const m of n)Lr(m),
|
|
122
|
+
`+R.getProgramInfoLog(A));w=s.m=A,R.useProgram(w),N=R.getUniformLocation(w,"sampler0"),s.j={I:R.getAttribLocation(w,"aVertex"),H:R.getAttribLocation(w,"aTex"),da:N},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(N,0)}w=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(w.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(w.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(w.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(w.I),R.disableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function wt(s){this.g=s}var Kt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,X){return X+s}function ce(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return gt(function(s){switch(s.g){case 1:return s.m=2,_(s,WebAssembly.instantiate(Kt),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function ke(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=Y(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var w=s.options[R].default;w!==void 0&&(this.j[R]=typeof w=="function"?w():w)}}}o=ke.prototype,o.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,w,N,A,U,rt,q,yt,Gt,Mt;return gt(function(St){switch(St.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,_(St,ge(),2)):St.return();case 2:if(R=St.h,typeof window=="object")return ce("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ce("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),U=X.filter(function(ft){return ft.data!==void 0}),rt=X.filter(function(ft){return ft.data===void 0}),q=Promise.all(U.map(function(ft){var Xt=C(s,ft.url);if(ft.path!==void 0){var Yt=ft.path;Xt=Xt.then(function(Ft){return s.overrideFile(Yt,Ft),Promise.resolve(Ft)})}return Xt})),yt=Promise.all(rt.map(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R?pe(s.locateFile(ft.url,s.S)):Promise.resolve()})).then(function(){var ft,Xt,Yt;return gt(function(Ft){if(Ft.g==1)return ft=window.createMediapipeSolutionsWasm,Xt=window.createMediapipeSolutionsPackedAssets,Yt=s,_(Ft,ft(Xt),2);Yt.h=Ft.h,Ft.g=0})}),Gt=function(){return gt(function(ft){return s.g.graph&&s.g.graph.url?ft=_(ft,C(s,s.g.graph.url),0):(ft.g=0,ft=void 0),ft})}(),_(St,Promise.all([yt,q,Gt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=X.filter(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R}).map(function(ft){return s.locateFile(ft.url,s.S)}),importScripts.apply(null,k(w)),N=s,_(St,createMediapipeSolutionsWasm(Module),6);case 6:N.h=St.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),St.g=4;break;case 7:if(s.l=document.createElement("canvas"),Mt=s.l.getContext("webgl2",{}),!Mt&&(Mt=s.l.getContext("webgl",{}),!Mt))return alert("Failed to create WebGL canvas context when passing video frame."),St.return();s.D=Mt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,St.g=0}})}function g(s){var X,R,w,N,A,U,rt,q;return gt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,_(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=Y(Object.keys(s.B)),w=R.next();!w.done;w=R.next())N=w.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(A=Y(s.g.listeners),U=A.next();!U.done;U=A.next())rt=U.value,B(s,rt);q=s.j,s.j={},s.setOptions(q),yt.g=0})}o.reset=function(){var s=this;return gt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},o.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var w=[],N=[],A={},U=Y(Object.keys(s)),rt=U.next();!rt.done;A={K:A.K,L:A.L},rt=U.next()){var q=rt.value;q in this.j&&this.j[q]===s[q]||(this.j[q]=s[q],rt=X[q],rt!==void 0&&(rt.onChange&&(A.K=rt.onChange,A.L=s[q],w.push(function(yt){return function(){var Gt;return gt(function(Mt){if(Mt.g==1)return _(Mt,yt.K(yt.L),2);Gt=Mt.h,Gt===!0&&(R.o=!0),Mt.g=0})}}(A))),rt.graphOptionXref&&(q={valueNumber:rt.type===1?s[q]:0,valueBoolean:rt.type===0?s[q]:!1,valueString:rt.type===2?s[q]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),q),N.push(rt))))}(w.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(w))}};function G(s){var X,R,w,N,A,U,rt;return gt(function(q){switch(q.g){case 1:if(!s.o)return q.return();if(!s.v){q.g=2;break}X=Y(s.v),R=X.next();case 3:if(R.done){q.g=5;break}return w=R.value,_(q,w(),4);case 4:R=X.next(),q.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,A=Y(s.A),U=A.next();!U.done;U=A.next())rt=U.value,N.push_back(rt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,q.g=0}})}o.initialize=function(){var s=this;return gt(function(X){return X.g==1?_(X,h(s),2):X.g!=3?_(X,g(s),3):_(X,G(s),0)})};function C(s,X){var R,w;return gt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),w=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=w,N.return(w))})}o.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},o.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},o.send=function(s,X){var R=this,w,N,A,U,rt,q,yt,Gt,Mt;return gt(function(St){switch(St.g){case 1:return R.g.inputs?(w=1e3*(X==null?performance.now():X),_(St,R.C,2)):St.return();case 2:return _(St,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,A=Y(Object.keys(s)),U=A.next();!U.done;U=A.next())if(rt=U.value,q=R.g.inputs[rt]){t:{var ft=s[rt];switch(q.type){case"video":var Xt=R.m[q.stream];if(Xt||(Xt=new kt(R.h,R.D),R.m[q.stream]=Xt),Xt.l===0&&(Xt.l=Xt.h.createTexture()),typeof HTMLVideoElement<"u"&&ft instanceof HTMLVideoElement)var Yt=ft.videoWidth,Ft=ft.videoHeight;else typeof HTMLImageElement<"u"&&ft instanceof HTMLImageElement?(Yt=ft.naturalWidth,Ft=ft.naturalHeight):(Yt=ft.width,Ft=ft.height);Ft={glName:Xt.l,width:Yt,height:Ft},Yt=Xt.g,Yt.canvas.width=Ft.width,Yt.canvas.height=Ft.height,Yt.activeTexture(Yt.TEXTURE0),Xt.h.bindTexture2d(Xt.l),Yt.texImage2D(Yt.TEXTURE_2D,0,Yt.RGBA,Yt.RGBA,Yt.UNSIGNED_BYTE,ft),Xt.h.bindTexture2d(0),Xt=Ft;break t;case"detections":for(Xt=R.m[q.stream],Xt||(Xt=new wt(R.h),R.m[q.stream]=Xt),Xt.data||(Xt.data=new Xt.g.DetectionListData),Xt.data.reset(ft.length),Ft=0;Ft<ft.length;++Ft){Yt=ft[Ft];var Ct=Xt.data,l=Ct.setBoundingBox,v=Ft,x=Yt.T,T=new E;if(at(T,1,x.Y),at(T,2,x.Z),at(T,3,x.height),at(T,4,x.width),at(T,5,x.rotation),at(T,6,x.W),x=fn(T,lt),l.call(Ct,v,x),Yt.O)for(Ct=0;Ct<Yt.O.length;++Ct){T=Yt.O[Ct];var J=!!T.visibility;l=Xt.data,v=l.addNormalizedLandmark,x=Ft,T=Object.assign(Object.assign({},T),{visibility:J?T.visibility:0}),J=new Tn,at(J,1,T.x),at(J,2,T.y),at(J,3,T.z),T.visibility&&at(J,4,T.visibility),T=fn(J,$n),v.call(l,x,T)}if(Yt.M)for(Ct=0;Ct<Yt.M.length;++Ct)l=Xt.data,v=l.addClassification,x=Ft,T=Yt.M[Ct],J=new Sn,at(J,2,T.X),T.index&&at(J,1,T.index),T.label&&at(J,3,T.label),T.displayName&&at(J,4,T.displayName),T=fn(J,En),v.call(l,x,T)}Xt=Xt.data;break t;default:Xt={}}}switch(yt=Xt,Gt=q.stream,q.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Gt,timestamp:w}));break;case"detections":Mt=yt,Mt.stream=Gt,Mt.timestamp=w,N.pushDetectionList(Mt);break;default:throw Error("Unknown input config type: '"+q.type+"'")}}return R.i.send(N),_(St,R.C,4);case 4:N.delete(),St.g=0}})};function M(s,X,R){var w,N,A,U,rt,q,yt,Gt,Mt,St,ft,Xt,Yt,Ft;return gt(function(Ct){switch(Ct.g){case 1:if(!R)return Ct.return(X);for(w={},N=0,A=Y(Object.keys(R)),U=A.next();!U.done;U=A.next())rt=U.value,q=R[rt],typeof q!="string"&&q.type==="texture"&&X[q.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=Y(Object.keys(R)),U=yt.next();case 2:if(U.done){Ct.g=4;break}if(Gt=U.value,Mt=R[Gt],typeof Mt=="string")return Yt=w,Ft=Gt,_(Ct,Q(s,Gt,X[Mt]),14);if(St=X[Mt.stream],Mt.type==="detection_list"){if(St){for(var l=St.getRectList(),v=St.getLandmarksList(),x=St.getClassificationsList(),T=[],J=0;J<l.size();++J){var i=yn(l.get(J),E,z);i={T:{Y:ot(i,1),Z:ot(i,2),height:ot(i,3),width:ot(i,4),rotation:ot(i,5,0),W:Tt(i,6)},O:Ut(v.get(J)),M:bt(yn(x.get(J),vn,Mn))},T.push(i)}l=T}else l=[];w[Gt]=l,Ct.g=7;break}if(Mt.type==="proto_list"){if(St){for(l=Array(St.size()),v=0;v<St.size();v++)l[v]=St.get(v);St.delete()}else l=[];w[Gt]=l,Ct.g=7;break}if(St===void 0){Ct.g=3;break}if(Mt.type==="float_list"){w[Gt]=St,Ct.g=7;break}if(Mt.type==="proto"){w[Gt]=St,Ct.g=7;break}if(Mt.type!=="texture")throw Error("Unknown output config type: '"+Mt.type+"'");return ft=s.s[Gt],ft||(ft=new kt(s.h,s.D),s.s[Gt]=ft),_(Ct,qt(ft,St,s.G),13);case 13:Xt=Ct.h,w[Gt]=Xt;case 7:Mt.transform&&w[Gt]&&(w[Gt]=Mt.transform(w[Gt])),Ct.g=3;break;case 14:Yt[Ft]=Ct.h;case 3:U=yt.next(),Ct.g=2;break;case 4:return Ct.return(w)}})}function Q(s,X,R){var w;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(w=s.s[X],w||(w=new kt(s.h,s.D),s.s[X]=w),N.return(qt(w,R,s.G))):N.return(void 0)})}function B(s,X){for(var R=X.name||"$",w=[].concat(k(X.wants)),N=new s.h.StringList,A=Y(X.wants),U=A.next();!U.done;U=A.next())N.push_back(U.value);A=s.h.PacketListener.implement({onResults:function(rt){for(var q={},yt=0;yt<X.wants.length;++yt)q[w[yt]]=rt.get(yt);var Gt=s.listeners[R];Gt&&(s.C=M(s,q,X.outs).then(function(Mt){Mt=Gt(Mt);for(var St=0;St<X.wants.length;++St){var ft=q[w[St]];typeof ft=="object"&&ft.hasOwnProperty&&ft.hasOwnProperty("delete")&&ft.delete()}Mt&&(s.C=Mt)}))}}),s.i.attachMultiListener(N,A),N.delete()}o.onResults=function(s,X){this.listeners[X||"$"]=s},Jt("Solution",ke),Jt("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function tt(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new ke({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:tt(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var w,N,A;return gt(function(U){return U.g==1?(w=tt(R),N="third_party/mediapipe/modules/pose_landmark/"+w,_(U,C(X.g,w),2)):(A=U.h,X.g.overrideFile(N,A),U.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"}}}})}o=ct.prototype,o.reset=function(){this.g.reset()},o.close=function(){return this.g.close(),Promise.resolve()},o.onResults=function(s){this.g.onResults(s)},o.initialize=function(){var s=this;return gt(function(X){return _(X,s.g.initialize(),0)})},o.send=function(s,X){var R=this;return gt(function(w){return _(w,R.g.send(s,X),0)})},o.setOptions=function(s){this.g.setOptions(s)},Jt("Pose",ct),Jt("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]]),Jt("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}),Jt("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}),Jt("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}),Jt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Jt("VERSION","0.5.1635988162")}).call(vi);const lr=class{constructor(){Rt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return yi.VERSION;case"face_mesh":return gi.VERSION;case"hands":return pi.VERSION;case"holistic":return bi.VERSION;case"objectron":return Zi.VERSION;case"selfie_segmentation":return mi.VERSION;case"pose":return vi.VERSION;default:return""}}initialize(n){return new Promise(async(r,m)=>{if(n.mediaPipeModelConfigArray.length==0){m("no model was selected");return}for(let y=0;y<n.mediaPipeModelConfigArray.length;y++){const I=n.mediaPipeModelConfigArray[y];if(this.mediapipeMap_.has(I.modelType)){m("setting same type is not supported");return}if(typeof I.listener!="function"){m(`[${I.modelType}] ResultsListener must be provided`);return}let F;switch(I.modelType){case"face_mesh":F=new gi.FaceMesh({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+Y});break;case"face_detection":F=new yi.FaceDetection({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+Y});break;case"hands":F=new pi.Hands({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+Y});break;case"holistic":F=new bi.Holistic({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+Y});break;case"objectron":F=new Zi.Objectron({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+Y});break;case"selfie_segmentation":F=new mi.SelfieSegmentation({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+Y});break;case"pose":F=new vi.Pose({locateFile:(Y,k)=>(I.assetsUri||lr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+Y});break;default:m("unknown model type");return}F.onResults(I.listener),I.options&&F.setOptions(I.options);try{await F.initialize(),this.mediapipeMap_.set(I.modelType,F)}catch(Y){m(Y);return}}r()})}close(n){return new Promise((r,m)=>{let y=[];if(n){let I=this.mediapipeMap_.get(n);if(I)this.mediapipeMap_.delete(n),y.push(I.close());else{m("model not exit");return}}else{for(const[I,F]of this.mediapipeMap_.entries())y.push(F.close());this.mediapipeMap_.clear()}Promise.all(y).then(()=>{r()}).catch(I=>{m(I)})})}send(n,r){return new Promise((m,y)=>{let I=[];if(r){let F=this.mediapipeMap_.get(r);if(F)I.push(F.send({image:n}));else{y("model not exit");return}}else for(const[F,Y]of this.mediapipeMap_.entries())I.push(Y.send({image:n}));Promise.all(I).then(()=>{m()}).catch(F=>{y(F)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,m]of this.mediapipeMap_.entries())m&&typeof m.reset=="function"&&m.reset()}};let Gi=lr;Rt(Gi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const ar=new WeakMap,Xi=new WeakMap,Br=new WeakMap,fo=Symbol("anyProducer"),Ks=Promise.resolve(),Vi=Symbol("listenerAdded"),Wi=Symbol("listenerRemoved");let mo=!1;function Lr(o){if(typeof o!="string"&&typeof o!="symbol")throw new TypeError("eventName must be a string or a symbol")}function Ri(o){if(typeof o!="function")throw new TypeError("listener must be a function")}function Fr(o,n){const r=Xi.get(o);return r.has(n)||r.set(n,new Set),r.get(n)}function Ar(o,n){const r=typeof n=="string"||typeof n=="symbol"?n:fo,m=Br.get(o);return m.has(r)||m.set(r,new Set),m.get(r)}function t2(o,n,r){const m=Br.get(o);if(m.has(n))for(const y of m.get(n))y.enqueue(r);if(m.has(fo)){const y=Promise.all([n,r]);for(const I of m.get(fo))I.enqueue(y)}}function Us(o,n){n=Array.isArray(n)?n:[n];let r=!1,m=()=>{},y=[];const I={enqueue(F){y.push(F),m()},finish(){r=!0,m()}};for(const F of n)Ar(o,F).add(I);return{async next(){return y?y.length===0?r?(y=void 0,this.next()):(await new Promise(F=>{m=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const Y of n)Ar(o,Y).delete(I);return m(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Ms(o){if(o===void 0)return Bs;if(!Array.isArray(o))throw new TypeError("`methodNames` must be an array of strings");for(const n of o)if(!Bs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return o}const po=o=>o===Vi||o===Wi;class Zr{static mixin(n,r){return r=Ms(r),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const F of r)if(m.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new Zr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const I=F=>function(...Y){return this[n][F](...Y)};for(const F of r)Object.defineProperty(m.prototype,F,{enumerable:!1,value:I(F)});return m}}static get isDebugEnabled(){if(typeof process!="object")return mo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||mo}static set isDebugEnabled(n){mo=n}constructor(n={}){ar.set(this,new Set),Xi.set(this,new Map),Br.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,m,y,I)=>{try{I=JSON.stringify(I)}catch{I=`Object with the following keys failed to stringify: ${Object.keys(I).join(",")}`}typeof y=="symbol"&&(y=y.toString());const F=new Date,Y=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${Y}][emittery:${r}][${m}] Event Name: ${y}
|
|
123
|
+
data: ${I}`)})}logIfDebugEnabled(n,r,m){(Zr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,m)}on(n,r){Ri(r),n=Array.isArray(n)?n:[n];for(const m of n)Lr(m),Fr(this,m).add(r),this.logIfDebugEnabled("subscribe",m,void 0),po(m)||this.emit(Vi,{eventName:m,listener:r});return this.off.bind(this,n,r)}off(n,r){Ri(r),n=Array.isArray(n)?n:[n];for(const m of n)Lr(m),Fr(this,m).delete(r),this.logIfDebugEnabled("unsubscribe",m,void 0),po(m)||this.emit(Wi,{eventName:m,listener:r})}once(n){return new Promise(r=>{const m=this.on(n,y=>{m(),r(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Lr(r);return Us(this,n)}async emit(n,r){Lr(n),this.logIfDebugEnabled("emit",n,r),t2(this,n,r);const m=Fr(this,n),y=ar.get(this),I=[...m],F=po(n)?[]:[...y];await Ks,await Promise.all([...I.map(async Y=>{if(m.has(Y))return Y(r)}),...F.map(async Y=>{if(y.has(Y))return Y(n,r)})])}async emitSerial(n,r){Lr(n),this.logIfDebugEnabled("emitSerial",n,r);const m=Fr(this,n),y=ar.get(this),I=[...m],F=[...y];await Ks;for(const Y of I)m.has(Y)&&await Y(r);for(const Y of F)y.has(Y)&&await Y(n,r)}onAny(n){return Ri(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ar.get(this).add(n),this.emit(Vi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Us(this)}offAny(n){Ri(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Wi,{listener:n}),ar.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){Fr(this,r).clear();const m=Ar(this,r);for(const y of m)y.finish();m.clear()}else{ar.get(this).clear();for(const m of Xi.get(this).values())m.clear();for(const m of Br.get(this).values()){for(const y of m)y.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const m of n){if(typeof m=="string"){r+=ar.get(this).size+Fr(this,m).size+Ar(this,m).size+Ar(this).size;continue}typeof m<"u"&&Lr(m),r+=ar.get(this).size;for(const y of Xi.get(this).values())r+=y.size;for(const y of Br.get(this).values())r+=y.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Ms(r);for(const m of r){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const Bs=Object.getOwnPropertyNames(Zr.prototype).filter(o=>o!=="constructor");Object.defineProperty(Zr,"listenerAdded",{value:Vi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Zr,"listenerRemoved",{value:Wi,writable:!1,enumerable:!0,configurable:!1});var As=Zr,vr=(o=>(o[o.INIT=0]="INIT",o[o.FORWARD=1]="FORWARD",o[o.TERMINATE=2]="TERMINATE",o))(vr||{});function js(o){return[ImageBitmap,ReadableStream,WritableStream].some(n=>o instanceof n)}let e2=0;function bo(o,n,r,m,y){const I=e2++;return o.postMessage({id:I,type:n,functionName:r,args:m},m.filter(F=>js(F))),new Promise(F=>{y.set(I,F)})}async function n2(o,n,r){const m=new n;if(m.addEventListener("message",({data:y})=>{var I;(I=r.get(y.id))==null||I(y.result),r.delete(y.id)}),!await bo(m,vr.INIT,"",[o.workerId],r))throw"Failed to instantiate workerized class";return m}async function r2(o,n,r){const m={};return Object.getOwnPropertyNames(o.prototype).forEach(y=>{m[y]=(...I)=>bo(n,vr.FORWARD,y,I,r)}),m.terminate=async(...y)=>{const I=await bo(n,vr.TERMINATE,"",y,r);return n.terminate(),m.worker=void 0,I},m.worker=n,m}async function i2(o,n){const r=new Map,m=await n2(o,n,r);return r2(o,m,r)}function yo(o,n){const{id:r}=o,m=Array.isArray(n)?n:[n];postMessage({id:r,result:n},m.filter(y=>js(y)))}async function o2(o,n){const{functionName:r,args:m}=o;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;yo(o,await n.instance[r](...m!=null?m:[]))}function zs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}const Os={};function s2(o,n){n.workerId=o,zs()&&(Os[n.workerId]=n)}function l2(o,n){if(!o.args)throw"Missing className while initializing worker";const[r]=o.args,m=Os[r];if(m)n.instance=new m(o.args.slice(1));else throw`unknown worker class ${r}`;yo(o,typeof n.instance!==void 0)}async function u2(o,n){const{args:r}=o;if(!n.instance)throw"instance not initialized";let m;n.instance.terminate&&(m=await n.instance.terminate(...r!=null?r:[])),yo(o,m)}function c2(){const o={};onmessage=async n=>{const r=n.data;switch(r.type){case vr.INIT:l2(r,o);break;case vr.FORWARD:o2(r,o);break;case vr.TERMINATE:u2(r,o);break}}}zs()&&c2();class Ps{static async createVideoReadable(n){return new Promise((r,m)=>{const y=document.createElement("video");let I=new AbortController,F=new AbortController;y.addEventListener("canplay",()=>{I.abort(),y.muted=!0,y.loop=!0,y.play().then(()=>{try{const Y=y.captureStream(),k=new MediaStreamTrackProcessor(Y.getVideoTracks()[0]);r(k.readable)}catch(Y){m(Y)}})},{once:!0,signal:F.signal}),y.addEventListener("error",Y=>{F.abort(),m("loading error:"+Y)},{once:!0,signal:I.signal}),y.crossOrigin="anonymous",y.src=n})}static async createImageCanvas(n){const m=await(await fetch(n)).blob();return await createImageBitmap(m)}}async function _s(o){return new Promise(n=>{setTimeout(()=>{n()},o)})}var Qs=(o=>(o.PUSH="PUSH",o.POP="POP",o))(Qs||{});class a2{constructor(n){Rt(this,"context");Rt(this,"extension");Rt(this,"queries",[]);Rt(this,"activeQuery");this.context=n,this.extension=n.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(n){this.createQuery("PUSH",n)}popContext(n){this.createQuery("POP",n)}createQuery(n,r){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:r,action:n,query:this.activeQuery})}async getResolvedQueries(){const n=(await Promise.all([...this.queries].map(r=>this.resolveQuery(r)))).filter(r=>r);for(let r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return n}async resolveQuery(n){if(!await this.awaitQueryAvailable(n)){console.log("Unawaitable query",n);return}if(this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){console.log("Disjointed query",n);return}return{...n,duration:this.context.getQueryParameter(n.query,this.context.QUERY_RESULT),timestamp:0}}async awaitQueryAvailable(n){for(let r=0;r<10;++r){if(this.context.getQueryParameter(n.query,this.context.QUERY_RESULT_AVAILABLE))return n;await _s(200)}}}/* @license twgl.js 5.2.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
124
124
|
Available via the MIT license.
|
|
125
|
-
see: http://github.com/greggman/twgl.js for details */const go=5120,jr=5121,Zo=5122,vo=5123,Go=5124,Xo=5125,Vo=5126,d2=32819,h2=32820,f2=33635,m2=5131,p2=33640,b2=35899,y2=35902,g2=36269,Z2=34042,Ds={};{const o=Ds;o[go]=Int8Array,o[jr]=Uint8Array,o[Zo]=Int16Array,o[vo]=Uint16Array,o[Go]=Int32Array,o[Xo]=Uint32Array,o[Vo]=Float32Array,o[d2]=Uint16Array,o[h2]=Uint16Array,o[f2]=Uint16Array,o[m2]=Uint16Array,o[p2]=Uint32Array,o[b2]=Uint32Array,o[y2]=Uint32Array,o[g2]=Uint32Array,o[Z2]=Uint32Array}function Wo(o){if(o instanceof Int8Array)return go;if(o instanceof Uint8Array||o instanceof Uint8ClampedArray)return jr;if(o instanceof Int16Array)return Zo;if(o instanceof Uint16Array)return vo;if(o instanceof Int32Array)return Go;if(o instanceof Uint32Array)return Xo;if(o instanceof Float32Array)return Vo;throw new Error("unsupported typed array type")}function $s(o){if(o===Int8Array)return go;if(o===Uint8Array||o===Uint8ClampedArray)return jr;if(o===Int16Array)return Zo;if(o===Uint16Array)return vo;if(o===Int32Array)return Go;if(o===Uint32Array)return Xo;if(o===Float32Array)return Vo;throw new Error("unsupported typed array type")}function qs(o){const n=Ds[o];if(!n)throw new Error("unknown gl type");return n}const xi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function tl(...o){console.error(...o)}const el=new Map;function Ii(o,n){if(!o||typeof o!="object")return!1;let r=el.get(n);r||(r=new WeakMap,el.set(n,r));let m=r.get(o);if(m===void 0){const y=Object.prototype.toString.call(o);m=y.substring(8,y.length-1)===n,r.set(o,m)}return m}function v2(o,n){return typeof WebGLBuffer<"u"&&Ii(n,"WebGLBuffer")}function G2(o,n){return typeof WebGLRenderbuffer<"u"&&Ii(n,"WebGLRenderbuffer")}function Ro(o,n){return typeof WebGLTexture<"u"&&Ii(n,"WebGLTexture")}function X2(o,n){return typeof WebGLSampler<"u"&&Ii(n,"WebGLSampler")}const nl=35044,Gr=34962,V2=34963,W2=34660,R2=5120,x2=5121,I2=5122,S2=5123,Y2=5124,T2=5125,rl=5126,il={attribPrefix:""};function w2(o,n,r,m,y){o.bindBuffer(n,r),o.bufferData(n,m,y||nl)}function ol(o,n,r,m){if(v2(o,n))return n;r=r||Gr;const y=o.createBuffer();return w2(o,r,y,n,m),y}function sl(o){return o==="indices"}function L2(o){return o===Int8Array||o===Uint8Array}function H2(o){return o.length?o:o.data}const F2=/coord|texture/i,C2=/color|colour/i;function N2(o,n){let r;if(F2.test(o)?r=2:C2.test(o)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${o}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function J2(o,n,r){return o.numComponents||o.size||N2(n,r||H2(o).length)}function ll(o,n){if(xi(o))return o;if(xi(o.data))return o.data;Array.isArray(o)&&(o={data:o});let r=o.type?xo(o.type):void 0;return r||(sl(n)?r=Uint16Array:r=Float32Array),new r(o.data)}function k2(o){return typeof o=="number"?o:o?$s(o):rl}function xo(o){return typeof o=="number"?qs(o):o||Float32Array}function E2(o,n){return{buffer:n.buffer,numValues:2*3*4,type:k2(n.type),arrayType:xo(n.type)}}function U2(o,n){const r=n.data||n,m=xo(n.type),y=r*m.BYTES_PER_ELEMENT,I=o.createBuffer();return o.bindBuffer(Gr,I),o.bufferData(Gr,y,n.drawType||nl),{buffer:I,numValues:r,type:$s(m),arrayType:m}}function K2(o,n,r){const m=ll(n,r);return{arrayType:m.constructor,buffer:ol(o,m,void 0,n.drawType),type:Wo(m),numValues:0}}function M2(o,n){const r={};return Object.keys(n).forEach(function(m){if(!sl(m)){const y=n[m],I=y.attrib||y.name||y.attribName||il.attribPrefix+m;if(y.value){if(!Array.isArray(y.value)&&!xi(y.value))throw new Error("array.value is not array or typedarray");r[I]={value:y.value}}else{let H;y.buffer&&y.buffer instanceof WebGLBuffer?H=E2:typeof y=="number"||typeof y.data=="number"?H=U2:H=K2;const{buffer:Y,type:k,numValues:nt,arrayType:P}=H(o,y,m),st=y.normalize!==void 0?y.normalize:L2(P),xt=J2(y,m,nt);r[I]={buffer:Y,numComponents:xt,type:k,normalize:st,stride:y.stride||0,offset:y.offset||0,divisor:y.divisor===void 0?void 0:y.divisor,drawType:y.drawType}}}}),o.bindBuffer(Gr,null),r}function B2(o,n){return n===R2||n===x2?1:n===I2||n===S2?2:n===Y2||n===T2||n===rl?4:0}const Io=["position","positions","a_position"];function A2(o,n){let r,m;for(m=0;m<Io.length&&(r=Io[m],!(r in n||(r=il.attribPrefix+r,r in n)));++m);m===Io.length&&(r=Object.keys(n)[0]);const y=n[r];if(!y.buffer)return 1;o.bindBuffer(Gr,y.buffer);const I=o.getBufferParameter(Gr,W2);o.bindBuffer(Gr,null);const H=B2(o,y.type),Y=I/H,k=y.numComponents||y.size,nt=Y/k;if(nt%1!==0)throw new Error(`numComponents ${k} not correct for length ${length}`);return nt}function j2(o,n,r){const m=M2(o,n),y=Object.assign({},r||{});y.attribs=Object.assign({},r?r.attribs:{},m);const I=n.indices;if(I){const H=ll(I,"indices");y.indices=ol(o,H,V2),y.numElements=H.length,y.elementType=Wo(H)}else y.numElements||(y.numElements=A2(o,y.attribs));return y}function zr(o){return!!o.texStorage2D}const ul=function(){const o={},n={};function r(m){const y=m.constructor.name;if(!o[y]){for(const I in m)if(typeof m[I]=="number"){const H=n[m[I]];n[m[I]]=H?`${H} | ${I}`:I}o[y]=!0}}return function(y,I){return r(y),n[I]||(typeof I=="number"?`0x${I.toString(16)}`:I)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Pr=xi,cl=function(){let o;return function(){return o=o||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),o}}(),al=6406,sr=6407,Gn=6408,dl=6409,hl=6410,Or=6402,fl=34041,Si=33071,z2=9728,P2=9729,hr=3553,fr=34067,Xr=32879,Vr=35866,So=34069,O2=34070,_2=34071,Q2=34072,D2=34073,$2=34074,Yo=10241,To=10240,Yi=10242,Ti=10243,ml=32882,q2=33082,t1=33083,e1=33084,n1=33085,wo=3317,pl=3314,bl=32878,yl=3316,gl=3315,Zl=32877,r1=37443,i1=37441,o1=37440,s1=33321,l1=36756,u1=33325,c1=33326,a1=33330,d1=33329,h1=33338,f1=33337,m1=33340,p1=33339,b1=33323,y1=36757,g1=33327,Z1=33328,v1=33336,G1=33335,X1=33332,V1=33331,W1=33334,R1=33333,x1=32849,I1=35905,S1=36194,Y1=36758,T1=35898,w1=35901,L1=34843,H1=34837,F1=36221,C1=36239,N1=36215,J1=36233,k1=36209,E1=36227,U1=32856,K1=35907,M1=36759,B1=32855,A1=32854,j1=32857,z1=34842,P1=34836,O1=36220,_1=36238,Q1=36975,D1=36214,$1=36232,q1=36226,ta=36208,ea=33189,na=33190,ra=36012,ia=36013,oa=35056,mr=5120,gn=5121,wi=5122,Fr=5123,Li=5124,Wr=5125,Bn=5126,vl=32819,Gl=32820,Xl=33635,rr=5131,_r=36193,Lo=33640,sa=35899,la=35902,ua=36269,ca=34042,Hi=33319,Cr=33320,Fi=6403,Nr=36244,Jr=36248,Rr=36249;let Ho;function Ci(o){if(!Ho){const n={};n[al]={textureFormat:al,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,rr,_r,Bn]},n[dl]={textureFormat:dl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,rr,_r,Bn]},n[hl]={textureFormat:hl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,rr,_r,Bn]},n[sr]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,rr,_r,Bn,Xl]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,rr,_r,Bn,vl,Gl]},n[Or]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Wr,Fr]},n[s1]={textureFormat:Fi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[l1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[mr]},n[u1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Bn,rr]},n[c1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[a1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[d1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[mr]},n[X1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Fr]},n[V1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wi]},n[W1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[R1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[b1]={textureFormat:Hi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[y1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[mr]},n[g1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Bn,rr]},n[Z1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Bn]},n[v1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[G1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[mr]},n[h1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Fr]},n[f1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wi]},n[m1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Wr]},n[p1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[x1]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[I1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[S1]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,Xl]},n[Y1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[mr]},n[T1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,rr,sa]},n[w1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,rr,la]},n[L1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Bn,rr]},n[H1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Bn]},n[F1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[C1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[mr]},n[N1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Fr]},n[J1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[wi]},n[k1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Wr]},n[E1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Li]},n[U1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[K1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[M1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[mr]},n[B1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Gl,Lo]},n[A1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,vl]},n[j1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Lo]},n[z1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Bn,rr]},n[P1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Bn]},n[O1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[_1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[mr]},n[Q1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Lo]},n[D1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Fr]},n[$1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[wi]},n[q1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Li]},n[ta]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Wr]},n[ea]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Fr,Wr]},n[na]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[ra]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[oa]={textureFormat:fl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ca]},n[ia]={textureFormat:fl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ua]},Object.keys(n).forEach(function(r){const m=n[r];m.bytesPerElementMap={},m.bytesPerElement.forEach(function(y,I){const H=m.type[I];m.bytesPerElementMap[H]=y})}),Ho=n}return Ho[o]}function aa(o,n){const r=Ci(o);if(!r)throw"unknown internal format";const m=r.bytesPerElementMap[n];if(m===void 0)throw"unknown internal format";return m}function Qr(o){const n=Ci(o);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function Vl(o){return(o&o-1)===0}function da(o,n,r,m){if(!zr(o))return Vl(n)&&Vl(r);const y=Ci(m);if(!y)throw"unknown internal format";return y.colorRenderable&&y.textureFilterable}function ha(o){const n=Ci(o);if(!n)throw"unknown internal format";return n.textureFilterable}function fa(o,n,r){return Pr(n)?Wo(n):r||gn}function Ni(o,n,r,m,y){if(y%1!==0)throw"can't guess dimensions";if(!r&&!m){const I=Math.sqrt(y/(n===fr?6:1));I%1===0?(r=I,m=I):(r=y,m=1)}else if(m){if(!r&&(r=y/m,r%1))throw"can't guess dimensions"}else if(m=y/r,m%1)throw"can't guess dimensions";return{width:r,height:m}}function kr(o,n){n.colorspaceConversion!==void 0&&o.pixelStorei(r1,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&o.pixelStorei(i1,n.premultiplyAlpha),n.flipY!==void 0&&o.pixelStorei(o1,n.flipY)}function Wl(o){o.pixelStorei(wo,4),zr(o)&&(o.pixelStorei(pl,0),o.pixelStorei(bl,0),o.pixelStorei(yl,0),o.pixelStorei(gl,0),o.pixelStorei(Zl,0))}function ma(o,n,r,m){m.minMag&&(r.call(o,n,Yo,m.minMag),r.call(o,n,To,m.minMag)),m.min&&r.call(o,n,Yo,m.min),m.mag&&r.call(o,n,To,m.mag),m.wrap&&(r.call(o,n,Yi,m.wrap),r.call(o,n,Ti,m.wrap),(n===Xr||X2(o,n))&&r.call(o,n,ml,m.wrap)),m.wrapR&&r.call(o,n,ml,m.wrapR),m.wrapS&&r.call(o,n,Yi,m.wrapS),m.wrapT&&r.call(o,n,Ti,m.wrapT),m.minLod&&r.call(o,n,q2,m.minLod),m.maxLod&&r.call(o,n,t1,m.maxLod),m.baseLevel&&r.call(o,n,e1,m.baseLevel),m.maxLevel&&r.call(o,n,n1,m.maxLevel)}function Rl(o,n,r){const m=r.target||hr;o.bindTexture(m,n),ma(o,m,o.texParameteri,r)}function pa(o){return o=o||dr.textureColor,Pr(o)?o:new Uint8Array([o[0]*255,o[1]*255,o[2]*255,o[3]*255])}function Fo(o,n,r,m,y,I){r=r||dr.textureOptions,I=I||Gn;const H=r.target||hr;if(m=m||r.width,y=y||r.height,o.bindTexture(H,n),da(o,m,y,I))o.generateMipmap(H);else{const Y=ha(I)?P2:z2;o.texParameteri(H,Yo,Y),o.texParameteri(H,To,Y),o.texParameteri(H,Yi,Si),o.texParameteri(H,Ti,Si)}}function Dr(o){return o.auto===!0||o.auto===void 0&&o.level===void 0}function Co(o,n){return n=n||{},n.cubeFaceOrder||[So,O2,_2,Q2,D2,$2]}function No(o,n){const m=Co(o,n).map(function(y,I){return{face:y,ndx:I}});return m.sort(function(y,I){return y.face-I.face}),m}function xl(o,n,r,m){m=m||dr.textureOptions;const y=m.target||hr,I=m.level||0;let H=r.width,Y=r.height;const k=m.internalFormat||m.format||Gn,nt=Qr(k),P=m.format||nt.format,st=m.type||nt.type;if(kr(o,m),o.bindTexture(y,n),y===fr){const xt=r.width,Vt=r.height;let dt,ht;if(xt/6===Vt)dt=Vt,ht=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Vt/6===xt)dt=xt,ht=[0,0,0,1,0,2,0,3,0,4,0,5];else if(xt/3===Vt/2)dt=xt/3,ht=[0,0,1,0,2,0,0,1,1,1,2,1];else if(xt/2===Vt/3)dt=xt/2,ht=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Ft=cl();Ft?(Ft.canvas.width=dt,Ft.canvas.height=dt,H=dt,Y=dt,No(o,m).forEach(function(Lt){const At=ht[Lt.ndx*2+0]*dt,_=ht[Lt.ndx*2+1]*dt;Ft.drawImage(r,At,_,dt,dt,0,0,dt,dt),o.texImage2D(Lt.face,I,k,P,st,Ft.canvas)}),Ft.canvas.width=1,Ft.canvas.height=1):typeof createImageBitmap<"u"&&(H=dt,Y=dt,No(o,m).forEach(function(Lt){const At=ht[Lt.ndx*2+0]*dt,_=ht[Lt.ndx*2+1]*dt;o.texImage2D(Lt.face,I,k,dt,dt,0,P,st,null),createImageBitmap(r,At,_,dt,dt,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(Ee){kr(o,m),o.bindTexture(y,n),o.texImage2D(Lt.face,I,k,P,st,Ee),Dr(m)&&Fo(o,n,m,H,Y,k)})}))}else if(y===Xr||y===Vr){const xt=Math.min(r.width,r.height),Vt=Math.max(r.width,r.height),dt=Vt/xt;if(dt%1!==0)throw"can not compute 3D dimensions of element";const ht=r.width===Vt?1:0,Ft=r.height===Vt?1:0;o.pixelStorei(wo,1),o.pixelStorei(pl,r.width),o.pixelStorei(bl,0),o.pixelStorei(Zl,0),o.texImage3D(y,I,k,xt,xt,xt,0,P,st,null);for(let Lt=0;Lt<dt;++Lt){const At=Lt*xt*ht,_=Lt*xt*Ft;o.pixelStorei(yl,At),o.pixelStorei(gl,_),o.texSubImage3D(y,I,0,0,Lt,xt,xt,1,P,st,r)}Wl(o)}else o.texImage2D(y,I,k,P,st,r);Dr(m)&&Fo(o,n,m,H,Y,k),Rl(o,n,m)}function $r(){}function ba(o){if(typeof document<"u"){const n=document.createElement("a");return n.href=o,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(o,location.href).origin===n}}function ya(o,n){return n===void 0&&!ba(o)?"anonymous":n}function ga(o,n,r){r=r||$r;let m;if(n=n!==void 0?n:dr.crossOrigin,n=ya(o,n),typeof Image<"u"){m=new Image,n!==void 0&&(m.crossOrigin=n);const y=function(){m.removeEventListener("error",I),m.removeEventListener("load",H),m=null},I=function(){const k="couldn't load image: "+o;tl(k),r(k,m),y()},H=function(){r(null,m),y()};return m.addEventListener("error",I),m.addEventListener("load",H),m.src=o,m}else if(typeof ImageBitmap<"u"){let y,I;const H=function(){r(y,I)},Y={};n&&(Y.mode="cors"),fetch(o,Y).then(function(k){if(!k.ok)throw k;return k.blob()}).then(function(k){return createImageBitmap(k,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(k){I=k,setTimeout(H)}).catch(function(k){y=k,setTimeout(H)}),m=null}return m}function Il(o){return typeof ImageBitmap<"u"&&o instanceof ImageBitmap||typeof ImageData<"u"&&o instanceof ImageData||typeof HTMLElement<"u"&&o instanceof HTMLElement}function Jo(o,n,r){return Il(o)?(setTimeout(function(){r(null,o)}),o):ga(o,n,r)}function ko(o,n,r){r=r||dr.textureOptions;const m=r.target||hr;if(o.bindTexture(m,n),r.color===!1)return;const y=pa(r.color);if(m===fr)for(let I=0;I<6;++I)o.texImage2D(So+I,0,Gn,1,1,0,Gn,gn,y);else m===Xr||m===Vr?o.texImage3D(m,0,Gn,1,1,1,0,Gn,gn,y):o.texImage2D(m,0,Gn,1,1,0,Gn,gn,y)}function Za(o,n,r,m){return m=m||$r,r=r||dr.textureOptions,ko(o,n,r),r=Object.assign({},r),Jo(r.src,r.crossOrigin,function(I,H){I?m(I,n,H):(xl(o,n,H,r),m(null,n,H))})}function va(o,n,r,m){m=m||$r;const y=r.src;if(y.length!==6)throw"there must be 6 urls for a cubemap";const I=r.level||0,H=r.internalFormat||r.format||Gn,Y=Qr(H),k=r.format||Y.format,nt=r.type||gn,P=r.target||hr;if(P!==fr)throw"target must be TEXTURE_CUBE_MAP";ko(o,n,r),r=Object.assign({},r);let st=6;const xt=[],Vt=Co(o,r);let dt;function ht(Ft){return function(Lt,At){--st,Lt?xt.push(Lt):At.width!==At.height?xt.push("cubemap face img is not a square: "+At.src):(kr(o,r),o.bindTexture(P,n),st===5?Co().forEach(function(_){o.texImage2D(_,I,H,k,nt,At)}):o.texImage2D(Ft,I,H,k,nt,At),Dr(r)&&o.generateMipmap(P)),st===0&&m(xt.length?xt:void 0,n,dt)}}dt=y.map(function(Ft,Lt){return Jo(Ft,r.crossOrigin,ht(Vt[Lt]))})}function Ga(o,n,r,m){m=m||$r;const y=r.src,I=r.internalFormat||r.format||Gn,H=Qr(I),Y=r.format||H.format,k=r.type||gn,nt=r.target||Vr;if(nt!==Xr&&nt!==Vr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";ko(o,n,r),r=Object.assign({},r);let P=y.length;const st=[];let xt;const Vt=r.level||0;let dt=r.width,ht=r.height;const Ft=y.length;let Lt=!0;function At(_){return function(Ee,an){if(--P,Ee)st.push(Ee);else{if(kr(o,r),o.bindTexture(nt,n),Lt){Lt=!1,dt=r.width||an.width,ht=r.height||an.height,o.texImage3D(nt,Vt,I,dt,ht,Ft,0,Y,k,null);for(let We=0;We<Ft;++We)o.texSubImage3D(nt,Vt,0,0,We,dt,ht,1,Y,k,an)}else{let We=an,$t;(an.width!==dt||an.height!==ht)&&($t=cl(),We=$t.canvas,$t.canvas.width=dt,$t.canvas.height=ht,$t.drawImage(an,0,0,dt,ht)),o.texSubImage3D(nt,Vt,0,0,_,dt,ht,1,Y,k,We),$t&&We===$t.canvas&&($t.canvas.width=0,$t.canvas.height=0)}Dr(r)&&o.generateMipmap(nt)}P===0&&m(st.length?st:void 0,n,xt)}}xt=y.map(function(_,Ee){return Jo(_,r.crossOrigin,At(Ee))})}function Xa(o,n,r,m){m=m||dr.textureOptions;const y=m.target||hr;o.bindTexture(y,n);let I=m.width,H=m.height,Y=m.depth;const k=m.level||0,nt=m.internalFormat||m.format||Gn,P=Qr(nt),st=m.format||P.format,xt=m.type||fa(o,r,P.type);if(Pr(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Ft=qs(xt);r=new Ft(r)}const Vt=aa(nt,xt),dt=r.byteLength/Vt;if(dt%1)throw"length wrong size for format: "+ul(o,st);let ht;if(y===Xr||y===Vr)if(!I&&!H&&!Y){const Ft=Math.cbrt(dt);if(Ft%1!==0)throw"can't guess cube size of array of numElements: "+dt;I=Ft,H=Ft,Y=Ft}else I&&(!H||!Y)?(ht=Ni(o,y,H,Y,dt/I),H=ht.width,Y=ht.height):H&&(!I||!Y)?(ht=Ni(o,y,I,Y,dt/H),I=ht.width,Y=ht.height):(ht=Ni(o,y,I,H,dt/Y),I=ht.width,H=ht.height);else ht=Ni(o,y,I,H,dt),I=ht.width,H=ht.height;if(Wl(o),o.pixelStorei(wo,m.unpackAlignment||1),kr(o,m),y===fr){const Ft=Vt/r.BYTES_PER_ELEMENT,Lt=dt/6*Ft;No(o,m).forEach(At=>{const _=Lt*At.ndx,Ee=r.subarray(_,_+Lt);o.texImage2D(At.face,k,nt,I,H,0,st,xt,Ee)})}else y===Xr||y===Vr?o.texImage3D(y,k,nt,I,H,Y,0,st,xt,r):o.texImage2D(y,k,nt,I,H,0,st,xt,r);return{width:I,height:H,depth:Y,type:xt}}function Va(o,n,r){const m=r.target||hr;o.bindTexture(m,n);const y=r.level||0,I=r.internalFormat||r.format||Gn,H=Qr(I),Y=r.format||H.format,k=r.type||H.type;if(kr(o,r),m===fr)for(let nt=0;nt<6;++nt)o.texImage2D(So+nt,y,I,r.width,r.height,0,Y,k,null);else m===Xr||m===Vr?o.texImage3D(m,y,I,r.width,r.height,r.depth,0,Y,k,null):o.texImage2D(m,y,I,r.width,r.height,0,Y,k,null)}function Sl(o,n,r){r=r||$r,n=n||dr.textureOptions;const m=o.createTexture(),y=n.target||hr;let I=n.width||1,H=n.height||1;const Y=n.internalFormat||Gn;o.bindTexture(y,m),y===fr&&(o.texParameteri(y,Yi,Si),o.texParameteri(y,Ti,Si));let k=n.src;if(k)if(typeof k=="function"&&(k=k(o,n)),typeof k=="string")Za(o,m,n,r);else if(Pr(k)||Array.isArray(k)&&(typeof k[0]=="number"||Array.isArray(k[0])||Pr(k[0]))){const nt=Xa(o,m,k,n);I=nt.width,H=nt.height}else Array.isArray(k)&&(typeof k[0]=="string"||Il(k[0]))?y===fr?va(o,m,n,r):Ga(o,m,n,r):(xl(o,m,k,n),I=k.width,H=k.height);else Va(o,m,n);return Dr(n)&&Fo(o,m,n,I,H,Y),Rl(o,m,n),m}const Eo=tl;function Yl(o){return typeof document<"u"&&document.getElementById?document.getElementById(o):null}const Ji=33984,ki=34962,Wa=34963,Ra=35713,xa=35714,Ia=35632,Sa=35633,Ya=35981,Tl=35718,Ta=35721,wa=35971,La=35382,Ha=35396,Fa=35398,Ca=35392,Na=35395,Ei=5126,wl=35664,Ll=35665,Hl=35666,Uo=5124,Fl=35667,Cl=35668,Nl=35669,Jl=35670,kl=35671,El=35672,Ul=35673,Kl=35674,Ml=35675,Bl=35676,Ja=35678,ka=35680,Ea=35679,Ua=35682,Ka=35685,Ma=35686,Ba=35687,Aa=35688,ja=35689,za=35690,Pa=36289,Oa=36292,_a=36293,Ko=5125,Al=36294,jl=36295,zl=36296,Qa=36298,Da=36299,$a=36300,qa=36303,t0=36306,e0=36307,n0=36308,r0=36311,Ui=3553,Ki=34067,Mo=32879,Mi=35866,be={};function Pl(o,n){return be[n].bindPoint}function i0(o,n){return function(r){o.uniform1f(n,r)}}function o0(o,n){return function(r){o.uniform1fv(n,r)}}function s0(o,n){return function(r){o.uniform2fv(n,r)}}function l0(o,n){return function(r){o.uniform3fv(n,r)}}function u0(o,n){return function(r){o.uniform4fv(n,r)}}function Ol(o,n){return function(r){o.uniform1i(n,r)}}function _l(o,n){return function(r){o.uniform1iv(n,r)}}function Ql(o,n){return function(r){o.uniform2iv(n,r)}}function Dl(o,n){return function(r){o.uniform3iv(n,r)}}function $l(o,n){return function(r){o.uniform4iv(n,r)}}function c0(o,n){return function(r){o.uniform1ui(n,r)}}function a0(o,n){return function(r){o.uniform1uiv(n,r)}}function d0(o,n){return function(r){o.uniform2uiv(n,r)}}function h0(o,n){return function(r){o.uniform3uiv(n,r)}}function f0(o,n){return function(r){o.uniform4uiv(n,r)}}function m0(o,n){return function(r){o.uniformMatrix2fv(n,!1,r)}}function p0(o,n){return function(r){o.uniformMatrix3fv(n,!1,r)}}function b0(o,n){return function(r){o.uniformMatrix4fv(n,!1,r)}}function y0(o,n){return function(r){o.uniformMatrix2x3fv(n,!1,r)}}function g0(o,n){return function(r){o.uniformMatrix3x2fv(n,!1,r)}}function Z0(o,n){return function(r){o.uniformMatrix2x4fv(n,!1,r)}}function v0(o,n){return function(r){o.uniformMatrix4x2fv(n,!1,r)}}function G0(o,n){return function(r){o.uniformMatrix3x4fv(n,!1,r)}}function X0(o,n){return function(r){o.uniformMatrix4x3fv(n,!1,r)}}function On(o,n,r,m){const y=Pl(o,n);return zr(o)?function(I){let H,Y;Ro(o,I)?(H=I,Y=null):(H=I.texture,Y=I.sampler),o.uniform1i(m,r),o.activeTexture(Ji+r),o.bindTexture(y,H),o.bindSampler(r,Y)}:function(I){o.uniform1i(m,r),o.activeTexture(Ji+r),o.bindTexture(y,I)}}function _n(o,n,r,m,y){const I=Pl(o,n),H=new Int32Array(y);for(let Y=0;Y<y;++Y)H[Y]=r+Y;return zr(o)?function(Y){o.uniform1iv(m,H),Y.forEach(function(k,nt){o.activeTexture(Ji+H[nt]);let P,st;Ro(o,k)?(P=k,st=null):(P=k.texture,st=k.sampler),o.bindSampler(r,st),o.bindTexture(I,P)})}:function(Y){o.uniform1iv(m,H),Y.forEach(function(k,nt){o.activeTexture(Ji+H[nt]),o.bindTexture(I,k)})}}be[Ei]={Type:Float32Array,size:4,setter:i0,arraySetter:o0},be[wl]={Type:Float32Array,size:8,setter:s0,cols:2},be[Ll]={Type:Float32Array,size:12,setter:l0,cols:3},be[Hl]={Type:Float32Array,size:16,setter:u0,cols:4},be[Uo]={Type:Int32Array,size:4,setter:Ol,arraySetter:_l},be[Fl]={Type:Int32Array,size:8,setter:Ql,cols:2},be[Cl]={Type:Int32Array,size:12,setter:Dl,cols:3},be[Nl]={Type:Int32Array,size:16,setter:$l,cols:4},be[Ko]={Type:Uint32Array,size:4,setter:c0,arraySetter:a0},be[Al]={Type:Uint32Array,size:8,setter:d0,cols:2},be[jl]={Type:Uint32Array,size:12,setter:h0,cols:3},be[zl]={Type:Uint32Array,size:16,setter:f0,cols:4},be[Jl]={Type:Uint32Array,size:4,setter:Ol,arraySetter:_l},be[kl]={Type:Uint32Array,size:8,setter:Ql,cols:2},be[El]={Type:Uint32Array,size:12,setter:Dl,cols:3},be[Ul]={Type:Uint32Array,size:16,setter:$l,cols:4},be[Kl]={Type:Float32Array,size:32,setter:m0,rows:2,cols:2},be[Ml]={Type:Float32Array,size:48,setter:p0,rows:3,cols:3},be[Bl]={Type:Float32Array,size:64,setter:b0,rows:4,cols:4},be[Ka]={Type:Float32Array,size:32,setter:y0,rows:2,cols:3},be[Ma]={Type:Float32Array,size:32,setter:Z0,rows:2,cols:4},be[Ba]={Type:Float32Array,size:48,setter:g0,rows:3,cols:2},be[Aa]={Type:Float32Array,size:48,setter:G0,rows:3,cols:4},be[ja]={Type:Float32Array,size:64,setter:v0,rows:4,cols:2},be[za]={Type:Float32Array,size:64,setter:X0,rows:4,cols:3},be[Ja]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ui},be[ka]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ki},be[Ea]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Mo},be[Ua]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ui},be[Pa]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Mi},be[Oa]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Mi},be[_a]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ki},be[Qa]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ui},be[Da]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Mo},be[$a]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ki},be[qa]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Mi},be[t0]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ui},be[e0]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Mo},be[n0]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Ki},be[r0]={Type:null,size:0,setter:On,arraySetter:_n,bindPoint:Mi};function Bi(o,n){return function(r){if(r.value)switch(o.disableVertexAttribArray(n),r.value.length){case 4:o.vertexAttrib4fv(n,r.value);break;case 3:o.vertexAttrib3fv(n,r.value);break;case 2:o.vertexAttrib2fv(n,r.value);break;case 1:o.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribPointer(n,r.numComponents||r.size,r.type||Ei,r.normalize||!1,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function pr(o,n){return function(r){if(r.value)if(o.disableVertexAttribArray(n),r.value.length===4)o.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Uo,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function Ai(o,n){return function(r){if(r.value)if(o.disableVertexAttribArray(n),r.value.length===4)o.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Ko,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function Bo(o,n,r){const m=r.size,y=r.count;return function(I){o.bindBuffer(ki,I.buffer);const H=I.size||I.numComponents||m,Y=H/y,k=I.type||Ei,P=be[k].size*H,st=I.normalize||!1,xt=I.offset||0,Vt=P/y;for(let dt=0;dt<y;++dt)o.enableVertexAttribArray(n+dt),o.vertexAttribPointer(n+dt,Y,k,st,P,xt+Vt*dt),o.vertexAttribDivisor&&o.vertexAttribDivisor(n+dt,I.divisor||0)}}const Ln={};Ln[Ei]={size:4,setter:Bi},Ln[wl]={size:8,setter:Bi},Ln[Ll]={size:12,setter:Bi},Ln[Hl]={size:16,setter:Bi},Ln[Uo]={size:4,setter:pr},Ln[Fl]={size:8,setter:pr},Ln[Cl]={size:12,setter:pr},Ln[Nl]={size:16,setter:pr},Ln[Ko]={size:4,setter:Ai},Ln[Al]={size:8,setter:Ai},Ln[jl]={size:12,setter:Ai},Ln[zl]={size:16,setter:Ai},Ln[Jl]={size:4,setter:pr},Ln[kl]={size:8,setter:pr},Ln[El]={size:12,setter:pr},Ln[Ul]={size:16,setter:pr},Ln[Kl]={size:4,setter:Bo,count:2},Ln[Ml]={size:9,setter:Bo,count:3},Ln[Bl]={size:16,setter:Bo,count:4};const V0=/ERROR:\s*\d+:(\d+)/gi;function W0(o,n="",r=0){const m=[...n.matchAll(V0)],y=new Map(m.map((I,H)=>{const Y=parseInt(I[1]),k=m[H+1],nt=k?k.index:n.length,P=n.substring(I.index,nt);return[Y-1,P]}));return o.split(`
|
|
126
|
-
`).map((I,
|
|
125
|
+
see: http://github.com/greggman/twgl.js for details */const go=5120,jr=5121,Zo=5122,vo=5123,Go=5124,Xo=5125,Vo=5126,d2=32819,h2=32820,f2=33635,m2=5131,p2=33640,b2=35899,y2=35902,g2=36269,Z2=34042,Ds={};{const o=Ds;o[go]=Int8Array,o[jr]=Uint8Array,o[Zo]=Int16Array,o[vo]=Uint16Array,o[Go]=Int32Array,o[Xo]=Uint32Array,o[Vo]=Float32Array,o[d2]=Uint16Array,o[h2]=Uint16Array,o[f2]=Uint16Array,o[m2]=Uint16Array,o[p2]=Uint32Array,o[b2]=Uint32Array,o[y2]=Uint32Array,o[g2]=Uint32Array,o[Z2]=Uint32Array}function Wo(o){if(o instanceof Int8Array)return go;if(o instanceof Uint8Array||o instanceof Uint8ClampedArray)return jr;if(o instanceof Int16Array)return Zo;if(o instanceof Uint16Array)return vo;if(o instanceof Int32Array)return Go;if(o instanceof Uint32Array)return Xo;if(o instanceof Float32Array)return Vo;throw new Error("unsupported typed array type")}function $s(o){if(o===Int8Array)return go;if(o===Uint8Array||o===Uint8ClampedArray)return jr;if(o===Int16Array)return Zo;if(o===Uint16Array)return vo;if(o===Int32Array)return Go;if(o===Uint32Array)return Xo;if(o===Float32Array)return Vo;throw new Error("unsupported typed array type")}function qs(o){const n=Ds[o];if(!n)throw new Error("unknown gl type");return n}const xi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function tl(...o){console.error(...o)}const el=new Map;function Ii(o,n){if(!o||typeof o!="object")return!1;let r=el.get(n);r||(r=new WeakMap,el.set(n,r));let m=r.get(o);if(m===void 0){const y=Object.prototype.toString.call(o);m=y.substring(8,y.length-1)===n,r.set(o,m)}return m}function v2(o,n){return typeof WebGLBuffer<"u"&&Ii(n,"WebGLBuffer")}function G2(o,n){return typeof WebGLRenderbuffer<"u"&&Ii(n,"WebGLRenderbuffer")}function Ro(o,n){return typeof WebGLTexture<"u"&&Ii(n,"WebGLTexture")}function X2(o,n){return typeof WebGLSampler<"u"&&Ii(n,"WebGLSampler")}const nl=35044,Gr=34962,V2=34963,W2=34660,R2=5120,x2=5121,I2=5122,S2=5123,Y2=5124,T2=5125,rl=5126,il={attribPrefix:""};function w2(o,n,r,m,y){o.bindBuffer(n,r),o.bufferData(n,m,y||nl)}function ol(o,n,r,m){if(v2(o,n))return n;r=r||Gr;const y=o.createBuffer();return w2(o,r,y,n,m),y}function sl(o){return o==="indices"}function L2(o){return o===Int8Array||o===Uint8Array}function F2(o){return o.length?o:o.data}const H2=/coord|texture/i,C2=/color|colour/i;function N2(o,n){let r;if(H2.test(o)?r=2:C2.test(o)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${o}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function J2(o,n,r){return o.numComponents||o.size||N2(n,r||F2(o).length)}function ll(o,n){if(xi(o))return o;if(xi(o.data))return o.data;Array.isArray(o)&&(o={data:o});let r=o.type?xo(o.type):void 0;return r||(sl(n)?r=Uint16Array:r=Float32Array),new r(o.data)}function k2(o){return typeof o=="number"?o:o?$s(o):rl}function xo(o){return typeof o=="number"?qs(o):o||Float32Array}function E2(o,n){return{buffer:n.buffer,numValues:2*3*4,type:k2(n.type),arrayType:xo(n.type)}}function K2(o,n){const r=n.data||n,m=xo(n.type),y=r*m.BYTES_PER_ELEMENT,I=o.createBuffer();return o.bindBuffer(Gr,I),o.bufferData(Gr,y,n.drawType||nl),{buffer:I,numValues:r,type:$s(m),arrayType:m}}function U2(o,n,r){const m=ll(n,r);return{arrayType:m.constructor,buffer:ol(o,m,void 0,n.drawType),type:Wo(m),numValues:0}}function M2(o,n){const r={};return Object.keys(n).forEach(function(m){if(!sl(m)){const y=n[m],I=y.attrib||y.name||y.attribName||il.attribPrefix+m;if(y.value){if(!Array.isArray(y.value)&&!xi(y.value))throw new Error("array.value is not array or typedarray");r[I]={value:y.value}}else{let F;y.buffer&&y.buffer instanceof WebGLBuffer?F=E2:typeof y=="number"||typeof y.data=="number"?F=K2:F=U2;const{buffer:Y,type:k,numValues:et,arrayType:O}=F(o,y,m),st=y.normalize!==void 0?y.normalize:L2(O),xt=J2(y,m,et);r[I]={buffer:Y,numComponents:xt,type:k,normalize:st,stride:y.stride||0,offset:y.offset||0,divisor:y.divisor===void 0?void 0:y.divisor,drawType:y.drawType}}}}),o.bindBuffer(Gr,null),r}function B2(o,n){return n===R2||n===x2?1:n===I2||n===S2?2:n===Y2||n===T2||n===rl?4:0}const Io=["position","positions","a_position"];function A2(o,n){let r,m;for(m=0;m<Io.length&&(r=Io[m],!(r in n||(r=il.attribPrefix+r,r in n)));++m);m===Io.length&&(r=Object.keys(n)[0]);const y=n[r];if(!y.buffer)return 1;o.bindBuffer(Gr,y.buffer);const I=o.getBufferParameter(Gr,W2);o.bindBuffer(Gr,null);const F=B2(o,y.type),Y=I/F,k=y.numComponents||y.size,et=Y/k;if(et%1!==0)throw new Error(`numComponents ${k} not correct for length ${length}`);return et}function j2(o,n,r){const m=M2(o,n),y=Object.assign({},r||{});y.attribs=Object.assign({},r?r.attribs:{},m);const I=n.indices;if(I){const F=ll(I,"indices");y.indices=ol(o,F,V2),y.numElements=F.length,y.elementType=Wo(F)}else y.numElements||(y.numElements=A2(o,y.attribs));return y}function zr(o){return!!o.texStorage2D}const ul=function(){const o={},n={};function r(m){const y=m.constructor.name;if(!o[y]){for(const I in m)if(typeof m[I]=="number"){const F=n[m[I]];n[m[I]]=F?`${F} | ${I}`:I}o[y]=!0}}return function(y,I){return r(y),n[I]||(typeof I=="number"?`0x${I.toString(16)}`:I)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Or=xi,cl=function(){let o;return function(){return o=o||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),o}}(),al=6406,sr=6407,Gn=6408,dl=6409,hl=6410,Pr=6402,fl=34041,Si=33071,z2=9728,O2=9729,hr=3553,fr=34067,Xr=32879,Vr=35866,So=34069,P2=34070,_2=34071,Q2=34072,D2=34073,$2=34074,Yo=10241,To=10240,Yi=10242,Ti=10243,ml=32882,q2=33082,t1=33083,e1=33084,n1=33085,wo=3317,pl=3314,bl=32878,yl=3316,gl=3315,Zl=32877,r1=37443,i1=37441,o1=37440,s1=33321,l1=36756,u1=33325,c1=33326,a1=33330,d1=33329,h1=33338,f1=33337,m1=33340,p1=33339,b1=33323,y1=36757,g1=33327,Z1=33328,v1=33336,G1=33335,X1=33332,V1=33331,W1=33334,R1=33333,x1=32849,I1=35905,S1=36194,Y1=36758,T1=35898,w1=35901,L1=34843,F1=34837,H1=36221,C1=36239,N1=36215,J1=36233,k1=36209,E1=36227,K1=32856,U1=35907,M1=36759,B1=32855,A1=32854,j1=32857,z1=34842,O1=34836,P1=36220,_1=36238,Q1=36975,D1=36214,$1=36232,q1=36226,ta=36208,ea=33189,na=33190,ra=36012,ia=36013,oa=35056,mr=5120,gn=5121,wi=5122,Hr=5123,Li=5124,Wr=5125,Bn=5126,vl=32819,Gl=32820,Xl=33635,rr=5131,_r=36193,Lo=33640,sa=35899,la=35902,ua=36269,ca=34042,Fi=33319,Cr=33320,Hi=6403,Nr=36244,Jr=36248,Rr=36249;let Fo;function Ci(o){if(!Fo){const n={};n[al]={textureFormat:al,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,rr,_r,Bn]},n[dl]={textureFormat:dl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,rr,_r,Bn]},n[hl]={textureFormat:hl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,rr,_r,Bn]},n[sr]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,rr,_r,Bn,Xl]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,rr,_r,Bn,vl,Gl]},n[Pr]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Wr,Hr]},n[s1]={textureFormat:Hi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[l1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[mr]},n[u1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Bn,rr]},n[c1]={textureFormat:Hi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[a1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[d1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[mr]},n[X1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Hr]},n[V1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wi]},n[W1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[R1]={textureFormat:Nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[b1]={textureFormat:Fi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[y1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[mr]},n[g1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Bn,rr]},n[Z1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Bn]},n[v1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[G1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[mr]},n[h1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Hr]},n[f1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wi]},n[m1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Wr]},n[p1]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[x1]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[I1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[S1]={textureFormat:sr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,Xl]},n[Y1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[mr]},n[T1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,rr,sa]},n[w1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,rr,la]},n[L1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Bn,rr]},n[F1]={textureFormat:sr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Bn]},n[H1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[C1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[mr]},n[N1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Hr]},n[J1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[wi]},n[k1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Wr]},n[E1]={textureFormat:Jr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Li]},n[K1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[U1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[M1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[mr]},n[B1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,Gl,Lo]},n[A1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,vl]},n[j1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Lo]},n[z1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Bn,rr]},n[O1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Bn]},n[P1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[_1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[mr]},n[Q1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Lo]},n[D1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Hr]},n[$1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[wi]},n[q1]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Li]},n[ta]={textureFormat:Rr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Wr]},n[ea]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Hr,Wr]},n[na]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wr]},n[ra]={textureFormat:Pr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[oa]={textureFormat:fl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ca]},n[ia]={textureFormat:fl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ua]},Object.keys(n).forEach(function(r){const m=n[r];m.bytesPerElementMap={},m.bytesPerElement.forEach(function(y,I){const F=m.type[I];m.bytesPerElementMap[F]=y})}),Fo=n}return Fo[o]}function aa(o,n){const r=Ci(o);if(!r)throw"unknown internal format";const m=r.bytesPerElementMap[n];if(m===void 0)throw"unknown internal format";return m}function Qr(o){const n=Ci(o);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function Vl(o){return(o&o-1)===0}function da(o,n,r,m){if(!zr(o))return Vl(n)&&Vl(r);const y=Ci(m);if(!y)throw"unknown internal format";return y.colorRenderable&&y.textureFilterable}function ha(o){const n=Ci(o);if(!n)throw"unknown internal format";return n.textureFilterable}function fa(o,n,r){return Or(n)?Wo(n):r||gn}function Ni(o,n,r,m,y){if(y%1!==0)throw"can't guess dimensions";if(!r&&!m){const I=Math.sqrt(y/(n===fr?6:1));I%1===0?(r=I,m=I):(r=y,m=1)}else if(m){if(!r&&(r=y/m,r%1))throw"can't guess dimensions"}else if(m=y/r,m%1)throw"can't guess dimensions";return{width:r,height:m}}function kr(o,n){n.colorspaceConversion!==void 0&&o.pixelStorei(r1,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&o.pixelStorei(i1,n.premultiplyAlpha),n.flipY!==void 0&&o.pixelStorei(o1,n.flipY)}function Wl(o){o.pixelStorei(wo,4),zr(o)&&(o.pixelStorei(pl,0),o.pixelStorei(bl,0),o.pixelStorei(yl,0),o.pixelStorei(gl,0),o.pixelStorei(Zl,0))}function ma(o,n,r,m){m.minMag&&(r.call(o,n,Yo,m.minMag),r.call(o,n,To,m.minMag)),m.min&&r.call(o,n,Yo,m.min),m.mag&&r.call(o,n,To,m.mag),m.wrap&&(r.call(o,n,Yi,m.wrap),r.call(o,n,Ti,m.wrap),(n===Xr||X2(o,n))&&r.call(o,n,ml,m.wrap)),m.wrapR&&r.call(o,n,ml,m.wrapR),m.wrapS&&r.call(o,n,Yi,m.wrapS),m.wrapT&&r.call(o,n,Ti,m.wrapT),m.minLod&&r.call(o,n,q2,m.minLod),m.maxLod&&r.call(o,n,t1,m.maxLod),m.baseLevel&&r.call(o,n,e1,m.baseLevel),m.maxLevel&&r.call(o,n,n1,m.maxLevel)}function Rl(o,n,r){const m=r.target||hr;o.bindTexture(m,n),ma(o,m,o.texParameteri,r)}function pa(o){return o=o||dr.textureColor,Or(o)?o:new Uint8Array([o[0]*255,o[1]*255,o[2]*255,o[3]*255])}function Ho(o,n,r,m,y,I){r=r||dr.textureOptions,I=I||Gn;const F=r.target||hr;if(m=m||r.width,y=y||r.height,o.bindTexture(F,n),da(o,m,y,I))o.generateMipmap(F);else{const Y=ha(I)?O2:z2;o.texParameteri(F,Yo,Y),o.texParameteri(F,To,Y),o.texParameteri(F,Yi,Si),o.texParameteri(F,Ti,Si)}}function Dr(o){return o.auto===!0||o.auto===void 0&&o.level===void 0}function Co(o,n){return n=n||{},n.cubeFaceOrder||[So,P2,_2,Q2,D2,$2]}function No(o,n){const m=Co(o,n).map(function(y,I){return{face:y,ndx:I}});return m.sort(function(y,I){return y.face-I.face}),m}function xl(o,n,r,m){m=m||dr.textureOptions;const y=m.target||hr,I=m.level||0;let F=r.width,Y=r.height;const k=m.internalFormat||m.format||Gn,et=Qr(k),O=m.format||et.format,st=m.type||et.type;if(kr(o,m),o.bindTexture(y,n),y===fr){const xt=r.width,Vt=r.height;let dt,ht;if(xt/6===Vt)dt=Vt,ht=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Vt/6===xt)dt=xt,ht=[0,0,0,1,0,2,0,3,0,4,0,5];else if(xt/3===Vt/2)dt=xt/3,ht=[0,0,1,0,2,0,0,1,1,1,2,1];else if(xt/2===Vt/3)dt=xt/2,ht=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Ht=cl();Ht?(Ht.canvas.width=dt,Ht.canvas.height=dt,F=dt,Y=dt,No(o,m).forEach(function(Lt){const At=ht[Lt.ndx*2+0]*dt,_=ht[Lt.ndx*2+1]*dt;Ht.drawImage(r,At,_,dt,dt,0,0,dt,dt),o.texImage2D(Lt.face,I,k,O,st,Ht.canvas)}),Ht.canvas.width=1,Ht.canvas.height=1):typeof createImageBitmap<"u"&&(F=dt,Y=dt,No(o,m).forEach(function(Lt){const At=ht[Lt.ndx*2+0]*dt,_=ht[Lt.ndx*2+1]*dt;o.texImage2D(Lt.face,I,k,dt,dt,0,O,st,null),createImageBitmap(r,At,_,dt,dt,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(Ee){kr(o,m),o.bindTexture(y,n),o.texImage2D(Lt.face,I,k,O,st,Ee),Dr(m)&&Ho(o,n,m,F,Y,k)})}))}else if(y===Xr||y===Vr){const xt=Math.min(r.width,r.height),Vt=Math.max(r.width,r.height),dt=Vt/xt;if(dt%1!==0)throw"can not compute 3D dimensions of element";const ht=r.width===Vt?1:0,Ht=r.height===Vt?1:0;o.pixelStorei(wo,1),o.pixelStorei(pl,r.width),o.pixelStorei(bl,0),o.pixelStorei(Zl,0),o.texImage3D(y,I,k,xt,xt,xt,0,O,st,null);for(let Lt=0;Lt<dt;++Lt){const At=Lt*xt*ht,_=Lt*xt*Ht;o.pixelStorei(yl,At),o.pixelStorei(gl,_),o.texSubImage3D(y,I,0,0,Lt,xt,xt,1,O,st,r)}Wl(o)}else o.texImage2D(y,I,k,O,st,r);Dr(m)&&Ho(o,n,m,F,Y,k),Rl(o,n,m)}function $r(){}function ba(o){if(typeof document<"u"){const n=document.createElement("a");return n.href=o,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(o,location.href).origin===n}}function ya(o,n){return n===void 0&&!ba(o)?"anonymous":n}function ga(o,n,r){r=r||$r;let m;if(n=n!==void 0?n:dr.crossOrigin,n=ya(o,n),typeof Image<"u"){m=new Image,n!==void 0&&(m.crossOrigin=n);const y=function(){m.removeEventListener("error",I),m.removeEventListener("load",F),m=null},I=function(){const k="couldn't load image: "+o;tl(k),r(k,m),y()},F=function(){r(null,m),y()};return m.addEventListener("error",I),m.addEventListener("load",F),m.src=o,m}else if(typeof ImageBitmap<"u"){let y,I;const F=function(){r(y,I)},Y={};n&&(Y.mode="cors"),fetch(o,Y).then(function(k){if(!k.ok)throw k;return k.blob()}).then(function(k){return createImageBitmap(k,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(k){I=k,setTimeout(F)}).catch(function(k){y=k,setTimeout(F)}),m=null}return m}function Il(o){return typeof ImageBitmap<"u"&&o instanceof ImageBitmap||typeof ImageData<"u"&&o instanceof ImageData||typeof HTMLElement<"u"&&o instanceof HTMLElement}function Jo(o,n,r){return Il(o)?(setTimeout(function(){r(null,o)}),o):ga(o,n,r)}function ko(o,n,r){r=r||dr.textureOptions;const m=r.target||hr;if(o.bindTexture(m,n),r.color===!1)return;const y=pa(r.color);if(m===fr)for(let I=0;I<6;++I)o.texImage2D(So+I,0,Gn,1,1,0,Gn,gn,y);else m===Xr||m===Vr?o.texImage3D(m,0,Gn,1,1,1,0,Gn,gn,y):o.texImage2D(m,0,Gn,1,1,0,Gn,gn,y)}function Za(o,n,r,m){return m=m||$r,r=r||dr.textureOptions,ko(o,n,r),r=Object.assign({},r),Jo(r.src,r.crossOrigin,function(I,F){I?m(I,n,F):(xl(o,n,F,r),m(null,n,F))})}function va(o,n,r,m){m=m||$r;const y=r.src;if(y.length!==6)throw"there must be 6 urls for a cubemap";const I=r.level||0,F=r.internalFormat||r.format||Gn,Y=Qr(F),k=r.format||Y.format,et=r.type||gn,O=r.target||hr;if(O!==fr)throw"target must be TEXTURE_CUBE_MAP";ko(o,n,r),r=Object.assign({},r);let st=6;const xt=[],Vt=Co(o,r);let dt;function ht(Ht){return function(Lt,At){--st,Lt?xt.push(Lt):At.width!==At.height?xt.push("cubemap face img is not a square: "+At.src):(kr(o,r),o.bindTexture(O,n),st===5?Co().forEach(function(_){o.texImage2D(_,I,F,k,et,At)}):o.texImage2D(Ht,I,F,k,et,At),Dr(r)&&o.generateMipmap(O)),st===0&&m(xt.length?xt:void 0,n,dt)}}dt=y.map(function(Ht,Lt){return Jo(Ht,r.crossOrigin,ht(Vt[Lt]))})}function Ga(o,n,r,m){m=m||$r;const y=r.src,I=r.internalFormat||r.format||Gn,F=Qr(I),Y=r.format||F.format,k=r.type||gn,et=r.target||Vr;if(et!==Xr&&et!==Vr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";ko(o,n,r),r=Object.assign({},r);let O=y.length;const st=[];let xt;const Vt=r.level||0;let dt=r.width,ht=r.height;const Ht=y.length;let Lt=!0;function At(_){return function(Ee,an){if(--O,Ee)st.push(Ee);else{if(kr(o,r),o.bindTexture(et,n),Lt){Lt=!1,dt=r.width||an.width,ht=r.height||an.height,o.texImage3D(et,Vt,I,dt,ht,Ht,0,Y,k,null);for(let We=0;We<Ht;++We)o.texSubImage3D(et,Vt,0,0,We,dt,ht,1,Y,k,an)}else{let We=an,$t;(an.width!==dt||an.height!==ht)&&($t=cl(),We=$t.canvas,$t.canvas.width=dt,$t.canvas.height=ht,$t.drawImage(an,0,0,dt,ht)),o.texSubImage3D(et,Vt,0,0,_,dt,ht,1,Y,k,We),$t&&We===$t.canvas&&($t.canvas.width=0,$t.canvas.height=0)}Dr(r)&&o.generateMipmap(et)}O===0&&m(st.length?st:void 0,n,xt)}}xt=y.map(function(_,Ee){return Jo(_,r.crossOrigin,At(Ee))})}function Xa(o,n,r,m){m=m||dr.textureOptions;const y=m.target||hr;o.bindTexture(y,n);let I=m.width,F=m.height,Y=m.depth;const k=m.level||0,et=m.internalFormat||m.format||Gn,O=Qr(et),st=m.format||O.format,xt=m.type||fa(o,r,O.type);if(Or(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Ht=qs(xt);r=new Ht(r)}const Vt=aa(et,xt),dt=r.byteLength/Vt;if(dt%1)throw"length wrong size for format: "+ul(o,st);let ht;if(y===Xr||y===Vr)if(!I&&!F&&!Y){const Ht=Math.cbrt(dt);if(Ht%1!==0)throw"can't guess cube size of array of numElements: "+dt;I=Ht,F=Ht,Y=Ht}else I&&(!F||!Y)?(ht=Ni(o,y,F,Y,dt/I),F=ht.width,Y=ht.height):F&&(!I||!Y)?(ht=Ni(o,y,I,Y,dt/F),I=ht.width,Y=ht.height):(ht=Ni(o,y,I,F,dt/Y),I=ht.width,F=ht.height);else ht=Ni(o,y,I,F,dt),I=ht.width,F=ht.height;if(Wl(o),o.pixelStorei(wo,m.unpackAlignment||1),kr(o,m),y===fr){const Ht=Vt/r.BYTES_PER_ELEMENT,Lt=dt/6*Ht;No(o,m).forEach(At=>{const _=Lt*At.ndx,Ee=r.subarray(_,_+Lt);o.texImage2D(At.face,k,et,I,F,0,st,xt,Ee)})}else y===Xr||y===Vr?o.texImage3D(y,k,et,I,F,Y,0,st,xt,r):o.texImage2D(y,k,et,I,F,0,st,xt,r);return{width:I,height:F,depth:Y,type:xt}}function Va(o,n,r){const m=r.target||hr;o.bindTexture(m,n);const y=r.level||0,I=r.internalFormat||r.format||Gn,F=Qr(I),Y=r.format||F.format,k=r.type||F.type;if(kr(o,r),m===fr)for(let et=0;et<6;++et)o.texImage2D(So+et,y,I,r.width,r.height,0,Y,k,null);else m===Xr||m===Vr?o.texImage3D(m,y,I,r.width,r.height,r.depth,0,Y,k,null):o.texImage2D(m,y,I,r.width,r.height,0,Y,k,null)}function Sl(o,n,r){r=r||$r,n=n||dr.textureOptions;const m=o.createTexture(),y=n.target||hr;let I=n.width||1,F=n.height||1;const Y=n.internalFormat||Gn;o.bindTexture(y,m),y===fr&&(o.texParameteri(y,Yi,Si),o.texParameteri(y,Ti,Si));let k=n.src;if(k)if(typeof k=="function"&&(k=k(o,n)),typeof k=="string")Za(o,m,n,r);else if(Or(k)||Array.isArray(k)&&(typeof k[0]=="number"||Array.isArray(k[0])||Or(k[0]))){const et=Xa(o,m,k,n);I=et.width,F=et.height}else Array.isArray(k)&&(typeof k[0]=="string"||Il(k[0]))?y===fr?va(o,m,n,r):Ga(o,m,n,r):(xl(o,m,k,n),I=k.width,F=k.height);else Va(o,m,n);return Dr(n)&&Ho(o,m,n,I,F,Y),Rl(o,m,n),m}const Eo=tl;function Yl(o){return typeof document<"u"&&document.getElementById?document.getElementById(o):null}const Ji=33984,ki=34962,Wa=34963,Ra=35713,xa=35714,Ia=35632,Sa=35633,Ya=35981,Tl=35718,Ta=35721,wa=35971,La=35382,Fa=35396,Ha=35398,Ca=35392,Na=35395,Ei=5126,wl=35664,Ll=35665,Fl=35666,Ko=5124,Hl=35667,Cl=35668,Nl=35669,Jl=35670,kl=35671,El=35672,Kl=35673,Ul=35674,Ml=35675,Bl=35676,Ja=35678,ka=35680,Ea=35679,Ka=35682,Ua=35685,Ma=35686,Ba=35687,Aa=35688,ja=35689,za=35690,Oa=36289,Pa=36292,_a=36293,Uo=5125,Al=36294,jl=36295,zl=36296,Qa=36298,Da=36299,$a=36300,qa=36303,t0=36306,e0=36307,n0=36308,r0=36311,Ki=3553,Ui=34067,Mo=32879,Mi=35866,be={};function Ol(o,n){return be[n].bindPoint}function i0(o,n){return function(r){o.uniform1f(n,r)}}function o0(o,n){return function(r){o.uniform1fv(n,r)}}function s0(o,n){return function(r){o.uniform2fv(n,r)}}function l0(o,n){return function(r){o.uniform3fv(n,r)}}function u0(o,n){return function(r){o.uniform4fv(n,r)}}function Pl(o,n){return function(r){o.uniform1i(n,r)}}function _l(o,n){return function(r){o.uniform1iv(n,r)}}function Ql(o,n){return function(r){o.uniform2iv(n,r)}}function Dl(o,n){return function(r){o.uniform3iv(n,r)}}function $l(o,n){return function(r){o.uniform4iv(n,r)}}function c0(o,n){return function(r){o.uniform1ui(n,r)}}function a0(o,n){return function(r){o.uniform1uiv(n,r)}}function d0(o,n){return function(r){o.uniform2uiv(n,r)}}function h0(o,n){return function(r){o.uniform3uiv(n,r)}}function f0(o,n){return function(r){o.uniform4uiv(n,r)}}function m0(o,n){return function(r){o.uniformMatrix2fv(n,!1,r)}}function p0(o,n){return function(r){o.uniformMatrix3fv(n,!1,r)}}function b0(o,n){return function(r){o.uniformMatrix4fv(n,!1,r)}}function y0(o,n){return function(r){o.uniformMatrix2x3fv(n,!1,r)}}function g0(o,n){return function(r){o.uniformMatrix3x2fv(n,!1,r)}}function Z0(o,n){return function(r){o.uniformMatrix2x4fv(n,!1,r)}}function v0(o,n){return function(r){o.uniformMatrix4x2fv(n,!1,r)}}function G0(o,n){return function(r){o.uniformMatrix3x4fv(n,!1,r)}}function X0(o,n){return function(r){o.uniformMatrix4x3fv(n,!1,r)}}function Pn(o,n,r,m){const y=Ol(o,n);return zr(o)?function(I){let F,Y;Ro(o,I)?(F=I,Y=null):(F=I.texture,Y=I.sampler),o.uniform1i(m,r),o.activeTexture(Ji+r),o.bindTexture(y,F),o.bindSampler(r,Y)}:function(I){o.uniform1i(m,r),o.activeTexture(Ji+r),o.bindTexture(y,I)}}function _n(o,n,r,m,y){const I=Ol(o,n),F=new Int32Array(y);for(let Y=0;Y<y;++Y)F[Y]=r+Y;return zr(o)?function(Y){o.uniform1iv(m,F),Y.forEach(function(k,et){o.activeTexture(Ji+F[et]);let O,st;Ro(o,k)?(O=k,st=null):(O=k.texture,st=k.sampler),o.bindSampler(r,st),o.bindTexture(I,O)})}:function(Y){o.uniform1iv(m,F),Y.forEach(function(k,et){o.activeTexture(Ji+F[et]),o.bindTexture(I,k)})}}be[Ei]={Type:Float32Array,size:4,setter:i0,arraySetter:o0},be[wl]={Type:Float32Array,size:8,setter:s0,cols:2},be[Ll]={Type:Float32Array,size:12,setter:l0,cols:3},be[Fl]={Type:Float32Array,size:16,setter:u0,cols:4},be[Ko]={Type:Int32Array,size:4,setter:Pl,arraySetter:_l},be[Hl]={Type:Int32Array,size:8,setter:Ql,cols:2},be[Cl]={Type:Int32Array,size:12,setter:Dl,cols:3},be[Nl]={Type:Int32Array,size:16,setter:$l,cols:4},be[Uo]={Type:Uint32Array,size:4,setter:c0,arraySetter:a0},be[Al]={Type:Uint32Array,size:8,setter:d0,cols:2},be[jl]={Type:Uint32Array,size:12,setter:h0,cols:3},be[zl]={Type:Uint32Array,size:16,setter:f0,cols:4},be[Jl]={Type:Uint32Array,size:4,setter:Pl,arraySetter:_l},be[kl]={Type:Uint32Array,size:8,setter:Ql,cols:2},be[El]={Type:Uint32Array,size:12,setter:Dl,cols:3},be[Kl]={Type:Uint32Array,size:16,setter:$l,cols:4},be[Ul]={Type:Float32Array,size:32,setter:m0,rows:2,cols:2},be[Ml]={Type:Float32Array,size:48,setter:p0,rows:3,cols:3},be[Bl]={Type:Float32Array,size:64,setter:b0,rows:4,cols:4},be[Ua]={Type:Float32Array,size:32,setter:y0,rows:2,cols:3},be[Ma]={Type:Float32Array,size:32,setter:Z0,rows:2,cols:4},be[Ba]={Type:Float32Array,size:48,setter:g0,rows:3,cols:2},be[Aa]={Type:Float32Array,size:48,setter:G0,rows:3,cols:4},be[ja]={Type:Float32Array,size:64,setter:v0,rows:4,cols:2},be[za]={Type:Float32Array,size:64,setter:X0,rows:4,cols:3},be[Ja]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[ka]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[Ea]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mo},be[Ka]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[Oa]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi},be[Pa]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi},be[_a]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[Qa]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[Da]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mo},be[$a]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[qa]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi},be[t0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ki},be[e0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mo},be[n0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Ui},be[r0]={Type:null,size:0,setter:Pn,arraySetter:_n,bindPoint:Mi};function Bi(o,n){return function(r){if(r.value)switch(o.disableVertexAttribArray(n),r.value.length){case 4:o.vertexAttrib4fv(n,r.value);break;case 3:o.vertexAttrib3fv(n,r.value);break;case 2:o.vertexAttrib2fv(n,r.value);break;case 1:o.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribPointer(n,r.numComponents||r.size,r.type||Ei,r.normalize||!1,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function pr(o,n){return function(r){if(r.value)if(o.disableVertexAttribArray(n),r.value.length===4)o.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Ko,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function Ai(o,n){return function(r){if(r.value)if(o.disableVertexAttribArray(n),r.value.length===4)o.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else o.bindBuffer(ki,r.buffer),o.enableVertexAttribArray(n),o.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Uo,r.stride||0,r.offset||0),o.vertexAttribDivisor&&o.vertexAttribDivisor(n,r.divisor||0)}}function Bo(o,n,r){const m=r.size,y=r.count;return function(I){o.bindBuffer(ki,I.buffer);const F=I.size||I.numComponents||m,Y=F/y,k=I.type||Ei,O=be[k].size*F,st=I.normalize||!1,xt=I.offset||0,Vt=O/y;for(let dt=0;dt<y;++dt)o.enableVertexAttribArray(n+dt),o.vertexAttribPointer(n+dt,Y,k,st,O,xt+Vt*dt),o.vertexAttribDivisor&&o.vertexAttribDivisor(n+dt,I.divisor||0)}}const Ln={};Ln[Ei]={size:4,setter:Bi},Ln[wl]={size:8,setter:Bi},Ln[Ll]={size:12,setter:Bi},Ln[Fl]={size:16,setter:Bi},Ln[Ko]={size:4,setter:pr},Ln[Hl]={size:8,setter:pr},Ln[Cl]={size:12,setter:pr},Ln[Nl]={size:16,setter:pr},Ln[Uo]={size:4,setter:Ai},Ln[Al]={size:8,setter:Ai},Ln[jl]={size:12,setter:Ai},Ln[zl]={size:16,setter:Ai},Ln[Jl]={size:4,setter:pr},Ln[kl]={size:8,setter:pr},Ln[El]={size:12,setter:pr},Ln[Kl]={size:16,setter:pr},Ln[Ul]={size:4,setter:Bo,count:2},Ln[Ml]={size:9,setter:Bo,count:3},Ln[Bl]={size:16,setter:Bo,count:4};const V0=/ERROR:\s*\d+:(\d+)/gi;function W0(o,n="",r=0){const m=[...n.matchAll(V0)],y=new Map(m.map((I,F)=>{const Y=parseInt(I[1]),k=m[F+1],et=k?k.index:n.length,O=n.substring(I.index,et);return[Y-1,O]}));return o.split(`
|
|
126
|
+
`).map((I,F)=>{const Y=y.get(F);return`${F+1+r}: ${I}${Y?`
|
|
127
127
|
|
|
128
128
|
^^^ ${Y}`:""}`}).join(`
|
|
129
129
|
`)}const ql=/^[ \t]*\n/;function tu(o){let n=0;return ql.test(o)&&(n=1,o=o.replace(ql,"")),{lineOffset:n,shaderSource:o}}function R0(o,n){return o.errorCallback(n),o.callback&&setTimeout(()=>{o.callback(`${n}
|
|
130
130
|
${o.errors.join(`
|
|
131
|
-
`)}`)}),null}function x0(o,n,r,m){if(m=m||Eo,!o.getShaderParameter(r,Ra)){const I=o.getShaderInfoLog(r),{lineOffset:
|
|
132
|
-
Error compiling ${ul(o,n)}: ${I}`;return m(k),k}return""}function Ao(o,n,r){let m,y,I;if(typeof n=="function"&&(r=n,n=void 0),typeof o=="function")r=o,o=void 0;else if(o&&!Array.isArray(o)){const
|
|
133
|
-
${
|
|
134
|
-
`)}`}}function C0(o,n,r,m,y){return L0(o,n,r,m,y)}function eu(o){const n=o.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const N0=/(\.|\[|]|\w+)/g,J0=o=>o>="0"&&o<="9";function k0(o,n,r,m){const y=o.split(N0).filter(Y=>Y!=="");let I=0,
|
|
135
|
-
`;return n}run(n){var y,I,
|
|
131
|
+
`)}`)}),null}function x0(o,n,r,m){if(m=m||Eo,!o.getShaderParameter(r,Ra)){const I=o.getShaderInfoLog(r),{lineOffset:F,shaderSource:Y}=tu(o.getShaderSource(r)),k=`${W0(Y,I,F)}
|
|
132
|
+
Error compiling ${ul(o,n)}: ${I}`;return m(k),k}return""}function Ao(o,n,r){let m,y,I;if(typeof n=="function"&&(r=n,n=void 0),typeof o=="function")r=o,o=void 0;else if(o&&!Array.isArray(o)){const et=o;r=et.errorCallback,o=et.attribLocations,m=et.transformFeedbackVaryings,y=et.transformFeedbackMode,I=et.callback}const F=r||Eo,Y=[],k={errorCallback(et,...O){Y.push(et),F(et,...O)},transformFeedbackVaryings:m,transformFeedbackMode:y,callback:I,errors:Y};{let et={};Array.isArray(o)?o.forEach(function(O,st){et[O]=n?n[st]:st}):et=o||{},k.attribLocations=et}return k}const I0=["VERTEX_SHADER","FRAGMENT_SHADER"];function S0(o,n){if(n.indexOf("frag")>=0)return Ia;if(n.indexOf("vert")>=0)return Sa}function Y0(o,n,r){const m=o.getAttachedShaders(n);for(const y of m)r.has(y)&&o.deleteShader(y);o.deleteProgram(n)}const T0=(o=0)=>new Promise(n=>setTimeout(n,o));function w0(o,n,r){const m=o.createProgram(),{attribLocations:y,transformFeedbackVaryings:I,transformFeedbackMode:F}=Ao(r);for(let Y=0;Y<n.length;++Y){let k=n[Y];if(typeof k=="string"){const et=Yl(k),O=et?et.text:k;let st=o[I0[Y]];et&&et.type&&(st=S0(o,et.type)||st),k=o.createShader(st),o.shaderSource(k,tu(O).shaderSource),o.compileShader(k),o.attachShader(m,k)}}Object.entries(y).forEach(([Y,k])=>o.bindAttribLocation(m,k,Y));{let Y=I;Y&&(Y.attribs&&(Y=Y.attribs),Array.isArray(Y)||(Y=Object.keys(Y)),o.transformFeedbackVaryings(m,Y,F||Ya))}return o.linkProgram(m),m}function L0(o,n,r,m,y){const I=Ao(r,m,y),F=new Set(n),Y=w0(o,n,I);function k(et,O){const st=H0(et,O,I.errorCallback);return st&&Y0(et,O,F),st}if(I.callback){F0(o,Y).then(()=>{const et=k(o,Y);I.callback(et,et?void 0:Y)});return}return k(o,Y)?void 0:Y}async function F0(o,n){const r=o.getExtension("KHR_parallel_shader_compile"),m=r?(I,F)=>I.getProgramParameter(F,r.COMPLETION_STATUS_KHR):()=>!0;let y=0;do await T0(y),y=1e3/60;while(!m(o,n))}function H0(o,n,r){if(r=r||Eo,!o.getProgramParameter(n,xa)){const y=o.getProgramInfoLog(n);r(`Error in program linking: ${y}`);const F=o.getAttachedShaders(n).map(Y=>x0(o,o.getShaderParameter(Y,o.SHADER_TYPE),Y,r));return`${y}
|
|
133
|
+
${F.filter(Y=>Y).join(`
|
|
134
|
+
`)}`}}function C0(o,n,r,m,y){return L0(o,n,r,m,y)}function eu(o){const n=o.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const N0=/(\.|\[|]|\w+)/g,J0=o=>o>="0"&&o<="9";function k0(o,n,r,m){const y=o.split(N0).filter(Y=>Y!=="");let I=0,F="";for(;;){const Y=y[I++];F+=Y;const k=J0(Y[0]),et=k?parseInt(Y):Y;if(k&&(F+=y[I++]),I===y.length){r[et]=n;break}else{const st=y[I++],xt=st==="[",Vt=r[et]||(xt?[]:{});r[et]=Vt,r=Vt,m[F]=m[F]||function(dt){return function(ht){nu(dt,ht)}}(Vt),F+=st}}}function E0(o,n){let r=0;function m(Y,k,et){const O=k.name.endsWith("[0]"),st=k.type,xt=be[st];if(!xt)throw new Error(`unknown type: 0x${st.toString(16)}`);let Vt;if(xt.bindPoint){const dt=r;r+=k.size,O?Vt=xt.arraySetter(o,st,dt,et,k.size):Vt=xt.setter(o,st,dt,et,k.size)}else xt.arraySetter&&O?Vt=xt.arraySetter(o,et):Vt=xt.setter(o,et);return Vt.location=et,Vt}const y={},I={},F=o.getProgramParameter(n,Tl);for(let Y=0;Y<F;++Y){const k=o.getActiveUniform(n,Y);if(eu(k))continue;let et=k.name;et.endsWith("[0]")&&(et=et.substr(0,et.length-3));const O=o.getUniformLocation(n,k.name);if(O){const st=m(n,k,O);y[et]=st,k0(et,st,I,y)}}return y}function K0(o,n){const r={},m=o.getProgramParameter(n,wa);for(let y=0;y<m;++y){const I=o.getTransformFeedbackVarying(n,y);r[I.name]={index:y,type:I.type,size:I.size}}return r}function U0(o,n){const r=o.getProgramParameter(n,Tl),m=[],y=[];for(let Y=0;Y<r;++Y){y.push(Y),m.push({});const k=o.getActiveUniform(n,Y);m[Y].name=k.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(Y){const k=Y[0],et=Y[1];o.getActiveUniforms(n,y,o[k]).forEach(function(O,st){m[st][et]=O})});const I={},F=o.getProgramParameter(n,La);for(let Y=0;Y<F;++Y){const k=o.getActiveUniformBlockName(n,Y),et={index:o.getUniformBlockIndex(n,k),usedByVertexShader:o.getActiveUniformBlockParameter(n,Y,Fa),usedByFragmentShader:o.getActiveUniformBlockParameter(n,Y,Ha),size:o.getActiveUniformBlockParameter(n,Y,Ca),uniformIndices:o.getActiveUniformBlockParameter(n,Y,Na)};et.used=et.usedByVertexShader||et.usedByFragmentShader,I[k]=et}return{blockSpecs:I,uniformData:m}}function nu(o,n){for(const r in n){const m=o[r];typeof m=="function"?m(n[r]):nu(o[r],n[r])}}function ru(o,...n){const r=o.uniformSetters||o,m=n.length;for(let y=0;y<m;++y){const I=n[y];if(Array.isArray(I)){const F=I.length;for(let Y=0;Y<F;++Y)ru(r,I[Y])}else for(const F in I){const Y=r[F];Y&&Y(I[F])}}}function M0(o,n){const r={},m=o.getProgramParameter(n,Ta);for(let y=0;y<m;++y){const I=o.getActiveAttrib(n,y);if(eu(I))continue;const F=o.getAttribLocation(n,I.name),Y=Ln[I.type],k=Y.setter(o,F,Y);k.location=F,r[I.name]=k}return r}function B0(o,n){for(const r in n){const m=o[r];m&&m(n[r])}}function A0(o,n,r){r.vertexArrayObject?o.bindVertexArray(r.vertexArrayObject):(B0(n.attribSetters||n,r.attribs),r.indices&&o.bindBuffer(Wa,r.indices))}function iu(o,n){const r=E0(o,n),m=M0(o,n),y={program:n,uniformSetters:r,attribSetters:m};return zr(o)&&(y.uniformBlockSpec=U0(o,n),y.transformFeedbackInfo=K0(o,n)),y}const j0=/\s|{|}|;/;function z0(o,n,r,m,y){const I=Ao(r,m,y),F=[];if(n=n.map(function(et){if(!j0.test(et)){const O=Yl(et);if(O)et=O.text;else{const st=`no element with id: ${et}`;I.errorCallback(st),F.push(st)}}return et}),F.length)return R0(I,"");const Y=I.callback;Y&&(I.callback=(et,O)=>{Y(et,et?void 0:iu(o,O))});const k=C0(o,n,I);return k?iu(o,k):null}const O0=4,ou=5123;function P0(o,n,r,m,y,I){r=r===void 0?O0:r;const F=n.indices,Y=n.elementType,k=m===void 0?n.numElements:m;y=y===void 0?0:y,Y||F?I!==void 0?o.drawElementsInstanced(r,k,Y===void 0?ou:n.elementType,y,I):o.drawElements(r,k,Y===void 0?ou:n.elementType,y):I!==void 0?o.drawArraysInstanced(r,y,k,I):o.drawArrays(r,y,k)}const su=36160,ji=36161,_0=3553,Q0=5121,D0=6402,$0=6408,q0=33190,t3=36012,e3=35056,n3=36013,r3=32854,i3=32855,o3=36194,lu=33189,uu=6401,cu=36168,jo=34041,zo=36064,zi=36096,au=36128,Oo=33306,Po=33071,_o=9729,s3=[{format:$0,type:Q0,min:_o,wrap:Po},{format:jo}],ir={};ir[jo]=Oo,ir[uu]=au,ir[cu]=au,ir[D0]=zi,ir[lu]=zi,ir[q0]=zi,ir[t3]=zi,ir[e3]=Oo,ir[n3]=Oo;function l3(o,n){return ir[o]||ir[n]}const br={};br[r3]=!0,br[i3]=!0,br[o3]=!0,br[jo]=!0,br[lu]=!0,br[uu]=!0,br[cu]=!0;function u3(o){return br[o]}const c3=32;function a3(o){return o>=zo&&o<zo+c3}function Oi(o,n,r,m){const y=su,I=o.createFramebuffer();o.bindFramebuffer(y,I),r=r||o.drawingBufferWidth,m=m||o.drawingBufferHeight,n=n||s3;const F=[],Y={framebuffer:I,attachments:[],width:r,height:m};return n.forEach(function(k,et){let O=k.attachment;const st=k.samples,xt=k.format;let Vt=k.attachmentPoint||l3(xt,k.internalFormat);if(Vt||(Vt=zo+et),a3(Vt)&&F.push(Vt),!O)if(st!==void 0||u3(xt))O=o.createRenderbuffer(),o.bindRenderbuffer(ji,O),st>1?o.renderbufferStorageMultisample(ji,st,xt,r,m):o.renderbufferStorage(ji,xt,r,m);else{const dt=Object.assign({},k);dt.width=r,dt.height=m,dt.auto===void 0&&(dt.auto=!1,dt.min=dt.min||dt.minMag||_o,dt.mag=dt.mag||dt.minMag||_o,dt.wrapS=dt.wrapS||dt.wrap||Po,dt.wrapT=dt.wrapT||dt.wrap||Po),O=Sl(o,dt)}if(G2(o,O))o.framebufferRenderbuffer(y,Vt,ji,O);else if(Ro(o,O))k.layer!==void 0?o.framebufferTextureLayer(y,Vt,O,k.level||0,k.layer):o.framebufferTexture2D(y,Vt,k.target||_0,O,k.level||0);else throw new Error("unknown attachment type");Y.attachments.push(O)}),o.drawBuffers&&o.drawBuffers(F),Y}function d3(o,n,r){r=r||su,n?(o.bindFramebuffer(r,n.framebuffer),o.viewport(0,0,n.width,n.height)):(o.bindFramebuffer(r,null),o.viewport(0,0,o.drawingBufferWidth,o.drawingBufferHeight))}function mn(o,n){return()=>n instanceof WebGLTexture?n:Sl(o,{src:n,wrap:o.CLAMP_TO_EDGE})}const du=2;class xr{constructor(n){Rt(this,"id","_");Rt(this,"context");Rt(this,"output");Rt(this,"fbi");Rt(this,"options");Rt(this,"programInfo");Rt(this,"bufferInfo");Rt(this,"profiler");Rt(this,"lastRun");const{context:r,width:m,height:y}=n;this.context=r,this.options=n;const I=this.buildDefines();this.programInfo=z0(this.context,[I+this.getVertexShader(),I+this.getFragmentShader()]),this.bufferInfo=j2(this.context,this.getBuffers()),this.fbi=Oi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],m,y),this.output=this.fbi.attachments[0]}resizeOutput(n,r){this.fbi=Oi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.options.width=n,this.options.height=r,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let n="";const r=this.getDefines();for(let m in r)n+=`#define ${m} ${r[m].toFixed(1)}
|
|
135
|
+
`;return n}run(n){var y,I,F,Y,k,et;(y=this.profiler)==null||y.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(I=this.profiler)==null||I.pushContext(`[${this.id}] UNIFORMS`);for(const O in n)typeof n[O]=="function"&&((F=this.profiler)==null||F.pushContext(`[${this.id}] UNI : ${O}`),n[O]=n[O](),(Y=this.profiler)==null||Y.popContext(`[${this.id}] UNI : ${O}`));(k=this.profiler)==null||k.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let m=0;this.lastRun&&(m=(r-this.lastRun)/1e3),this.lastRun=r,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),A0(this.context,this.programInfo,this.bufferInfo),ru(this.programInfo,{delta:m,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),d3(this.context,this.options.disableFramebuffer?null:this.fbi),P0(this.context,this.bufferInfo),(et=this.profiler)==null||et.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(n){this.profiler=n}}const h3=`precision mediump float;
|
|
136
136
|
|
|
137
137
|
varying vec2 _texture_coord;
|
|
138
138
|
|
|
@@ -239,7 +239,7 @@ void main() {
|
|
|
239
239
|
diff.x = normalizedRadius.x;
|
|
240
240
|
}
|
|
241
241
|
return result / factorSum;
|
|
242
|
-
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var k;const m=Math.PI*2,y=Math.max((k=this.options.radius)!=null?k:1,1),I=1/(m*y**2),
|
|
242
|
+
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var k;const m=Math.PI*2,y=Math.max((k=this.options.radius)!=null?k:1,1),I=1/(m*y**2),F=-(n**2+r**2),Y=I*F;return I*Math.E**Y}}class W3 extends $o{constructor(r,m){super();Rt(this,"inputImage");Rt(this,"inputMask");this.context=r;const y={context:r,height:r.canvas.height,width:r.canvas.width},I=new fu({...y,radius:m,type:qo.GAUSSIAN}),F=new Qo({...y,disableFramebuffer:!0});this.addStep({program:I,getUniforms:()=>({texture:mn(r,this.inputImage)})}),this.addStep({program:F,getUniforms:()=>({background:mn(r,this.inputImage),foreground:mn(r,I.output),threshold:mn(r,this.inputMask)})})}setData(r,m){this.inputImage=r,this.inputMask=m}}class ts extends xr{constructor(r){super(r);Rt(this,"fbi2");this.fbi2=Oi(r.context,[{format:r.context.RGBA,type:r.context.UNSIGNED_BYTE,min:r.context.LINEAR,mag:r.context.LINEAR,wrap:r.context.CLAMP_TO_EDGE}],r.width,r.height)}run(r){const m=this.fbi;this.fbi=this.fbi2,this.fbi2=m,this.output=this.fbi.attachments[0],super.run({...r,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(r,m){super.resizeOutput(r,m),this.fbi2=Oi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],r,m)}}const R3=`precision mediump float;
|
|
243
243
|
|
|
244
244
|
varying vec2 _texture_coord;
|
|
245
245
|
|
|
@@ -385,7 +385,7 @@ void main() {
|
|
|
385
385
|
gl_Position = vec4(position, 0., 1.);
|
|
386
386
|
_texture_coord = texture_coord;
|
|
387
387
|
}
|
|
388
|
-
`;class
|
|
388
|
+
`;class F3 extends xr{getFragmentShader(){return w3}getVertexShader(){return L3}}const H3=`precision mediump float;
|
|
389
389
|
|
|
390
390
|
varying vec2 _texture_coord;
|
|
391
391
|
|
|
@@ -413,7 +413,7 @@ void main() {
|
|
|
413
413
|
gl_Position = vec4(position, 0., 1.);
|
|
414
414
|
_texture_coord = texture_coord;
|
|
415
415
|
}
|
|
416
|
-
`;class N3 extends ts{getFragmentShader(){return
|
|
416
|
+
`;class N3 extends ts{getFragmentShader(){return H3}getVertexShader(){return C3}}const J3=`precision mediump float;
|
|
417
417
|
|
|
418
418
|
varying vec2 _texture_coord;
|
|
419
419
|
|
|
@@ -436,7 +436,7 @@ void main() {
|
|
|
436
436
|
gl_Position = vec4(position, 0., 1.);
|
|
437
437
|
_texture_coord = texture_coord;
|
|
438
438
|
}
|
|
439
|
-
`;class E3 extends ts{getFragmentShader(){return J3}getVertexShader(){return k3}}class
|
|
439
|
+
`;class E3 extends ts{getFragmentShader(){return J3}getVertexShader(){return k3}}class K3 extends Do{constructor(r,m,y){super();Rt(this,"inputImage");Rt(this,"inputMask");Rt(this,"previousInputImage");Rt(this,"previousInputMask");Rt(this,"output");Rt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});this.context=r;const I={context:r,height:y,width:m},F=new I3(I),Y=new fu({...I,radius:1,type:qo.GAUSSIAN}),k=new E3(I),et=new N3(I),O=new F3(I),st=new T3({...I}),xt=.66,Vt=640,dt=480,ht=256,Ht=144;let Lt=1;Lt*=Math.max(Vt/ht,dt/Ht);const At=Math.max(1,Math.sqrt(Lt)*xt),_=1/Vt,Ee=1/dt;this.addStep({program:F,getUniforms:()=>({image_now:mn(r,this.inputImage),image_before:mn(r,this.previousInputImage),mask_now:mn(r,this.inputMask),mask_before:mn(r,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:k,getUniforms:()=>({inputs:mn(r,this.inputMask),threshold:mn(r,F.output)})}),this.addStep({program:O,getUniforms:()=>({texture:mn(r,k.output)})}),this.addStep({program:et,getUniforms:()=>({texture:mn(r,O.output)})}),this.addStep({program:Y,getUniforms:()=>({texture:mn(r,et.output)})}),this.addStep({program:st,getUniforms:()=>({input_frame:mn(r,this.inputImage),segmentation_mask:mn(r,this.inputMask),threshold:mn(r,Y.output),texel_size:[_,Ee],step:At,radius:Lt,offset:At>1?At*.5:0,sigma_texel:Math.max(_,Ee)*Lt,sigma_color:.1})}),this.output=st.output}setData(r,m){this.previousInputImage=this.inputImage?this.inputImage:r,this.previousInputMask=this.inputMask?this.inputMask:m,this.inputImage=r,this.inputMask=m}setOptions(r){this.options=r}}const U3=`precision mediump float;
|
|
440
440
|
|
|
441
441
|
varying vec2 _texture_coord;
|
|
442
442
|
uniform sampler2D texture;
|
|
@@ -455,4 +455,4 @@ void main() {
|
|
|
455
455
|
_texture_coord.y = 1. - texture_coord.y;
|
|
456
456
|
}
|
|
457
457
|
}
|
|
458
|
-
`;class B3 extends xr{getFragmentShader(){return K3}getVertexShader(){return M3}}class A3 extends Do{constructor(r,m,y){super();Rt(this,"inputImage");this.context=r;const I={context:r,height:y,width:m};this.addStep({program:new B3({...I,disableFramebuffer:!0}),getUniforms:()=>({texture:mn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}class j3{constructor(n){Rt(this,"resize");Rt(this,"canvas");Rt(this,"context");this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.width,this.canvas.height=n.height,this.resize=new A3(this.context,n.width,n.height)}resizeForeground(n,r){this.canvas.width=n,this.canvas.height=r,this.resize.resizeOutput(n,r)}async process(n){var r,m;return this.canvas.width=this.canvas.width,(r=this.resize)==null||r.setData(n),(m=this.resize)==null||m.run(),this.canvas}}class z3{constructor(n,r){Rt(this,"improveMaskSegmentation");Rt(this,"backgroundResizer");Rt(this,"backgroundImage");Rt(this,"backgroundVideo");Rt(this,"profiler");Rt(this,"activePipeline");Rt(this,"canvas");Rt(this,"options");Rt(this,"context");Rt(this,"virtualBGImage");this.id=n,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=r.foregroundWidth,this.canvas.height=r.foregroundHeight,this.improveMaskSegmentation=new U3(this.context,r.maskWidth,r.maskHeight),this.backgroundImage=new hu(this.context),this.backgroundVideo=new G3(this.context),this.backgroundResizer=new j3({width:r.foregroundWidth,height:r.foregroundHeight})}setBackgroundOptions(n){switch(n.transformerType){case"BackgroundBlur":this.activePipeline=new v3(this.context,this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.activePipeline=new W3(this.context,this.getBlurSize(n.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break}this.options=n}setFlickeringOptions(n){var r;(r=this.improveMaskSegmentation)==null||r.setOptions(n)}setVideoBGReadable(n){this.backgroundVideo.inputVideo=n}async setVirtualBGImage(n){this.virtualBGImage=n,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(n)}async process(n,r){var m,y,I,H,Y,k,nt;if(this.activePipeline&&n.width&&(r==null?void 0:r.width)){const P=`[${this.id}] background-filter`;(m=this.profiler)==null||m.pushContext(P);let st=r;(((y=this.options)==null?void 0:y.selfieSegmentationType)&&((I=this.options)==null?void 0:I.selfieSegmentationType)==="PRECISE"||!((H=this.options)!=null&&H.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(n,r),this.improveMaskSegmentation.run(),st=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),(Y=this.activePipeline)==null||Y.setData(n,st),(k=this.activePipeline)==null||k.run(),(nt=this.profiler)==null||nt.popContext(P)}}async resizeForeground(n,r){var m;this.canvas.width=n,this.canvas.height=r,this.backgroundImage.resizeOutput(n,r),this.backgroundVideo.resizeOutput(n,r),this.backgroundResizer.resizeForeground(n,r),(m=this.activePipeline)==null||m.resizeOutput(n,r),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(n){const r=new a2(this.context);return this.profiler=r,r.start(),await _s(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}getBlurSize(n=Mr.Low){switch(n){case Mr.Low:return 5;case Mr.High:return 12}return n}}class mu{constructor(){Rt(this,"selfieSegmentation",new ks);Rt(this,"backgroundFilter");Rt(this,"previousDimensions",{width:0,height:0})}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath);const{width:m,height:y}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new z3(n,{foregroundWidth:1,foregroundHeight:1,maskWidth:m,maskHeight:y})}async transform(n,r){var I,H,Y,k;const m=await createImageBitmap(n),y=await this.selfieSegmentation.process(m);y?((m.width!==this.previousDimensions.width||m.height!==this.previousDimensions.height)&&(this.previousDimensions.width=m.width,this.previousDimensions.height=m.height,await((I=this.backgroundFilter)==null?void 0:I.resizeForeground(m.width,m.height))),await((H=this.backgroundFilter)==null?void 0:H.process(m,y)),n.close(),r.enqueue(new VideoFrame((Y=this.backgroundFilter)==null?void 0:Y.canvas,{timestamp:(k=n.timestamp)!=null?k:0,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n))}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n)}async profile(n){var r,m;return(m=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?m:[]}}const rs=class{constructor(){Rt(this,"backgroundTransformer",new mu);Rt(this,"mediaProcessor",new Bc);Rt(this,"rate",30);Rt(this,"resolveOnMediaProcessor");Rt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((m,y)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:m,data:y}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:m,data:y})})}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){Yc(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let es=rs;(()=>{s2("ProcessorWorker",rs)})();const pu="dmFyIGVkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgdGQ9KEssdGUscmUpPT50ZSBpbiBLP2VkKEssdGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJlfSk6S1t0ZV09cmU7dmFyIHA9KEssdGUscmUpPT4odGQoSyx0eXBlb2YgdGUhPSJzeW1ib2wiP3RlKyIiOnRlLHJlKSxyZSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBLPShyPT4ocltyLklOSVQ9MF09IklOSVQiLHJbci5GT1JXQVJEPTFdPSJGT1JXQVJEIixyW3IuVEVSTUlOQVRFPTJdPSJURVJNSU5BVEUiLHIpKShLfHx7fSk7ZnVuY3Rpb24gdGUocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1mdW5jdGlvbiByZShyLGUpe2NvbnN0e2lkOnR9PXIsbj1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHJlc3VsdDplfSxuLmZpbHRlcihpPT50ZShpKSkpfWFzeW5jIGZ1bmN0aW9uIHFpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7cmUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWZ1bmN0aW9uICRyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1jb25zdCBHcj17fTtmdW5jdGlvbiBYaShyLGUpe2Uud29ya2VySWQ9ciwkcigpJiYoR3JbZS53b3JrZXJJZF09ZSl9ZnVuY3Rpb24gWWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3RdPXIuYXJncyxuPUdyW3RdO2lmKG4pZS5pbnN0YW5jZT1uZXcgbihyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7cmUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gUWkocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSkscmUocixuKX1mdW5jdGlvbiBLaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIEsuSU5JVDpZaSh0LHIpO2JyZWFrO2Nhc2UgSy5GT1JXQVJEOnFpKHQscik7YnJlYWs7Y2FzZSBLLlRFUk1JTkFURTpRaSh0LHIpO2JyZWFrfX19JHIoKSYmS2koKTtjbGFzcyBuZXt9bmUudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxuZS5lcnJvcnM9e3RyYW5zZm9ybWVyX25vbmU6Ik5vIHRyYW5zZm9ybWVycyBwcm92aWRlZCIsdHJhbnNmb3JtZXJfc3RhcnQ6IkNhbm5vdCBzdGFydCB0cmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJfdHJhbnNmb3JtOiJDYW5ub3QgdHJhbnNmb3JtIGZyYW1lIix0cmFuc2Zvcm1lcl9mbHVzaDoiQ2Fubm90IGZsdXNoIHRyYW5zZm9ybWVyIixyZWFkYWJsZV9udWxsOiJSZWFkYWJsZSBpcyBudWxsIix3cml0YWJsZV9udWxsOiJXcml0YWJsZSBpcyBudWxsIn07dmFyIE90PXtleHBvcnRzOnt9fSx6cj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksbz0wO288aS5sZW5ndGg7bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybiBlLmFwcGx5KHQsaSl9fSxKaT16cixvZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIE50KHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpfWZ1bmN0aW9uIFV0KHIpe3JldHVybiB0eXBlb2Ygcj4idSJ9ZnVuY3Rpb24gWmkocil7cmV0dXJuIHIhPT1udWxsJiYhVXQocikmJnIuY29uc3RydWN0b3IhPT1udWxsJiYhVXQoci5jb25zdHJ1Y3RvcikmJnR5cGVvZiByLmNvbnN0cnVjdG9yLmlzQnVmZmVyPT0iZnVuY3Rpb24iJiZyLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHIpfWZ1bmN0aW9uIEhyKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIn1mdW5jdGlvbiBlbyhyKXtyZXR1cm4gb2UuY2FsbChyKT09PSJbb2JqZWN0IEZvcm1EYXRhXSJ9ZnVuY3Rpb24gdG8ocil7dmFyIGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhyKTplPXImJnIuYnVmZmVyJiZIcihyLmJ1ZmZlciksZX1mdW5jdGlvbiBybyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmcifWZ1bmN0aW9uIG5vKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciJ9ZnVuY3Rpb24gVnIocil7cmV0dXJuIHIhPT1udWxsJiZ0eXBlb2Ygcj09Im9iamVjdCJ9ZnVuY3Rpb24gamUocil7aWYob2UuY2FsbChyKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO3ZhciBlPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIGlvKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRGF0ZV0ifWZ1bmN0aW9uIG9vKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRmlsZV0ifWZ1bmN0aW9uIHNvKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgQmxvYl0ifWZ1bmN0aW9uIFdyKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRnVuY3Rpb25dIn1mdW5jdGlvbiBhbyhyKXtyZXR1cm4gVnIocikmJldyKHIucGlwZSl9ZnVuY3Rpb24gdW8ocil7cmV0dXJuIG9lLmNhbGwocik9PT0iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIn1mdW5jdGlvbiBjbyhyKXtyZXR1cm4gci50cmltP3IudHJpbSgpOnIucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfWZ1bmN0aW9uIGZvKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiJiYobmF2aWdhdG9yLnByb2R1Y3Q9PT0iUmVhY3ROYXRpdmUifHxuYXZpZ2F0b3IucHJvZHVjdD09PSJOYXRpdmVTY3JpcHQifHxuYXZpZ2F0b3IucHJvZHVjdD09PSJOUyIpPyExOnR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUifWZ1bmN0aW9uIEJ0KHIsZSl7aWYoIShyPT09bnVsbHx8dHlwZW9mIHI+InUiKSlpZih0eXBlb2YgciE9Im9iamVjdCImJihyPVtyXSksTnQocikpZm9yKHZhciB0PTAsbj1yLmxlbmd0aDt0PG47dCsrKWUuY2FsbChudWxsLHJbdF0sdCxyKTtlbHNlIGZvcih2YXIgaSBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGkpJiZlLmNhbGwobnVsbCxyW2ldLGkscil9ZnVuY3Rpb24ga3QoKXt2YXIgcj17fTtmdW5jdGlvbiBlKGksbyl7amUocltvXSkmJmplKGkpP3Jbb109a3QocltvXSxpKTpqZShpKT9yW29dPWt0KHt9LGkpOk50KGkpP3Jbb109aS5zbGljZSgpOnJbb109aX1mb3IodmFyIHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKylCdChhcmd1bWVudHNbdF0sZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbG8ocixlLHQpe3JldHVybiBCdChlLGZ1bmN0aW9uKGksbyl7dCYmdHlwZW9mIGk9PSJmdW5jdGlvbiI/cltvXT1KaShpLHQpOnJbb109aX0pLHJ9ZnVuY3Rpb24gbW8ocil7cmV0dXJuIHIuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYocj1yLnNsaWNlKDEpKSxyfXZhciBHPXtpc0FycmF5Ok50LGlzQXJyYXlCdWZmZXI6SHIsaXNCdWZmZXI6WmksaXNGb3JtRGF0YTplbyxpc0FycmF5QnVmZmVyVmlldzp0byxpc1N0cmluZzpybyxpc051bWJlcjpubyxpc09iamVjdDpWcixpc1BsYWluT2JqZWN0OmplLGlzVW5kZWZpbmVkOlV0LGlzRGF0ZTppbyxpc0ZpbGU6b28saXNCbG9iOnNvLGlzRnVuY3Rpb246V3IsaXNTdHJlYW06YW8saXNVUkxTZWFyY2hQYXJhbXM6dW8saXNTdGFuZGFyZEJyb3dzZXJFbnY6Zm8sZm9yRWFjaDpCdCxtZXJnZTprdCxleHRlbmQ6bG8sdHJpbTpjbyxzdHJpcEJPTTptb30sRWU9RztmdW5jdGlvbiBqcihyKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgcXI9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciBpO2lmKG4paT1uKHQpO2Vsc2UgaWYoRWUuaXNVUkxTZWFyY2hQYXJhbXModCkpaT10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgbz1bXTtFZS5mb3JFYWNoKHQsZnVuY3Rpb24odSxmKXt1PT09bnVsbHx8dHlwZW9mIHU+InUifHwoRWUuaXNBcnJheSh1KT9mPWYrIltdIjp1PVt1XSxFZS5mb3JFYWNoKHUsZnVuY3Rpb24oZCl7RWUuaXNEYXRlKGQpP2Q9ZC50b0lTT1N0cmluZygpOkVlLmlzT2JqZWN0KGQpJiYoZD1KU09OLnN0cmluZ2lmeShkKSksby5wdXNoKGpyKGYpKyI9IitqcihkKSl9KSl9KSxpPW8uam9pbigiJiIpfWlmKGkpe3ZhciBzPWUuaW5kZXhPZigiIyIpO3MhPT0tMSYmKGU9ZS5zbGljZSgwLHMpKSxlKz0oZS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBlfSxobz1HO2Z1bmN0aW9uIHFlKCl7dGhpcy5oYW5kbGVycz1bXX1xZS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOm4/bi5zeW5jaHJvbm91czohMSxydW5XaGVuOm4/bi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxxZS5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LHFlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2hvLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihuKXtuIT09bnVsbCYmZShuKX0pfTt2YXIgcG89cWUseW89Ryxfbz1mdW5jdGlvbihlLHQpe3lvLmZvckVhY2goZSxmdW5jdGlvbihpLG8pe28hPT10JiZvLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPWksZGVsZXRlIGVbb10pfSl9LFhyPWZ1bmN0aW9uKGUsdCxuLGksbyl7cmV0dXJuIGUuY29uZmlnPXQsbiYmKGUuY29kZT1uKSxlLnJlcXVlc3Q9aSxlLnJlc3BvbnNlPW8sZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fSxlfSx4bz1YcixZcj1mdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzPW5ldyBFcnJvcihlKTtyZXR1cm4geG8ocyx0LG4saSxvKX0sZ289WXIsYm89ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFuLnN0YXR1c3x8IWl8fGkobi5zdGF0dXMpP2Uobik6dChnbygiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKX0sWGU9Ryx2bz1YZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKHQsbixpLG8scyxhKXt2YXIgdT1bXTt1LnB1c2godCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pKSxYZS5pc051bWJlcihpKSYmdS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoaSkudG9HTVRTdHJpbmcoKSksWGUuaXNTdHJpbmcobykmJnUucHVzaCgicGF0aD0iK28pLFhlLmlzU3RyaW5nKHMpJiZ1LnB1c2goImRvbWFpbj0iK3MpLGE9PT0hMCYmdS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9dS5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKHQpe3ZhciBuPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIit0KyIpPShbXjtdKikiKSk7cmV0dXJuIG4/ZGVjb2RlVVJJQ29tcG9uZW50KG5bM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLndyaXRlKHQsIiIsRGF0ZS5ub3coKS04NjRlNSl9fX0oKTpmdW5jdGlvbigpe3JldHVybnt3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fX0oKSxFbz1mdW5jdGlvbihlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfSxUbz1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfSxBbz1Fbyx3bz1UbyxSbz1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhQW8odCk/d28oZSx0KTp0fSxMdD1HLFNvPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sSW89ZnVuY3Rpb24oZSl7dmFyIHQ9e30sbixpLG87cmV0dXJuIGUmJkx0LmZvckVhY2goZS5zcGxpdChgCmApLGZ1bmN0aW9uKGEpe2lmKG89YS5pbmRleE9mKCI6Iiksbj1MdC50cmltKGEuc3Vic3RyKDAsbykpLnRvTG93ZXJDYXNlKCksaT1MdC50cmltKGEuc3Vic3RyKG8rMSkpLG4pe2lmKHRbbl0mJlNvLmluZGV4T2Yobik+PTApcmV0dXJuO249PT0ic2V0LWNvb2tpZSI/dFtuXT0odFtuXT90W25dOltdKS5jb25jYXQoW2ldKTp0W25dPXRbbl0/dFtuXSsiLCAiK2k6aX19KSx0fSxRcj1HLEZvPVFyLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG47ZnVuY3Rpb24gaShvKXt2YXIgcz1vO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpLHM9dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIscykse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiBuPWkod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHMpe3ZhciBhPVFyLmlzU3RyaW5nKHMpP2kocyk6cztyZXR1cm4gYS5wcm90b2NvbD09PW4ucHJvdG9jb2wmJmEuaG9zdD09PW4uaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gJHQocil7dGhpcy5tZXNzYWdlPXJ9JHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LCR0LnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBZZT0kdCxRZT1HLFBvPWJvLERvPXZvLE1vPXFyLENvPVJvLE9vPUlvLE5vPUZvLEd0PVlyLFVvPUplLEJvPVllLEtyPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPWUuZGF0YSxzPWUuaGVhZGVycyxhPWUucmVzcG9uc2VUeXBlLHU7ZnVuY3Rpb24gZigpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUodSksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix1KX1RZS5pc0Zvcm1EYXRhKG8pJiZkZWxldGUgc1siQ29udGVudC1UeXBlIl07dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIGQ9ZS5hdXRoLnVzZXJuYW1lfHwiIix5PWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7cy5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoZCsiOiIreSl9dmFyIF89Q28oZS5iYXNlVVJMLGUudXJsKTtjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxNbyhfLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQ7ZnVuY3Rpb24gbSgpe2lmKCEhYyl7dmFyIHY9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjP09vKGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsYj0hYXx8YT09PSJ0ZXh0Inx8YT09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLEE9e2RhdGE6YixzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczp2LGNvbmZpZzplLHJlcXVlc3Q6Y307UG8oZnVuY3Rpb24oQyl7bihDKSxmKCl9LGZ1bmN0aW9uKEMpe2koQyksZigpfSxBKSxjPW51bGx9fWlmKCJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1tOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWN8fGMucmVhZHlTdGF0ZSE9PTR8fGMuc3RhdHVzPT09MCYmIShjLnJlc3BvbnNlVVJMJiZjLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChtKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7IWN8fChpKEd0KCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe2koR3QoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciBiPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixBPWUudHJhbnNpdGlvbmFsfHxVby50cmFuc2l0aW9uYWw7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoYj1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGkoR3QoYixlLEEuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxRZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgeD0oZS53aXRoQ3JlZGVudGlhbHN8fE5vKF8pKSYmZS54c3JmQ29va2llTmFtZT9Eby5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDt4JiYoc1tlLnhzcmZIZWFkZXJOYW1lXT14KX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZRZS5mb3JFYWNoKHMsZnVuY3Rpb24oYixBKXt0eXBlb2Ygbz4idSImJkEudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiP2RlbGV0ZSBzW0FdOmMuc2V0UmVxdWVzdEhlYWRlcihBLGIpfSksUWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscyksYSYmYSE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSx0eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHU9ZnVuY3Rpb24odil7IWN8fChpKCF2fHx2JiZ2LnR5cGU/bmV3IEJvKCJjYW5jZWxlZCIpOnYpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZSh1KSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/dSgpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix1KSkpLG98fChvPW51bGwpLGMuc2VuZChvKX0pfSxPPUcsSnI9X28sa289WHIsTG89eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBacihyLGUpeyFPLmlzVW5kZWZpbmVkKHIpJiZPLmlzVW5kZWZpbmVkKHJbIkNvbnRlbnQtVHlwZSJdKSYmKHJbIkNvbnRlbnQtVHlwZSJdPWUpfWZ1bmN0aW9uICRvKCl7dmFyIHI7cmV0dXJuKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSJ8fHR5cGVvZiBwcm9jZXNzPCJ1IiYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpPT09IltvYmplY3QgcHJvY2Vzc10iKSYmKHI9S3IpLHJ9ZnVuY3Rpb24gR28ocixlLHQpe2lmKE8uaXNTdHJpbmcocikpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShyKSxPLnRyaW0ocil9Y2F0Y2gobil7aWYobi5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBufXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkocil9dmFyIEtlPXt0cmFuc2l0aW9uYWw6e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LGFkYXB0ZXI6JG8oKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBKcih0LCJBY2NlcHQiKSxKcih0LCJDb250ZW50LVR5cGUiKSxPLmlzRm9ybURhdGEoZSl8fE8uaXNBcnJheUJ1ZmZlcihlKXx8Ty5pc0J1ZmZlcihlKXx8Ty5pc1N0cmVhbShlKXx8Ty5pc0ZpbGUoZSl8fE8uaXNCbG9iKGUpP2U6Ty5pc0FycmF5QnVmZmVyVmlldyhlKT9lLmJ1ZmZlcjpPLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhacih0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6Ty5pc09iamVjdChlKXx8dCYmdFsiQ29udGVudC1UeXBlIl09PT0iYXBwbGljYXRpb24vanNvbiI/KFpyKHQsImFwcGxpY2F0aW9uL2pzb24iKSxHbyhlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8S2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxpPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbz0hbiYmdGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYob3x8aSYmTy5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKHMpe2lmKG8pdGhyb3cgcy5uYW1lPT09IlN5bnRheEVycm9yIj9rbyhzLHRoaXMsIkVfSlNPTl9QQVJTRSIpOnN9cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07Ty5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKGUpe0tlLmhlYWRlcnNbZV09e319KSxPLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtLZS5oZWFkZXJzW2VdPU8ubWVyZ2UoTG8pfSk7dmFyIEplPUtlLHpvPUcsSG89SmUsVm89ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXN8fEhvO3JldHVybiB6by5mb3JFYWNoKG4sZnVuY3Rpb24ocyl7ZT1zLmNhbGwoaSxlLHQpfSksZX0sZW49ZnVuY3Rpb24oZSl7cmV0dXJuISEoZSYmZS5fX0NBTkNFTF9fKX0sdG49Ryx6dD1WbyxXbz1lbixqbz1KZSxxbz1ZZTtmdW5jdGlvbiBIdChyKXtpZihyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxyLnNpZ25hbCYmci5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgcW8oImNhbmNlbGVkIil9dmFyIFhvPWZ1bmN0aW9uKGUpe0h0KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT16dC5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz10bi5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLHRuLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sZnVuY3Rpb24oaSl7ZGVsZXRlIGUuaGVhZGVyc1tpXX0pO3ZhciB0PWUuYWRhcHRlcnx8am8uYWRhcHRlcjtyZXR1cm4gdChlKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBIdChlKSxpLmRhdGE9enQuY2FsbChlLGkuZGF0YSxpLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksaX0sZnVuY3Rpb24oaSl7cmV0dXJuIFdvKGkpfHwoSHQoZSksaSYmaS5yZXNwb25zZSYmKGkucmVzcG9uc2UuZGF0YT16dC5jYWxsKGUsaS5yZXNwb25zZS5kYXRhLGkucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KGkpfSl9LHo9Ryxybj1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49e307ZnVuY3Rpb24gaShjLGQpe3JldHVybiB6LmlzUGxhaW5PYmplY3QoYykmJnouaXNQbGFpbk9iamVjdChkKT96Lm1lcmdlKGMsZCk6ei5pc1BsYWluT2JqZWN0KGQpP3oubWVyZ2Uoe30sZCk6ei5pc0FycmF5KGQpP2Quc2xpY2UoKTpkfWZ1bmN0aW9uIG8oYyl7aWYoei5pc1VuZGVmaW5lZCh0W2NdKSl7aWYoIXouaXNVbmRlZmluZWQoZVtjXSkpcmV0dXJuIGkodm9pZCAwLGVbY10pfWVsc2UgcmV0dXJuIGkoZVtjXSx0W2NdKX1mdW5jdGlvbiBzKGMpe2lmKCF6LmlzVW5kZWZpbmVkKHRbY10pKXJldHVybiBpKHZvaWQgMCx0W2NdKX1mdW5jdGlvbiBhKGMpe2lmKHouaXNVbmRlZmluZWQodFtjXSkpe2lmKCF6LmlzVW5kZWZpbmVkKGVbY10pKXJldHVybiBpKHZvaWQgMCxlW2NdKX1lbHNlIHJldHVybiBpKHZvaWQgMCx0W2NdKX1mdW5jdGlvbiB1KGMpe2lmKGMgaW4gdClyZXR1cm4gaShlW2NdLHRbY10pO2lmKGMgaW4gZSlyZXR1cm4gaSh2b2lkIDAsZVtjXSl9dmFyIGY9e3VybDpzLG1ldGhvZDpzLGRhdGE6cyxiYXNlVVJMOmEsdHJhbnNmb3JtUmVxdWVzdDphLHRyYW5zZm9ybVJlc3BvbnNlOmEscGFyYW1zU2VyaWFsaXplcjphLHRpbWVvdXQ6YSx0aW1lb3V0TWVzc2FnZTphLHdpdGhDcmVkZW50aWFsczphLGFkYXB0ZXI6YSxyZXNwb25zZVR5cGU6YSx4c3JmQ29va2llTmFtZTphLHhzcmZIZWFkZXJOYW1lOmEsb25VcGxvYWRQcm9ncmVzczphLG9uRG93bmxvYWRQcm9ncmVzczphLGRlY29tcHJlc3M6YSxtYXhDb250ZW50TGVuZ3RoOmEsbWF4Qm9keUxlbmd0aDphLHRyYW5zcG9ydDphLGh0dHBBZ2VudDphLGh0dHBzQWdlbnQ6YSxjYW5jZWxUb2tlbjphLHNvY2tldFBhdGg6YSxyZXNwb25zZUVuY29kaW5nOmEsdmFsaWRhdGVTdGF0dXM6dX07cmV0dXJuIHouZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLGZ1bmN0aW9uKGQpe3ZhciB5PWZbZF18fG8sXz15KGQpO3ouaXNVbmRlZmluZWQoXykmJnkhPT11fHwobltkXT1fKX0pLG59LG5uPXt2ZXJzaW9uOiIwLjI1LjAifSxZbz1ubi52ZXJzaW9uLFZ0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaChmdW5jdGlvbihyLGUpe1Z0W3JdPWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09PXJ8fCJhIisoZTwxPyJuICI6IiAiKStyfX0pO3ZhciBvbj17fTtWdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGkobyxzKXtyZXR1cm4iW0F4aW9zIHYiK1lvKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIrcysobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihvLHMsYSl7aWYoZT09PSExKXRocm93IG5ldyBFcnJvcihpKHMsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIW9uW3NdJiYob25bc109ITAsY29uc29sZS53YXJuKGkocywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxzLGEpOiEwfX07ZnVuY3Rpb24gUW8ocixlLHQpe2lmKHR5cGVvZiByIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKHIpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPWVbb107aWYocyl7dmFyIGE9cltvXSx1PWE9PT12b2lkIDB8fHMoYSxvLHIpO2lmKHUhPT0hMCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19dmFyIEtvPXthc3NlcnRPcHRpb25zOlFvLHZhbGlkYXRvcnM6VnR9LHNuPUcsSm89cXIsYW49cG8sdW49WG8sWmU9cm4sY249S28sVGU9Y24udmFsaWRhdG9ycztmdW5jdGlvbiBNZShyKXt0aGlzLmRlZmF1bHRzPXIsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGFuLHJlc3BvbnNlOm5ldyBhbn19TWUucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSwhdC51cmwpdGhyb3cgbmV3IEVycm9yKCJQcm92aWRlZCBjb25maWcgdXJsIGlzIG5vdCB2YWxpZCIpO3Q9WmUodGhpcy5kZWZhdWx0cyx0KSx0Lm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIG49dC50cmFuc2l0aW9uYWw7biE9PXZvaWQgMCYmY24uYXNzZXJ0T3B0aW9ucyhuLHtzaWxlbnRKU09OUGFyc2luZzpUZS50cmFuc2l0aW9uYWwoVGUuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6VGUudHJhbnNpdGlvbmFsKFRlLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6VGUudHJhbnNpdGlvbmFsKFRlLmJvb2xlYW4pfSwhMSk7dmFyIGk9W10sbz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oXyl7dHlwZW9mIF8ucnVuV2hlbj09ImZ1bmN0aW9uIiYmXy5ydW5XaGVuKHQpPT09ITF8fChvPW8mJl8uc3luY2hyb25vdXMsaS51bnNoaWZ0KF8uZnVsZmlsbGVkLF8ucmVqZWN0ZWQpKX0pO3ZhciBzPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oXyl7cy5wdXNoKF8uZnVsZmlsbGVkLF8ucmVqZWN0ZWQpfSk7dmFyIGE7aWYoIW8pe3ZhciB1PVt1bix2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh1LGkpLHU9dS5jb25jYXQocyksYT1Qcm9taXNlLnJlc29sdmUodCk7dS5sZW5ndGg7KWE9YS50aGVuKHUuc2hpZnQoKSx1LnNoaWZ0KCkpO3JldHVybiBhfWZvcih2YXIgZj10O2kubGVuZ3RoOyl7dmFyIGM9aS5zaGlmdCgpLGQ9aS5zaGlmdCgpO3RyeXtmPWMoZil9Y2F0Y2goeSl7ZCh5KTticmVha319dHJ5e2E9dW4oZil9Y2F0Y2goeSl7cmV0dXJuIFByb21pc2UucmVqZWN0KHkpfWZvcig7cy5sZW5ndGg7KWE9YS50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBhfSxNZS5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe2lmKCFlLnVybCl0aHJvdyBuZXcgRXJyb3IoIlByb3ZpZGVkIGNvbmZpZyB1cmwgaXMgbm90IHZhbGlkIik7cmV0dXJuIGU9WmUodGhpcy5kZWZhdWx0cyxlKSxKbyhlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxzbi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtNZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFplKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSxzbi5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7TWUucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFplKGl8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOm59KSl9fSk7dmFyIFpvPU1lLGVzPVllO2Z1bmN0aW9uIEFlKHIpe2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7ZT1pfSk7dmFyIHQ9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihuKXtpZighIXQuX2xpc3RlbmVycyl7dmFyIGksbz10Ll9saXN0ZW5lcnMubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl0Ll9saXN0ZW5lcnNbaV0obik7dC5fbGlzdGVuZXJzPW51bGx9fSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24obil7dmFyIGksbz1uZXcgUHJvbWlzZShmdW5jdGlvbihzKXt0LnN1YnNjcmliZShzKSxpPXN9KS50aGVuKG4pO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUoaSl9LG99LHIoZnVuY3Rpb24oaSl7dC5yZWFzb258fCh0LnJlYXNvbj1uZXcgZXMoaSksZSh0LnJlYXNvbikpfSl9QWUucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sQWUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxBZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYoISF0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sQWUuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgQWUoZnVuY3Rpb24oaSl7ZT1pfSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgdHM9QWUscnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmFwcGx5KG51bGwsbil9fSxucz1HLGlzPWZ1bmN0aW9uKGUpe3JldHVybiBucy5pc09iamVjdChlKSYmZS5pc0F4aW9zRXJyb3I9PT0hMH0sZm49Ryxvcz16cixldD1abyxzcz1ybixhcz1KZTtmdW5jdGlvbiBsbihyKXt2YXIgZT1uZXcgZXQociksdD1vcyhldC5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZm4uZXh0ZW5kKHQsZXQucHJvdG90eXBlLGUpLGZuLmV4dGVuZCh0LGUpLHQuY3JlYXRlPWZ1bmN0aW9uKGkpe3JldHVybiBsbihzcyhyLGkpKX0sdH12YXIgSj1sbihhcyk7Si5BeGlvcz1ldCxKLkNhbmNlbD1ZZSxKLkNhbmNlbFRva2VuPXRzLEouaXNDYW5jZWw9ZW4sSi5WRVJTSU9OPW5uLnZlcnNpb24sSi5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxKLnNwcmVhZD1ycyxKLmlzQXhpb3NFcnJvcj1pcyxPdC5leHBvcnRzPUosT3QuZXhwb3J0cy5kZWZhdWx0PUo7dmFyIHVzPU90LmV4cG9ydHM7Y2xhc3MgVHtpc0VtcHR5KCl7cmV0dXJuIXRoaXMuaXNQcmVzZW50KCl9c3RhdGljIG9mKGUpe2lmKGUhPW51bGwpcmV0dXJuIG5ldyBkbihlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIHdhcyBudWxsIG9yIHVuZGVmaW5lZC4iKX1zdGF0aWMgb2ZOb25OdWxsKGUpe3JldHVybiBULm9mKGUpfXN0YXRpYyBvZk51bGxhYmxlKGUpe3JldHVybiBlIT1udWxsP25ldyBkbihlKTpuZXcgbW59c3RhdGljIGVtcHR5KCl7cmV0dXJuIG5ldyBtbn1zdGF0aWMgZnJvbShlKXtzd2l0Y2goZS5raW5kKXtjYXNlInByZXNlbnQiOnJldHVybiBULm9mKGUudmFsdWUpO2Nhc2UiZW1wdHkiOnJldHVybiBULmVtcHR5KCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIHdhcyBub3QgYW4gT3B0aW9uIHR5cGUuIil9fX1jbGFzcyBkbiBleHRlbmRzIFR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnBheWxvYWQ9ZX1pc1ByZXNlbnQoKXtyZXR1cm4hMH1nZXQoKXtyZXR1cm4gdGhpcy5wYXlsb2FkfWlmUHJlc2VudChlKXtlKHRoaXMucGF5bG9hZCl9aWZQcmVzZW50T3JFbHNlKGUsdCl7ZSh0aGlzLnBheWxvYWQpfWZpbHRlcihlKXtyZXR1cm4gZSh0aGlzLnBheWxvYWQpP3RoaXM6VC5lbXB0eSgpfW1hcChlKXtjb25zdCB0PWUodGhpcy5wYXlsb2FkKTtyZXR1cm4gVC5vZk51bGxhYmxlKHQpfWZsYXRNYXAoZSl7cmV0dXJuIGUodGhpcy5wYXlsb2FkKX1vcihlKXtyZXR1cm4gdGhpc31vckVsc2UoZSl7cmV0dXJuIHRoaXMucGF5bG9hZH1vckVsc2VHZXQoZSl7cmV0dXJuIHRoaXMucGF5bG9hZH1vckVsc2VUaHJvdyhlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yTnVsbCgpe3JldHVybiB0aGlzLnBheWxvYWR9b3JVbmRlZmluZWQoKXtyZXR1cm4gdGhpcy5wYXlsb2FkfXRvT3B0aW9uKCl7cmV0dXJue2tpbmQ6InByZXNlbnQiLHZhbHVlOnRoaXMucGF5bG9hZH19bWF0Y2hlcyhlKXtyZXR1cm4gZS5wcmVzZW50KHRoaXMucGF5bG9hZCl9dG9KU09OKGUpe3JldHVybiB0aGlzLnBheWxvYWR9fWNsYXNzIG1uIGV4dGVuZHMgVHtpc1ByZXNlbnQoKXtyZXR1cm4hMX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9Z2V0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIG9wdGlvbmFsIGlzIG5vdCBwcmVzZW50LiIpfWlmUHJlc2VudChlKXt9aWZQcmVzZW50T3JFbHNlKGUsdCl7dCgpfWZpbHRlcihlKXtyZXR1cm4gdGhpc31tYXAoZSl7cmV0dXJuIFQuZW1wdHkoKX1mbGF0TWFwKGUpe3JldHVybiBULmVtcHR5KCl9b3IoZSl7cmV0dXJuIGUoKX1vckVsc2UoZSl7cmV0dXJuIGV9b3JFbHNlR2V0KGUpe3JldHVybiB0aGlzLm9yRWxzZShlKCkpfW9yRWxzZVRocm93KGUpe3Rocm93IGUoKX1vck51bGwoKXtyZXR1cm4gbnVsbH1vclVuZGVmaW5lZCgpe310b09wdGlvbigpe3JldHVybntraW5kOiJlbXB0eSJ9fW1hdGNoZXMoZSl7cmV0dXJuIGUuZW1wdHkoKX10b0pTT04oZSl7cmV0dXJuIG51bGx9fWNvbnN0IGNzPSIyLjAuMCI7ZnVuY3Rpb24gZnMocil7Z2xvYmFsVGhpcy5fdm9uYWdlTWVkaWFQcm9jZXNzb3JNZXRhZGF0YT1yfWZ1bmN0aW9uIGxzKCl7cmV0dXJuIGdsb2JhbFRoaXMuX3ZvbmFnZU1lZGlhUHJvY2Vzc29yTWV0YWRhdGF9Y2xhc3MgSHtjb25zdHJ1Y3Rvcigpe2NvbnN0IGU9bHMoKTt0aGlzLl9yZXBvcnQ9e2FjdGlvbjpULmVtcHR5KCksYXBwbGljYXRpb25JZDpULm9mTnVsbGFibGUoZSE9PXZvaWQgMCYmZSE9bnVsbD9lLmFwcElkOm51bGwpLHRpbWVzdGFtcDpEYXRlLm5vdygpLGZwczpULmVtcHR5KCksZnJhbWVzVHJhbnNmb3JtZWQ6VC5lbXB0eSgpLGd1aWQ6VC5lbXB0eSgpLGhpZ2hlc3RGcmFtZVRyYW5zZm9ybUNwdTpULmVtcHR5KCksbWVzc2FnZTpULmVtcHR5KCksc291cmNlOlQub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2Uuc291cmNlVHlwZTpudWxsKSx0cmFuc2Zvcm1lZEZwczpULmVtcHR5KCksdHJhbnNmb3JtZXJUeXBlOlQuZW1wdHkoKSx2YXJpYXRpb246VC5lbXB0eSgpLHZpZGVvSGVpZ2h0OlQuZW1wdHkoKSx2aWRlb1dpZHRoOlQuZW1wdHkoKSx2ZXJzaW9uOmNzLGVycm9yOlQuZW1wdHkoKSxwcm94eVVybDpULm9mTnVsbGFibGUoZSE9PXZvaWQgMCYmZSE9bnVsbD9lLnByb3h5VXJsOm51bGwpfX1hY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5hY3Rpb249VC5vZk51bGxhYmxlKGUpLHRoaXN9ZnJhbWVzVHJhbnNmb3JtZWQoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5mcmFtZXNUcmFuc2Zvcm1lZD1ULm9mTnVsbGFibGUoZSksdGhpc31mcHMoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5mcHM9VC5vZk51bGxhYmxlKGUpLHRoaXN9Z3VpZChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0Lmd1aWQ9VC5vZk51bGxhYmxlKGUpLHRoaXN9bWVzc2FnZShlKXtyZXR1cm4gdGhpcy5fcmVwb3J0Lm1lc3NhZ2U9VC5vZk51bGxhYmxlKGUpLHRoaXN9dHJhbnNmb3JtZWRGcHMoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC50cmFuc2Zvcm1lZEZwcz1ULm9mTnVsbGFibGUoZSksdGhpc310cmFuc2Zvcm1lclR5cGUoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC50cmFuc2Zvcm1lclR5cGU9VC5vZk51bGxhYmxlKGUpLHRoaXN9dmFyaWF0aW9uKGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmFyaWF0aW9uPVQub2ZOdWxsYWJsZShlKSx0aGlzfXZpZGVvSGVpZ2h0KGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmlkZW9IZWlnaHQ9VC5vZk51bGxhYmxlKGUpLHRoaXN9dmlkZW9XaWR0aChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnZpZGVvV2lkdGg9VC5vZk51bGxhYmxlKGUpLHRoaXN9ZXJyb3IoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5lcnJvcj1ULm9mTnVsbGFibGUoZSksdGhpc31idWlsZCgpe3JldHVybiB0aGlzLl9yZXBvcnR9fWNvbnN0IGRzPXI9PkpTT04uc3RyaW5naWZ5KHIsKGUsdCk9PntpZih0IT09bnVsbClyZXR1cm4gdH0pO2NsYXNzIFZ7c3RhdGljIHJlcG9ydChlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntpZihlLmFwcGxpY2F0aW9uSWQuaXNFbXB0eSgpfHxlLnNvdXJjZS5pc0VtcHR5KCkpe3QoInN1Y2Nlc3MiKTtyZXR1cm59bGV0IGk9dXMuY3JlYXRlKCksbz17dGltZW91dDoxZTQsdGltZW91dEVycm9yTWVzc2FnZToiUmVxdWVzdCB0aW1lb3V0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fSxzPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyI7aWYoZS5wcm94eVVybC5pc0VtcHR5KCkpcz0iaHR0cHM6Ly8iK3M7ZWxzZXtsZXQgYTtlLnByb3h5VXJsLmdldCgpLnNsaWNlKGUucHJveHlVcmwuZ2V0KCkubGVuZ3RoLTEpIT09Ii8iP2E9ZS5wcm94eVVybC5nZXQoKSsiLyI6YT1lLnByb3h5VXJsLmdldCgpLHM9YStzfWkucG9zdChzLGRzKGUpLG8pLnRoZW4oYT0+e2NvbnNvbGUubG9nKGEpLHQoInN1Y2Nlc3MiKX0pLmNhdGNoKGE9Pntjb25zb2xlLmxvZyhhKSxuKGEpfSl9KX19dmFyIHR0LG1zPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBocygpe2lmKCF0dCYmKHR0PXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKXx8dHlwZW9mIG1zQ3J5cHRvPCJ1IiYmdHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIiYmbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pLCF0dCkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiB0dChtcyl9dmFyIHBzPS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtmdW5jdGlvbiB5cyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciJiZwcy50ZXN0KHIpfWZvcih2YXIgTj1bXSxXdD0wO1d0PDI1NjsrK1d0KU4ucHVzaCgoV3QrMjU2KS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtmdW5jdGlvbiBfcyhyKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCx0PShOW3JbZSswXV0rTltyW2UrMV1dK05bcltlKzJdXStOW3JbZSszXV0rIi0iK05bcltlKzRdXStOW3JbZSs1XV0rIi0iK05bcltlKzZdXStOW3JbZSs3XV0rIi0iK05bcltlKzhdXStOW3JbZSs5XV0rIi0iK05bcltlKzEwXV0rTltyW2UrMTFdXStOW3JbZSsxMl1dK05bcltlKzEzXV0rTltyW2UrMTRdXStOW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCF5cyh0KSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCIpO3JldHVybiB0fWZ1bmN0aW9uIGhuKHIsZSx0KXtyPXJ8fHt9O3ZhciBuPXIucmFuZG9tfHwoci5ybmd8fGhzKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IodmFyIGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4gX3Mobil9Y29uc3Qgc2U9bmV3IFdlYWtNYXAscnQ9bmV3IFdlYWtNYXAsQ2U9bmV3IFdlYWtNYXAsanQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLHBuPVByb21pc2UucmVzb2x2ZSgpLG50PVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLGl0PVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IHF0PSExO2Z1bmN0aW9uIHdlKHIpe2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmdHlwZW9mIHIhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gb3Qocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gUmUocixlKXtjb25zdCB0PXJ0LmdldChyKTtyZXR1cm4gdC5oYXMoZSl8fHQuc2V0KGUsbmV3IFNldCksdC5nZXQoZSl9ZnVuY3Rpb24gT2UocixlKXtjb25zdCB0PXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6anQsbj1DZS5nZXQocik7cmV0dXJuIG4uaGFzKHQpfHxuLnNldCh0LG5ldyBTZXQpLG4uZ2V0KHQpfWZ1bmN0aW9uIHhzKHIsZSx0KXtjb25zdCBuPUNlLmdldChyKTtpZihuLmhhcyhlKSlmb3IoY29uc3QgaSBvZiBuLmdldChlKSlpLmVucXVldWUodCk7aWYobi5oYXMoanQpKXtjb25zdCBpPVByb21pc2UuYWxsKFtlLHRdKTtmb3IoY29uc3QgbyBvZiBuLmdldChqdCkpby5lbnF1ZXVlKGkpfX1mdW5jdGlvbiB5bihyLGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0hMSxuPSgpPT57fSxpPVtdO2NvbnN0IG89e2VucXVldWUocyl7aS5wdXNoKHMpLG4oKX0sZmluaXNoKCl7dD0hMCxuKCl9fTtmb3IoY29uc3QgcyBvZiBlKU9lKHIscykuYWRkKG8pO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIGk/aS5sZW5ndGg9PT0wP3Q/KGk9dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2Uocz0+e249c30pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBpLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKHMpe2k9dm9pZCAwO2Zvcihjb25zdCBhIG9mIGUpT2UocixhKS5kZWxldGUobyk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBfbihyKXtpZihyPT09dm9pZCAwKXJldHVybiB4bjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXhuLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgWHQ9cj0+cj09PW50fHxyPT09aXQ7Y2xhc3MgaGV7c3RhdGljIG1peGluKGUsdCl7cmV0dXJuIHQ9X24odCksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgcyBvZiB0KWlmKG4ucHJvdG90eXBlW3NdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtzfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IGhlfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6aX0pO2NvbnN0IG89cz0+ZnVuY3Rpb24oLi4uYSl7cmV0dXJuIHRoaXNbZV1bc10oLi4uYSl9O2Zvcihjb25zdCBzIG9mIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHMse2VudW1lcmFibGU6ITEsdmFsdWU6byhzKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7aWYodHlwZW9mIHByb2Nlc3MhPSJvYmplY3QiKXJldHVybiBxdDtjb25zdHtlbnY6ZX09cHJvY2Vzc3x8e2Vudjp7fX07cmV0dXJuIGUuREVCVUc9PT0iZW1pdHRlcnkifHxlLkRFQlVHPT09IioifHxxdH1zdGF0aWMgc2V0IGlzRGVidWdFbmFibGVkKGUpe3F0PWV9Y29uc3RydWN0b3IoZT17fSl7c2Uuc2V0KHRoaXMsbmV3IFNldCkscnQuc2V0KHRoaXMsbmV3IE1hcCksQ2Uuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHQsbixpLG8pPT57bz1KU09OLnN0cmluZ2lmeShvKSx0eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGhlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7b3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpd2UobiksUmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksWHQobil8fHRoaXMuZW1pdChudCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtvdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl3ZShuKSxSZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLFh0KG4pfHx0aGlzLmVtaXQoaXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpd2UodCk7cmV0dXJuIHluKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3dlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCkseHModGhpcyxlLHQpO2NvbnN0IG49UmUodGhpcyxlKSxpPXNlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVh0KGUpP1tdOlsuLi5pXTthd2FpdCBwbixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXt3ZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49UmUodGhpcyxlKSxpPXNlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBwbjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gb3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxzZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChudCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiB5bih0aGlzKX1vZmZBbnkoZSl7b3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChpdCx7bGlzdGVuZXI6ZX0pLHNlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7UmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49T2UodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7c2UuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgcnQuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBDZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9c2UuZ2V0KHRoaXMpLnNpemUrUmUodGhpcyxuKS5zaXplK09lKHRoaXMsbikuc2l6ZStPZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmd2UobiksdCs9c2UuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgcnQuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBDZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9X24odCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IHhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpudCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6aXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgWXQ9aGU7ZnVuY3Rpb24gZ3Mocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIGJzKHIpe2lmKGdzKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIFF0KHIpe3JldHVybiBicyhyKS5tZXNzYWdlfXZhciBLdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShLdHx8e30pO2NvbnN0IHZzPTUwMCxFcz0uODtjbGFzcyBUcyBleHRlbmRzIFl0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmluZGV4Xz10LHRoaXMudXVpZF89aG4oKSx0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXz0wLHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5mcmFtZXNGcm9tU291cmNlXz0wLHRoaXMuZnBzXz0wLHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz0wLHRoaXMudmlkZW9IZWlnaHRfPTAsdGhpcy52aWRlb1dpZHRoXz0wLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMudHJhbnNmb3JtZXJUeXBlXz0iQ3VzdG9tIiwiZ2V0VHJhbnNmb3JtZXJUeXBlImluIGUmJih0aGlzLnRyYW5zZm9ybWVyVHlwZV89ZS5nZXRUcmFuc2Zvcm1lclR5cGUoKSk7Y29uc3Qgbj1uZXcgSCgpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJDcmVhdGUiKS5idWlsZCgpO1YucmVwb3J0KG4pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWV9YXN5bmMgc3RhcnQoZSl7aWYodGhpcy5jb250cm9sbGVyXz1lLHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQ9PSJmdW5jdGlvbiIpdHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0KGUpfWNhdGNoKHQpe2NvbnN0IG49bmV3IEgoKS5hY3Rpb24oIk1lZGlhVHJhbnNmb3JtZXIiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLnRyYW5zZm9ybWVyX3N0YXJ0KS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkVycm9yIikuZXJyb3IoUXQodCkpLmJ1aWxkKCk7Vi5yZXBvcnQobik7Y29uc3QgaT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6dCxmdW5jdGlvbjoic3RhcnQifTt0aGlzLmVtaXQoImVycm9yIixpKX19YXN5bmMgdHJhbnNmb3JtKGUsdCl7dmFyIG4saSxvLHM7aWYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPT09MCYmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz1EYXRlLm5vdygpKSxlIGluc3RhbmNlb2YgVmlkZW9GcmFtZSYmKHRoaXMudmlkZW9IZWlnaHRfPShuPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheUhlaWdodCkhPW51bGw/bjowLHRoaXMudmlkZW9XaWR0aF89KGk9ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5V2lkdGgpIT1udWxsP2k6MCksKyt0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNlIHRyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksKyt0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXyx0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXz09PXZzJiZ0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnQoKX1jYXRjaChhKXtjb25zdCB1PW5ldyBIKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRXJyb3IiKS5lcnJvcihRdChhKSkuYnVpbGQoKTtWLnJlcG9ydCh1KTtjb25zdCBmPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIixmKX19YXN5bmMgZmx1c2goZSl7aWYodGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaD09ImZ1bmN0aW9uIiYmIXRoaXMuaXNGbGFzaGVkXyl7dGhpcy5pc0ZsYXNoZWRfPSEwO3RyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaChlKX1jYXRjaChuKXtjb25zdCBpPW5ldyBIKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy50cmFuc2Zvcm1lcl9mbHVzaCkudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJFcnJvciIpLmVycm9yKFF0KG4pKS5idWlsZCgpO1YucmVwb3J0KGkpO2NvbnN0IG89e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOm4sZnVuY3Rpb246ImZsdXNoIn07dGhpcy5lbWl0KCJlcnJvciIsbyl9fXRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydCgpO2NvbnN0IHQ9bmV3IEgoKS5hY3Rpb24oIk1lZGlhVHJhbnNmb3JtZXIiKS5ndWlkKHRoaXMudXVpZF8pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRGVsZXRlIikuYnVpbGQoKTtWLnJlcG9ydCh0KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCl7bGV0IGU9KERhdGUubm93KCktdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfKS8xZTMsdD10aGlzLmZyYW1lc0Zyb21Tb3VyY2VfL2Usbj10aGlzLmZyYW1lc1RyYW5zZm9ybWVkXy9lO2lmKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy50cmFja0V4cGVjdGVkUmF0ZV8qRXM+dCl7Y29uc3Qgbz17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dH19O3RoaXMuZW1pdCgid2FybiIsbyl9Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmZwcyh0KS50cmFuc2Zvcm1lZEZwcyhuKS5mcmFtZXNUcmFuc2Zvcm1lZCh0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXykuZ3VpZCh0aGlzLnV1aWRfKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52aWRlb0hlaWdodCh0aGlzLnZpZGVvSGVpZ2h0XykudmlkZW9XaWR0aCh0aGlzLnZpZGVvV2lkdGhfKS52YXJpYXRpb24oIlFvUyIpLmJ1aWxkKCk7Vi5yZXBvcnQoaSksdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy5mcmFtZXNGcm9tU291cmNlXz0wLHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfPTB9fWNsYXNzIEFzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBUcyhlW3RdLHQpO24ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSxuLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IGkgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKGkpKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBpPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2gobz0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsbyl9KSxhd2FpdCB0LmFib3J0KGkpLGF3YWl0IG4uY2FuY2VsKGkpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyB3cyBleHRlbmRzIFl0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnV1aWRfPWhuKCksdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Y29uc3QgZT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLnZhcmlhdGlvbigiQ3JlYXRlIikuYnVpbGQoKTtWLnJlcG9ydChlKX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUsdCl7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89dCx0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoKGUsdCk9PntpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUpLnZhcmlhdGlvbigiRXJyb3IiKS5idWlsZCgpO1YucmVwb3J0KGkpLHQoIltNZWRpYVByb2Nlc3Nvcl0gTmVlZCB0byBzZXQgdHJhbnNmb3JtZXJzLiIpO3JldHVybn1pZighdGhpcy5yZWFkYWJsZV8pe2NvbnN0IGk9bmV3IEgoKS5hY3Rpb24oIk1lZGlhUHJvY2Vzc29yIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy5yZWFkYWJsZV9udWxsKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtWLnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIFJlYWRhYmxlIGlzIG51bGwuIik7cmV0dXJufWlmKCF0aGlzLndyaXRhYmxlXyl7Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLndyaXRhYmxlX251bGwpLnZhcmlhdGlvbigiRXJyb3IiKS5idWlsZCgpO1YucmVwb3J0KGkpLHQoIltNZWRpYVByb2Nlc3Nvcl0gV3JpdGFibGUgaXMgbnVsbC4iKTtyZXR1cm59bGV0IG49ITE7dGhpcy5waXBlbGluZV8mJihuPSEwLHRoaXMucGlwZWxpbmVfLmNsZWFyTGlzdGVuZXJzKCksdGhpcy5waXBlbGluZV8uZGVzdHJveSgpKSx0aGlzLnBpcGVsaW5lXz1uZXcgQXModGhpcy50cmFuc2Zvcm1lcnNfKSx0aGlzLnBpcGVsaW5lXy5vbigid2FybiIsaT0+e3RoaXMuZW1pdCgid2FybiIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJwaXBlbGluZUluZm8iLGk9PntuJiYoaT09PSJwaXBlbGluZV9zdGFydGVkIj9pPUt0LnBpcGVsaW5lX3Jlc3RhcnRlZDppPT09InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciImJihpPUt0LnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yKSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLGkpfSksdGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyksdGhpcy5waXBlbGluZV8uc3RhcnQodGhpcy5yZWFkYWJsZV8sdGhpcy53cml0YWJsZV8pLnRoZW4oKCk9PntlKCl9KS5jYXRjaChpPT57dChpKX0pfSl9c2V0VHJhbnNmb3JtZXJzKGUpe2NvbnN0IHQ9bmV3IEgoKS5hY3Rpb24oIk1lZGlhUHJvY2Vzc29yIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLnVwZGF0ZXMudHJhbnNmb3JtZXJfbmV3KS52YXJpYXRpb24oIlVwZGF0ZSIpLmJ1aWxkKCk7cmV0dXJuIFYucmVwb3J0KHQpLHRoaXMudHJhbnNmb3JtZXJzXz1lLHRoaXMucmVhZGFibGVfJiZ0aGlzLndyaXRhYmxlXz90aGlzLnRyYW5zZm9ybUludGVybmFsKCk6UHJvbWlzZS5yZXNvbHZlKCl9ZGVzdHJveSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKTtjb25zdCB0PW5ldyBIKCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykudmFyaWF0aW9uKCJEZWxldGUiKS5idWlsZCgpO1YucmVwb3J0KHQpLGUoKX0pfX12YXIgc3Q9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShzdHx8e30pO2FzeW5jIGZ1bmN0aW9uIGduKHIpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0scil9KX1jbGFzcyBSc3tjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsImV4dGVuc2lvbiIpO3AodGhpcywicXVlcmllcyIsW10pO3AodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IGduKDIwMCl9fX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMi4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgSnQ9NTEyMCxOZT01MTIxLFp0PTUxMjIsZXI9NTEyMyx0cj01MTI0LHJyPTUxMjUsbnI9NTEyNixTcz0zMjgxOSxJcz0zMjgyMCxGcz0zMzYzNSxQcz01MTMxLERzPTMzNjQwLE1zPTM1ODk5LENzPTM1OTAyLE9zPTM2MjY5LE5zPTM0MDQyLGJuPXt9O3tjb25zdCByPWJuO3JbSnRdPUludDhBcnJheSxyW05lXT1VaW50OEFycmF5LHJbWnRdPUludDE2QXJyYXkscltlcl09VWludDE2QXJyYXksclt0cl09SW50MzJBcnJheSxyW3JyXT1VaW50MzJBcnJheSxyW25yXT1GbG9hdDMyQXJyYXkscltTc109VWludDE2QXJyYXkscltJc109VWludDE2QXJyYXkscltGc109VWludDE2QXJyYXkscltQc109VWludDE2QXJyYXkscltEc109VWludDMyQXJyYXkscltNc109VWludDMyQXJyYXkscltDc109VWludDMyQXJyYXkscltPc109VWludDMyQXJyYXkscltOc109VWludDMyQXJyYXl9ZnVuY3Rpb24gaXIocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gSnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gTmU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gZXI7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gcnI7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gdm4ocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gSnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gTmU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gZXI7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gcnI7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gRW4ocil7Y29uc3QgZT1ibltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGF0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gVG4oLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBBbj1uZXcgTWFwO2Z1bmN0aW9uIHV0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Bbi5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsQW4uc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBVcyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZ1dChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIEJzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJnV0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gb3IocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJnV0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIGtzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZ1dChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCB3bj0zNTA0NCxwZT0zNDk2MixMcz0zNDk2Mywkcz0zNDY2MCxHcz01MTIwLHpzPTUxMjEsSHM9NTEyMixWcz01MTIzLFdzPTUxMjQsanM9NTEyNSxSbj01MTI2LFNuPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIHFzKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHx3bil9ZnVuY3Rpb24gSW4ocixlLHQsbil7aWYoVXMocixlKSlyZXR1cm4gZTt0PXR8fHBlO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gcXMocix0LGksZSxuKSxpfWZ1bmN0aW9uIEZuKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIFhzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBZcyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgUXM9L2Nvb3JkfHRleHR1cmUvaSxLcz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gSnMocixlKXtsZXQgdDtpZihRcy50ZXN0KHIpP3Q9MjpLcy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBacyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxKcyhlLHR8fFlzKHIpLmxlbmd0aCl9ZnVuY3Rpb24gUG4ocixlKXtpZihhdChyKSlyZXR1cm4gcjtpZihhdChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9zcihyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KEZuKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gZWEocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/dm4ocik6Um59ZnVuY3Rpb24gc3Iocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9FbihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gdGEocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmVhKGUudHlwZSksYXJyYXlUeXBlOnNyKGUudHlwZSl9fWZ1bmN0aW9uIHJhKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1zcihlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKHBlLG8pLHIuYnVmZmVyRGF0YShwZSxpLGUuZHJhd1R5cGV8fHduKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTp2bihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gbmEocixlLHQpe2NvbnN0IG49UG4oZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOkluKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTppcihuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gaWEocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFGbihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxTbi5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWF0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9dGE6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPXJhOnM9bmE7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpjfT1zKHIsaSxuKSxkPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOlhzKGMpLHk9WnMoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6eSx0eXBlOnUsbm9ybWFsaXplOmQsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIocGUsbnVsbCksdH1mdW5jdGlvbiBvYShyLGUpe3JldHVybiBlPT09R3N8fGU9PT16cz8xOmU9PT1Ic3x8ZT09PVZzPzI6ZT09PVdzfHxlPT09anN8fGU9PT1Sbj80OjB9Y29uc3QgYXI9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBzYShyLGUpe2xldCB0LG47Zm9yKG49MDtuPGFyLmxlbmd0aCYmKHQ9YXJbbl0sISh0IGluIGV8fCh0PVNuLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1hci5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihwZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihwZSwkcyk7ci5iaW5kQnVmZmVyKHBlLG51bGwpO2NvbnN0IHM9b2EocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIGFhKHIsZSx0KXtjb25zdCBuPWlhKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPVBuKG8sImluZGljZXMiKTtpLmluZGljZXM9SW4ocixzLExzKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9aXIocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1zYShyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIFVlKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgRG49ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxhZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LEJlPWF0LE1uPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxDbj02NDA2LFo9NjQwNyxGPTY0MDgsT249NjQwOSxObj02NDEwLGtlPTY0MDIsVW49MzQwNDEsY3Q9MzMwNzEsdWE9OTcyOCxjYT05NzI5LHVlPTM1NTMsY2U9MzQwNjcseWU9MzI4NzksX2U9MzU4NjYsdXI9MzQwNjksZmE9MzQwNzAsbGE9MzQwNzEsZGE9MzQwNzIsbWE9MzQwNzMsaGE9MzQwNzQsY3I9MTAyNDEsZnI9MTAyNDAsZnQ9MTAyNDIsbHQ9MTAyNDMsQm49MzI4ODIscGE9MzMwODIseWE9MzMwODMsX2E9MzMwODQseGE9MzMwODUsbHI9MzMxNyxrbj0zMzE0LExuPTMyODc4LCRuPTMzMTYsR249MzMxNSx6bj0zMjg3NyxnYT0zNzQ0MyxiYT0zNzQ0MSx2YT0zNzQ0MCxFYT0zMzMyMSxUYT0zNjc1NixBYT0zMzMyNSx3YT0zMzMyNixSYT0zMzMzMCxTYT0zMzMyOSxJYT0zMzMzOCxGYT0zMzMzNyxQYT0zMzM0MCxEYT0zMzMzOSxNYT0zMzMyMyxDYT0zNjc1NyxPYT0zMzMyNyxOYT0zMzMyOCxVYT0zMzMzNixCYT0zMzMzNSxrYT0zMzMzMixMYT0zMzMzMSwkYT0zMzMzNCxHYT0zMzMzMyx6YT0zMjg0OSxIYT0zNTkwNSxWYT0zNjE5NCxXYT0zNjc1OCxqYT0zNTg5OCxxYT0zNTkwMSxYYT0zNDg0MyxZYT0zNDgzNyxRYT0zNjIyMSxLYT0zNjIzOSxKYT0zNjIxNSxaYT0zNjIzMyxldT0zNjIwOSx0dT0zNjIyNyxydT0zMjg1NixudT0zNTkwNyxpdT0zNjc1OSxvdT0zMjg1NSxzdT0zMjg1NCxhdT0zMjg1Nyx1dT0zNDg0MixjdT0zNDgzNixmdT0zNjIyMCxsdT0zNjIzOCxkdT0zNjk3NSxtdT0zNjIxNCxodT0zNjIzMixwdT0zNjIyNix5dT0zNjIwOCxfdT0zMzE4OSx4dT0zMzE5MCxndT0zNjAxMixidT0zNjAxMyx2dT0zNTA1NixmZT01MTIwLEk9NTEyMSxkdD01MTIyLFNlPTUxMjMsbXQ9NTEyNCx4ZT01MTI1LEI9NTEyNixIbj0zMjgxOSxWbj0zMjgyMCxXbj0zMzYzNSxqPTUxMzEsTGU9MzYxOTMsZHI9MzM2NDAsRXU9MzU4OTksVHU9MzU5MDIsQXU9MzYyNjksd3U9MzQwNDIsaHQ9MzMzMTksSWU9MzMzMjAscHQ9NjQwMyxGZT0zNjI0NCxQZT0zNjI0OCxnZT0zNjI0OTtsZXQgbXI7ZnVuY3Rpb24geXQocil7aWYoIW1yKXtjb25zdCBlPXt9O2VbQ25dPXt0ZXh0dXJlRm9ybWF0OkNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W0ksaixMZSxCXX0sZVtPbl09e3RleHR1cmVGb3JtYXQ6T24sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbSSxqLExlLEJdfSxlW05uXT17dGV4dHVyZUZvcm1hdDpObixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltJLGosTGUsQl19LGVbWl09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltJLGosTGUsQixXbl19LGVbRl09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W0ksaixMZSxCLEhuLFZuXX0sZVtrZV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt4ZSxTZV19LGVbRWFdPXt0ZXh0dXJlRm9ybWF0OnB0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW1RhXT17dGV4dHVyZUZvcm1hdDpwdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltmZV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0OnB0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbQixqXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6cHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQl19LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpGZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltmZV19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W1NlXX0sZVtMYV09e3RleHR1cmVGb3JtYXQ6RmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbZHRdfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpGZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbR2FdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W210XX0sZVtNYV09e3RleHR1cmVGb3JtYXQ6aHQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbQ2FdPXt0ZXh0dXJlRm9ybWF0Omh0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2ZlXX0sZVtPYV09e3RleHR1cmVGb3JtYXQ6aHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltCLGpdfSxlW05hXT17dGV4dHVyZUZvcm1hdDpodCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltCXX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbQmFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2ZlXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU2VdfSxlW0ZhXT17dGV4dHVyZUZvcm1hdDpJZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltkdF19LGVbUGFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3hlXX0sZVtEYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbbXRdfSxlW3phXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0hhXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW1ZhXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbSSxXbl19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OlosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbZmVdfSxlW2phXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQixqLEV1XX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0IsaixUdV19LGVbWGFdPXt0ZXh0dXJlRm9ybWF0OlosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQixqXX0sZVtZYV09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQl19LGVbUWFdPXt0ZXh0dXJlRm9ybWF0OlBlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0thXT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltmZV19LGVbSmFdPXt0ZXh0dXJlRm9ybWF0OlBlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W1NlXX0sZVtaYV09e3RleHR1cmVGb3JtYXQ6UGUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbZHRdfSxlW2V1XT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeGVdfSxlW3R1XT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbbXRdfSxlW3J1XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW251XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW2l1XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2ZlXX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbSSxWbixkcl19LGVbc3VdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltJLEhuXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltkcl19LGVbdXVdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbQixqXX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbQl19LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW2x1XT17dGV4dHVyZUZvcm1hdDpnZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltmZV19LGVbZHVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2RyXX0sZVttdV09e3RleHR1cmVGb3JtYXQ6Z2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbU2VdfSxlW2h1XT17dGV4dHVyZUZvcm1hdDpnZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltkdF19LGVbcHVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlttdF19LGVbeXVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt4ZV19LGVbX3VdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbU2UseGVdfSxlW3h1XT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbZ3VdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0JdfSxlW3Z1XT17dGV4dHVyZUZvcm1hdDpVbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt3dV19LGVbYnVdPXt0ZXh0dXJlRm9ybWF0OlVuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0F1XX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLG1yPWV9cmV0dXJuIG1yW3JdfWZ1bmN0aW9uIFJ1KHIsZSl7Y29uc3QgdD15dChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiAkZShyKXtjb25zdCBlPXl0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gam4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gU3UocixlLHQsbil7aWYoIVVlKHIpKXJldHVybiBqbihlKSYmam4odCk7Y29uc3QgaT15dChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIEl1KHIpe2NvbnN0IGU9eXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIEZ1KHIsZSx0KXtyZXR1cm4gQmUoZSk/aXIoZSk6dHx8SX1mdW5jdGlvbiBfdChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09Y2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBEZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoZ2EsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGJhLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh2YSxlLmZsaXBZKX1mdW5jdGlvbiBxbihyKXtyLnBpeGVsU3RvcmVpKGxyLDQpLFVlKHIpJiYoci5waXhlbFN0b3JlaShrbiwwKSxyLnBpeGVsU3RvcmVpKExuLDApLHIucGl4ZWxTdG9yZWkoJG4sMCksci5waXhlbFN0b3JlaShHbiwwKSxyLnBpeGVsU3RvcmVpKHpuLDApKX1mdW5jdGlvbiBQdShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsY3Isbi5taW5NYWcpLHQuY2FsbChyLGUsZnIsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxjcixuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsZnIsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsZnQsbi53cmFwKSx0LmNhbGwocixlLGx0LG4ud3JhcCksKGU9PT15ZXx8a3MocixlKSkmJnQuY2FsbChyLGUsQm4sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxCbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLGZ0LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsbHQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUscGEsbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLHlhLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSxfYSxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSx4YSxuLm1heExldmVsKX1mdW5jdGlvbiBYbihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8dWU7ci5iaW5kVGV4dHVyZShuLGUpLFB1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24gRHUocil7cmV0dXJuIHI9cnx8YWUudGV4dHVyZUNvbG9yLEJlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gaHIocixlLHQsbixpLG8pe3Q9dHx8YWUudGV4dHVyZU9wdGlvbnMsbz1vfHxGO2NvbnN0IHM9dC50YXJnZXR8fHVlO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxTdShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1JdShvKT9jYTp1YTtyLnRleFBhcmFtZXRlcmkocyxjcixhKSxyLnRleFBhcmFtZXRlcmkocyxmcixhKSxyLnRleFBhcmFtZXRlcmkocyxmdCxjdCksci50ZXhQYXJhbWV0ZXJpKHMsbHQsY3QpfX1mdW5jdGlvbiBHZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBwcihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W3VyLGZhLGxhLGRhLG1hLGhhXX1mdW5jdGlvbiB5cihyLGUpe2NvbnN0IG49cHIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gWW4ocixlLHQsbil7bj1ufHxhZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHx1ZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEYsZj0kZSh1KSxjPW4uZm9ybWF0fHxmLmZvcm1hdCxkPW4udHlwZXx8Zi50eXBlO2lmKERlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1jZSl7Y29uc3QgeT10LndpZHRoLF89dC5oZWlnaHQ7bGV0IG0seDtpZih5LzY9PT1fKW09Xyx4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihfLzY9PT15KW09eSx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZih5LzM9PT1fLzIpbT15LzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoeS8yPT09Xy8zKW09eS8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCB2PU1uKCk7dj8odi5jYW52YXMud2lkdGg9bSx2LmNhbnZhcy5oZWlnaHQ9bSxzPW0sYT1tLHlyKHIsbikuZm9yRWFjaChmdW5jdGlvbihiKXtjb25zdCBBPXhbYi5uZHgqMiswXSptLFA9eFtiLm5keCoyKzFdKm07di5kcmF3SW1hZ2UodCxBLFAsbSxtLDAsMCxtLG0pLHIudGV4SW1hZ2UyRChiLmZhY2Usbyx1LGMsZCx2LmNhbnZhcyl9KSx2LmNhbnZhcy53aWR0aD0xLHYuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1tLGE9bSx5cihyLG4pLmZvckVhY2goZnVuY3Rpb24oYil7Y29uc3QgQT14W2IubmR4KjIrMF0qbSxQPXhbYi5uZHgqMisxXSptO3IudGV4SW1hZ2UyRChiLmZhY2Usbyx1LG0sbSwwLGMsZCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEEsUCxtLG0se3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oQyl7RGUocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKGIuZmFjZSxvLHUsYyxkLEMpLEdlKG4pJiZocihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT15ZXx8aT09PV9lKXtjb25zdCB5PU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLF89TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksbT1fL3k7aWYobSUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1fPzE6MCx2PXQuaGVpZ2h0PT09Xz8xOjA7ci5waXhlbFN0b3JlaShsciwxKSxyLnBpeGVsU3RvcmVpKGtuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoTG4sMCksci5waXhlbFN0b3JlaSh6biwwKSxyLnRleEltYWdlM0QoaSxvLHUseSx5LHksMCxjLGQsbnVsbCk7Zm9yKGxldCBiPTA7YjxtOysrYil7Y29uc3QgQT1iKnkqeCxQPWIqeSp2O3IucGl4ZWxTdG9yZWkoJG4sQSksci5waXhlbFN0b3JlaShHbixQKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCxiLHkseSwxLGMsZCx0KX1xbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxjLGQsdCk7R2UobikmJmhyKHIsZSxuLHMsYSx1KSxYbihyLGUsbil9ZnVuY3Rpb24gemUoKXt9ZnVuY3Rpb24gTXUocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIEN1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFNdShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIE91KHIsZSx0KXt0PXR8fHplO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOmFlLmNyb3NzT3JpZ2luLGU9Q3UocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7VG4odSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gUW4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBfcihyLGUsdCl7cmV0dXJuIFFuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6T3UocixlLHQpfWZ1bmN0aW9uIHhyKHIsZSx0KXt0PXR8fGFlLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fHVlO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9RHUodC5jb2xvcik7aWYobj09PWNlKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKHVyK28sMCxGLDEsMSwwLEYsSSxpKTtlbHNlIG49PT15ZXx8bj09PV9lP3IudGV4SW1hZ2UzRChuLDAsRiwxLDEsMSwwLEYsSSxpKTpyLnRleEltYWdlMkQobiwwLEYsMSwxLDAsRixJLGkpfWZ1bmN0aW9uIE51KHIsZSx0LG4pe3JldHVybiBuPW58fHplLHQ9dHx8YWUudGV4dHVyZU9wdGlvbnMseHIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxfcih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooWW4ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gVXUocixlLHQsbil7bj1ufHx6ZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8RixhPSRlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxJLGM9dC50YXJnZXR8fHVlO2lmKGMhPT1jZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjt4cihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBkPTY7Y29uc3QgeT1bXSxfPXByKHIsdCk7bGV0IG07ZnVuY3Rpb24geCh2KXtyZXR1cm4gZnVuY3Rpb24oYixBKXstLWQsYj95LnB1c2goYik6QS53aWR0aCE9PUEuaGVpZ2h0P3kucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrQS5zcmMpOihEZShyLHQpLHIuYmluZFRleHR1cmUoYyxlKSxkPT09NT9wcigpLmZvckVhY2goZnVuY3Rpb24oUCl7ci50ZXhJbWFnZTJEKFAsbyxzLHUsZixBKX0pOnIudGV4SW1hZ2UyRCh2LG8scyx1LGYsQSksR2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoYykpLGQ9PT0wJiZuKHkubGVuZ3RoP3k6dm9pZCAwLGUsbSl9fW09aS5tYXAoZnVuY3Rpb24odixiKXtyZXR1cm4gX3Iodix0LmNyb3NzT3JpZ2luLHgoX1tiXSkpfSl9ZnVuY3Rpb24gQnUocixlLHQsbil7bj1ufHx6ZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz0kZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8SSxmPXQudGFyZ2V0fHxfZTtpZihmIT09eWUmJmYhPT1fZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO3hyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGM9aS5sZW5ndGg7Y29uc3QgZD1bXTtsZXQgeTtjb25zdCBfPXQubGV2ZWx8fDA7bGV0IG09dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IHY9aS5sZW5ndGg7bGV0IGI9ITA7ZnVuY3Rpb24gQShQKXtyZXR1cm4gZnVuY3Rpb24oQyxXKXtpZigtLWMsQylkLnB1c2goQyk7ZWxzZXtpZihEZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSxiKXtiPSExLG09dC53aWR0aHx8Vy53aWR0aCx4PXQuaGVpZ2h0fHxXLmhlaWdodCxyLnRleEltYWdlM0QoZixfLG8sbSx4LHYsMCxhLHUsbnVsbCk7Zm9yKGxldCBpZT0wO2llPHY7KytpZSlyLnRleFN1YkltYWdlM0QoZixfLDAsMCxpZSxtLHgsMSxhLHUsVyl9ZWxzZXtsZXQgaWU9VyxYOyhXLndpZHRoIT09bXx8Vy5oZWlnaHQhPT14KSYmKFg9TW4oKSxpZT1YLmNhbnZhcyxYLmNhbnZhcy53aWR0aD1tLFguY2FudmFzLmhlaWdodD14LFguZHJhd0ltYWdlKFcsMCwwLG0seCkpLHIudGV4U3ViSW1hZ2UzRChmLF8sMCwwLFAsbSx4LDEsYSx1LGllKSxYJiZpZT09PVguY2FudmFzJiYoWC5jYW52YXMud2lkdGg9MCxYLmNhbnZhcy5oZWlnaHQ9MCl9R2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZil9Yz09PTAmJm4oZC5sZW5ndGg/ZDp2b2lkIDAsZSx5KX19eT1pLm1hcChmdW5jdGlvbihQLEMpe3JldHVybiBfcihQLHQuY3Jvc3NPcmlnaW4sQShDKSl9KX1mdW5jdGlvbiBrdShyLGUsdCxuKXtuPW58fGFlLnRleHR1cmVPcHRpb25zO2NvbnN0IGk9bi50YXJnZXR8fHVlO3IuYmluZFRleHR1cmUoaSxlKTtsZXQgbz1uLndpZHRoLHM9bi5oZWlnaHQsYT1uLmRlcHRoO2NvbnN0IHU9bi5sZXZlbHx8MCxmPW4uaW50ZXJuYWxGb3JtYXR8fG4uZm9ybWF0fHxGLGM9JGUoZiksZD1uLmZvcm1hdHx8Yy5mb3JtYXQseT1uLnR5cGV8fEZ1KHIsdCxjLnR5cGUpO2lmKEJlKHQpKXQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSYmKHQ9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpKTtlbHNle2NvbnN0IHY9RW4oeSk7dD1uZXcgdih0KX1jb25zdCBfPVJ1KGYseSksbT10LmJ5dGVMZW5ndGgvXztpZihtJTEpdGhyb3cibGVuZ3RoIHdyb25nIHNpemUgZm9yIGZvcm1hdDogIitEbihyLGQpO2xldCB4O2lmKGk9PT15ZXx8aT09PV9lKWlmKCFvJiYhcyYmIWEpe2NvbnN0IHY9TWF0aC5jYnJ0KG0pO2lmKHYlMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgY3ViZSBzaXplIG9mIGFycmF5IG9mIG51bUVsZW1lbnRzOiAiK207bz12LHM9dixhPXZ9ZWxzZSBvJiYoIXN8fCFhKT8oeD1fdChyLGkscyxhLG0vbykscz14LndpZHRoLGE9eC5oZWlnaHQpOnMmJighb3x8IWEpPyh4PV90KHIsaSxvLGEsbS9zKSxvPXgud2lkdGgsYT14LmhlaWdodCk6KHg9X3QocixpLG8scyxtL2EpLG89eC53aWR0aCxzPXguaGVpZ2h0KTtlbHNlIHg9X3QocixpLG8scyxtKSxvPXgud2lkdGgscz14LmhlaWdodDtpZihxbihyKSxyLnBpeGVsU3RvcmVpKGxyLG4udW5wYWNrQWxpZ25tZW50fHwxKSxEZShyLG4pLGk9PT1jZSl7Y29uc3Qgdj1fL3QuQllURVNfUEVSX0VMRU1FTlQsYj1tLzYqdjt5cihyLG4pLmZvckVhY2goQT0+e2NvbnN0IFA9YipBLm5keCxDPXQuc3ViYXJyYXkoUCxQK2IpO3IudGV4SW1hZ2UyRChBLmZhY2UsdSxmLG8scywwLGQseSxDKX0pfWVsc2UgaT09PXllfHxpPT09X2U/ci50ZXhJbWFnZTNEKGksdSxmLG8scyxhLDAsZCx5LHQpOnIudGV4SW1hZ2UyRChpLHUsZixvLHMsMCxkLHksdCk7cmV0dXJue3dpZHRoOm8saGVpZ2h0OnMsZGVwdGg6YSx0eXBlOnl9fWZ1bmN0aW9uIEx1KHIsZSx0KXtjb25zdCBuPXQudGFyZ2V0fHx1ZTtyLmJpbmRUZXh0dXJlKG4sZSk7Y29uc3QgaT10LmxldmVsfHwwLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz0kZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8cy50eXBlO2lmKERlKHIsdCksbj09PWNlKWZvcihsZXQgZj0wO2Y8NjsrK2Ypci50ZXhJbWFnZTJEKHVyK2YsaSxvLHQud2lkdGgsdC5oZWlnaHQsMCxhLHUsbnVsbCk7ZWxzZSBuPT09eWV8fG49PT1fZT9yLnRleEltYWdlM0QobixpLG8sdC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLDAsYSx1LG51bGwpOnIudGV4SW1hZ2UyRChuLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpfWZ1bmN0aW9uIEtuKHIsZSx0KXt0PXR8fHplLGU9ZXx8YWUudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj1yLmNyZWF0ZVRleHR1cmUoKSxpPWUudGFyZ2V0fHx1ZTtsZXQgbz1lLndpZHRofHwxLHM9ZS5oZWlnaHR8fDE7Y29uc3QgYT1lLmludGVybmFsRm9ybWF0fHxGO3IuYmluZFRleHR1cmUoaSxuKSxpPT09Y2UmJihyLnRleFBhcmFtZXRlcmkoaSxmdCxjdCksci50ZXhQYXJhbWV0ZXJpKGksbHQsY3QpKTtsZXQgdT1lLnNyYztpZih1KWlmKHR5cGVvZiB1PT0iZnVuY3Rpb24iJiYodT11KHIsZSkpLHR5cGVvZiB1PT0ic3RyaW5nIilOdShyLG4sZSx0KTtlbHNlIGlmKEJlKHUpfHxBcnJheS5pc0FycmF5KHUpJiYodHlwZW9mIHVbMF09PSJudW1iZXIifHxBcnJheS5pc0FycmF5KHVbMF0pfHxCZSh1WzBdKSkpe2NvbnN0IGY9a3UocixuLHUsZSk7bz1mLndpZHRoLHM9Zi5oZWlnaHR9ZWxzZSBBcnJheS5pc0FycmF5KHUpJiYodHlwZW9mIHVbMF09PSJzdHJpbmcifHxRbih1WzBdKSk/aT09PWNlP1V1KHIsbixlLHQpOkJ1KHIsbixlLHQpOihZbihyLG4sdSxlKSxvPXUud2lkdGgscz11LmhlaWdodCk7ZWxzZSBMdShyLG4sZSk7cmV0dXJuIEdlKGUpJiZocihyLG4sZSxvLHMsYSksWG4ocixuLGUpLG59Y29uc3QgZ3I9VG47ZnVuY3Rpb24gSm4ocil7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIpOm51bGx9Y29uc3QgeHQ9MzM5ODQsZ3Q9MzQ5NjIsJHU9MzQ5NjMsR3U9MzU3MTMsenU9MzU3MTQsSHU9MzU2MzIsVnU9MzU2MzMsV3U9MzU5ODEsWm49MzU3MTgsanU9MzU3MjEscXU9MzU5NzEsWHU9MzUzODIsWXU9MzUzOTYsUXU9MzUzOTgsS3U9MzUzOTIsSnU9MzUzOTUsYnQ9NTEyNixlaT0zNTY2NCx0aT0zNTY2NSxyaT0zNTY2Nixicj01MTI0LG5pPTM1NjY3LGlpPTM1NjY4LG9pPTM1NjY5LHNpPTM1NjcwLGFpPTM1NjcxLHVpPTM1NjcyLGNpPTM1NjczLGZpPTM1Njc0LGxpPTM1Njc1LGRpPTM1Njc2LFp1PTM1Njc4LGVjPTM1NjgwLHRjPTM1Njc5LHJjPTM1NjgyLG5jPTM1Njg1LGljPTM1Njg2LG9jPTM1Njg3LHNjPTM1Njg4LGFjPTM1Njg5LHVjPTM1NjkwLGNjPTM2Mjg5LGZjPTM2MjkyLGxjPTM2MjkzLHZyPTUxMjUsbWk9MzYyOTQsaGk9MzYyOTUscGk9MzYyOTYsZGM9MzYyOTgsbWM9MzYyOTksaGM9MzYzMDAscGM9MzYzMDMseWM9MzYzMDYsX2M9MzYzMDcseGM9MzYzMDgsZ2M9MzYzMTEsdnQ9MzU1MyxFdD0zNDA2NyxFcj0zMjg3OSxUdD0zNTg2NixFPXt9O2Z1bmN0aW9uIHlpKHIsZSl7cmV0dXJuIEVbZV0uYmluZFBvaW50fWZ1bmN0aW9uIGJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFmKGUsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFmdihlLHQpfX1mdW5jdGlvbiBFYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0yZnYoZSx0KX19ZnVuY3Rpb24gVGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM2Z2KGUsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTRmdihlLHQpfX1mdW5jdGlvbiBfaShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xaShlLHQpfX1mdW5jdGlvbiB4aShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xaXYoZSx0KX19ZnVuY3Rpb24gZ2kocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMml2KGUsdCl9fWZ1bmN0aW9uIGJpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNpdihlLHQpfX1mdW5jdGlvbiB2aShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00aXYoZSx0KX19ZnVuY3Rpb24gd2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMXVpKGUsdCl9fWZ1bmN0aW9uIFJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aXYoZSx0KX19ZnVuY3Rpb24gU2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMnVpdihlLHQpfX1mdW5jdGlvbiBJYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zdWl2KGUsdCl9fWZ1bmN0aW9uIEZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTR1aXYoZSx0KX19ZnVuY3Rpb24gUGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIERjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDNmdihlLCExLHQpfX1mdW5jdGlvbiBNYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0ZnYoZSwhMSx0KX19ZnVuY3Rpb24gQ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4MngzZnYoZSwhMSx0KX19ZnVuY3Rpb24gT2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M3gyZnYoZSwhMSx0KX19ZnVuY3Rpb24gTmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4Mng0ZnYoZSwhMSx0KX19ZnVuY3Rpb24gVWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NHgyZnYoZSwhMSx0KX19ZnVuY3Rpb24gQmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M3g0ZnYoZSwhMSx0KX19ZnVuY3Rpb24ga2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NHgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gTChyLGUsdCxuKXtjb25zdCBpPXlpKHIsZSk7cmV0dXJuIFVlKHIpP2Z1bmN0aW9uKG8pe2xldCBzLGE7b3IocixvKT8ocz1vLGE9bnVsbCk6KHM9by50ZXh0dXJlLGE9by5zYW1wbGVyKSxyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZSh4dCt0KSxyLmJpbmRUZXh0dXJlKGkscyksci5iaW5kU2FtcGxlcih0LGEpfTpmdW5jdGlvbihvKXtyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZSh4dCt0KSxyLmJpbmRUZXh0dXJlKGksbyl9fWZ1bmN0aW9uICQocixlLHQsbixpKXtjb25zdCBvPXlpKHIsZSkscz1uZXcgSW50MzJBcnJheShpKTtmb3IobGV0IGE9MDthPGk7KythKXNbYV09dCthO3JldHVybiBVZShyKT9mdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUoeHQrc1tmXSk7bGV0IGMsZDtvcihyLHUpPyhjPXUsZD1udWxsKTooYz11LnRleHR1cmUsZD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxkKSxyLmJpbmRUZXh0dXJlKG8sYyl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKHh0K3NbZl0pLHIuYmluZFRleHR1cmUobyx1KX0pfX1FW2J0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjpiYyxhcnJheVNldHRlcjp2Y30sRVtlaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6RWMsY29sczoyfSxFW3RpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6VGMsY29sczozfSxFW3JpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6QWMsY29sczo0fSxFW2JyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6X2ksYXJyYXlTZXR0ZXI6eGl9LEVbbmldPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpnaSxjb2xzOjJ9LEVbaWldPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6YmksY29sczozfSxFW29pXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOnZpLGNvbHM6NH0sRVt2cl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjp3YyxhcnJheVNldHRlcjpSY30sRVttaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpTYyxjb2xzOjJ9LEVbaGldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOkljLGNvbHM6M30sRVtwaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6RmMsY29sczo0fSxFW3NpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOl9pLGFycmF5U2V0dGVyOnhpfSxFW2FpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmdpLGNvbHM6Mn0sRVt1aV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6YmksY29sczozfSxFW2NpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjp2aSxjb2xzOjR9LEVbZmldPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpQYyxyb3dzOjIsY29sczoyfSxFW2xpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6RGMscm93czozLGNvbHM6M30sRVtkaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOk1jLHJvd3M6NCxjb2xzOjR9LEVbbmNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpDYyxyb3dzOjIsY29sczozfSxFW2ljXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6TmMscm93czoyLGNvbHM6NH0sRVtvY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOk9jLHJvd3M6Myxjb2xzOjJ9LEVbc2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpCYyxyb3dzOjMsY29sczo0fSxFW2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6VWMscm93czo0LGNvbHM6Mn0sRVt1Y109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOmtjLHJvd3M6NCxjb2xzOjN9LEVbWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OnZ0fSxFW2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpFdH0sRVt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6RXJ9LEVbcmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OnZ0fSxFW2NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpUdH0sRVtmY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6VHR9LEVbbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkV0fSxFW2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDp2dH0sRVttY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6RXJ9LEVbaGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkV0fSxFW3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpUdH0sRVt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6dnR9LEVbX2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkVyfSxFW3hjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpFdH0sRVtnY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6VHR9O2Z1bmN0aW9uIEF0KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKGd0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8YnQsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGxlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoZ3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8YnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gd3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoZ3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8dnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gVHIocixlLHQpe2NvbnN0IG49dC5zaXplLGk9dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24obyl7ci5iaW5kQnVmZmVyKGd0LG8uYnVmZmVyKTtjb25zdCBzPW8uc2l6ZXx8by5udW1Db21wb25lbnRzfHxuLGE9cy9pLHU9by50eXBlfHxidCxjPUVbdV0uc2l6ZSpzLGQ9by5ub3JtYWxpemV8fCExLHk9by5vZmZzZXR8fDAsXz1jL2k7Zm9yKGxldCBtPTA7bTxpOysrbSlyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUrbSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUrbSxhLHUsZCxjLHkrXyptKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK20sby5kaXZpc29yfHwwKX19Y29uc3QgRD17fTtEW2J0XT17c2l6ZTo0LHNldHRlcjpBdH0sRFtlaV09e3NpemU6OCxzZXR0ZXI6QXR9LERbdGldPXtzaXplOjEyLHNldHRlcjpBdH0sRFtyaV09e3NpemU6MTYsc2V0dGVyOkF0fSxEW2JyXT17c2l6ZTo0LHNldHRlcjpsZX0sRFtuaV09e3NpemU6OCxzZXR0ZXI6bGV9LERbaWldPXtzaXplOjEyLHNldHRlcjpsZX0sRFtvaV09e3NpemU6MTYsc2V0dGVyOmxlfSxEW3ZyXT17c2l6ZTo0LHNldHRlcjp3dH0sRFttaV09e3NpemU6OCxzZXR0ZXI6d3R9LERbaGldPXtzaXplOjEyLHNldHRlcjp3dH0sRFtwaV09e3NpemU6MTYsc2V0dGVyOnd0fSxEW3NpXT17c2l6ZTo0LHNldHRlcjpsZX0sRFthaV09e3NpemU6OCxzZXR0ZXI6bGV9LERbdWldPXtzaXplOjEyLHNldHRlcjpsZX0sRFtjaV09e3NpemU6MTYsc2V0dGVyOmxlfSxEW2ZpXT17c2l6ZTo0LHNldHRlcjpUcixjb3VudDoyfSxEW2xpXT17c2l6ZTo5LHNldHRlcjpUcixjb3VudDozfSxEW2RpXT17c2l6ZToxNixzZXR0ZXI6VHIsY291bnQ6NH07Y29uc3QgTGM9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiAkYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKExjKV0saT1uZXcgTWFwKG4ubWFwKChvLHMpPT57Y29uc3QgYT1wYXJzZUludChvWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxjPWUuc3Vic3RyaW5nKG8uaW5kZXgsZik7cmV0dXJuW2EtMSxjXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgobyxzKT0+e2NvbnN0IGE9aS5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke299JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IEVpPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIFRpKHIpe2xldCBlPTA7cmV0dXJuIEVpLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UoRWksIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBHYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIHpjKHIsZSx0LG4pe2lmKG49bnx8Z3IsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsR3UpKXtjb25zdCBvPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1UaShyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHskYyhhLG8scyl9CkVycm9yIGNvbXBpbGluZyAke0RuKHIsZSl9OiAke299YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIEFyKHIsZSx0KXtsZXQgbixpLG87aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxpPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLG89Zi5jYWxsYmFja31jb25zdCBzPXR8fGdyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmMpe2EucHVzaChmKSxzKGYsLi4uYyl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6aSxjYWxsYmFjazpvLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oYyxkKXtmW2NdPWU/ZVtkXTpkfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IEhjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIFZjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIEh1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBWdX1mdW5jdGlvbiBXYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgaSBvZiBuKXQuaGFzKGkpJiZyLmRlbGV0ZVNoYWRlcihpKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgamM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gcWMocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczppLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6byx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309QXIodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPUpuKHUpLGM9Zj9mLnRleHQ6dTtsZXQgZD1yW0hjW2FdXTtmJiZmLnR5cGUmJihkPVZjKHIsZi50eXBlKXx8ZCksdT1yLmNyZWF0ZVNoYWRlcihkKSxyLnNoYWRlclNvdXJjZSh1LFRpKGMpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9bzthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fFd1KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBYYyhyLGUsdCxuLGkpe2NvbnN0IG89QXIodCxuLGkpLHM9bmV3IFNldChlKSxhPXFjKHIsZSxvKTtmdW5jdGlvbiB1KGYsYyl7Y29uc3QgZD1RYyhmLGMsby5lcnJvckNhbGxiYWNrKTtyZXR1cm4gZCYmV2MoZixjLHMpLGR9aWYoby5jYWxsYmFjayl7WWMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7by5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gWWMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KG8scyk9Pm8uZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IGk9MDtkbyBhd2FpdCBqYyhpKSxpPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBRYyhyLGUsdCl7aWYodD10fHxnciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsenUpKXtjb25zdCBpPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke2l9YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+emMocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke2l9CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIEtjKHIsZSx0LG4saSl7cmV0dXJuIFhjKHIsZSx0LG4saSl9ZnVuY3Rpb24gQWkocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgSmM9LyhcLnxcW3xdfFx3KykvZyxaYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBlZihyLGUsdCxuKXtjb25zdCBpPXIuc3BsaXQoSmMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBvPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9aVtvKytdO3MrPWE7Y29uc3QgdT1aYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9aVtvKytdKSxvPT09aS5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IGQ9aVtvKytdLHk9ZD09PSJbIixfPXRbZl18fCh5P1tdOnt9KTt0W2ZdPV8sdD1fLG5bc109bltzXXx8ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKHgpe3dpKG0seCl9fShfKSxzKz1kfX19ZnVuY3Rpb24gdGYocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGM9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxkPXUudHlwZSx5PUVbZF07aWYoIXkpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtkLnRvU3RyaW5nKDE2KX1gKTtsZXQgXztpZih5LmJpbmRQb2ludCl7Y29uc3QgbT10O3QrPXUuc2l6ZSxjP189eS5hcnJheVNldHRlcihyLGQsbSxmLHUuc2l6ZSk6Xz15LnNldHRlcihyLGQsbSxmLHUuc2l6ZSl9ZWxzZSB5LmFycmF5U2V0dGVyJiZjP189eS5hcnJheVNldHRlcihyLGYpOl89eS5zZXR0ZXIocixmKTtyZXR1cm4gXy5sb2NhdGlvbj1mLF99Y29uc3QgaT17fSxvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWm4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoQWkodSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBjPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihjKXtjb25zdCBkPW4oZSx1LGMpO2lbZl09ZCxlZihmLGQsbyxpKX19cmV0dXJuIGl9ZnVuY3Rpb24gcmYocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUscXUpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxpKTt0W28ubmFtZV09e2luZGV4OmksdHlwZTpvLnR5cGUsc2l6ZTpvLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIG5mKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxabiksbj1bXSxpPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2kucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsaSxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7bltkXVtmXT1jfSl9KTtjb25zdCBvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWHUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsWXUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxRdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsS3UpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxKdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixvW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6byx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB3aShyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOndpKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIFJpKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1lW2ldO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IHM9by5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlSaSh0LG9bYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gbyl7Y29uc3QgYT10W3NdO2EmJmEob1tzXSl9fX1mdW5jdGlvbiBvZihyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxqdSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldEFjdGl2ZUF0dHJpYihlLGkpO2lmKEFpKG8pKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLG8ubmFtZSksYT1EW28udHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbby5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIHNmKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIGFmKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihzZihlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcigkdSx0LmluZGljZXMpKX1mdW5jdGlvbiBTaShyLGUpe2NvbnN0IHQ9dGYocixlKSxuPW9mKHIsZSksaT17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gVWUocikmJihpLnVuaWZvcm1CbG9ja1NwZWM9bmYocixlKSxpLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1yZihyLGUpKSxpfWNvbnN0IHVmPS9cc3x7fH18Oy87ZnVuY3Rpb24gY2YocixlLHQsbixpKXtjb25zdCBvPUFyKHQsbixpKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXVmLnRlc3QoZikpe2NvbnN0IGM9Sm4oZik7aWYoYylmPWMudGV4dDtlbHNle2NvbnN0IGQ9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7by5lcnJvckNhbGxiYWNrKGQpLHMucHVzaChkKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gR2MobywiIik7Y29uc3QgYT1vLmNhbGxiYWNrO2EmJihvLmNhbGxiYWNrPShmLGMpPT57YShmLGY/dm9pZCAwOlNpKHIsYykpfSk7Y29uc3QgdT1LYyhyLGUsbyk7cmV0dXJuIHU/U2kocix1KTpudWxsfWNvbnN0IGZmPTQsSWk9NTEyMztmdW5jdGlvbiBsZihyLGUsdCxuLGksbyl7dD10PT09dm9pZCAwP2ZmOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47aT1pPT09dm9pZCAwPzA6aSxhfHxzP28hPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/SWk6ZS5lbGVtZW50VHlwZSxpLG8pOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP0lpOmUuZWxlbWVudFR5cGUsaSk6byE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxpLHUsbyk6ci5kcmF3QXJyYXlzKHQsaSx1KX1jb25zdCBGaT0zNjE2MCxSdD0zNjE2MSxkZj0zNTUzLG1mPTUxMjEsaGY9NjQwMixwZj02NDA4LHlmPTMzMTkwLF9mPTM2MDEyLHhmPTM1MDU2LGdmPTM2MDEzLGJmPTMyODU0LHZmPTMyODU1LEVmPTM2MTk0LFBpPTMzMTg5LERpPTY0MDEsTWk9MzYxNjgsd3I9MzQwNDEsUnI9MzYwNjQsU3Q9MzYwOTYsQ2k9MzYxMjgsU3I9MzMzMDYsSXI9MzMwNzEsRnI9OTcyOSxUZj1be2Zvcm1hdDpwZix0eXBlOm1mLG1pbjpGcix3cmFwOklyfSx7Zm9ybWF0OndyfV0scT17fTtxW3dyXT1TcixxW0RpXT1DaSxxW01pXT1DaSxxW2hmXT1TdCxxW1BpXT1TdCxxW3lmXT1TdCxxW19mXT1TdCxxW3hmXT1TcixxW2dmXT1TcjtmdW5jdGlvbiBBZihyLGUpe3JldHVybiBxW3JdfHxxW2VdfWNvbnN0IGRlPXt9O2RlW2JmXT0hMCxkZVt2Zl09ITAsZGVbRWZdPSEwLGRlW3dyXT0hMCxkZVtQaV09ITAsZGVbRGldPSEwLGRlW01pXT0hMDtmdW5jdGlvbiB3ZihyKXtyZXR1cm4gZGVbcl19Y29uc3QgUmY9MzI7ZnVuY3Rpb24gU2Yocil7cmV0dXJuIHI+PVJyJiZyPFJyK1JmfWZ1bmN0aW9uIEl0KHIsZSx0LG4pe2NvbnN0IGk9Rmksbz1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIoaSxvKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8VGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjpvLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgYz11LmF0dGFjaG1lbnQ7Y29uc3QgZD11LnNhbXBsZXMseT11LmZvcm1hdDtsZXQgXz11LmF0dGFjaG1lbnRQb2ludHx8QWYoeSx1LmludGVybmFsRm9ybWF0KTtpZihffHwoXz1ScitmKSxTZihfKSYmcy5wdXNoKF8pLCFjKWlmKGQhPT12b2lkIDB8fHdmKHkpKWM9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoUnQsYyksZD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKFJ0LGQseSx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShSdCx5LHQsbik7ZWxzZXtjb25zdCBtPU9iamVjdC5hc3NpZ24oe30sdSk7bS53aWR0aD10LG0uaGVpZ2h0PW4sbS5hdXRvPT09dm9pZCAwJiYobS5hdXRvPSExLG0ubWluPW0ubWlufHxtLm1pbk1hZ3x8RnIsbS5tYWc9bS5tYWd8fG0ubWluTWFnfHxGcixtLndyYXBTPW0ud3JhcFN8fG0ud3JhcHx8SXIsbS53cmFwVD1tLndyYXBUfHxtLndyYXB8fElyKSxjPUtuKHIsbSl9aWYoQnMocixjKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGksXyxSdCxjKTtlbHNlIGlmKG9yKHIsYykpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKGksXyxjLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLF8sdS50YXJnZXR8fGRmLGMsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGMpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIElmKHIsZSx0KXt0PXR8fEZpLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIFMocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOktuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgT2k9MjtjbGFzcyBiZXtjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImlkIiwiXyIpO3AodGhpcywiY29udGV4dCIpO3AodGhpcywib3V0cHV0Iik7cCh0aGlzLCJmYmkiKTtwKHRoaXMsIm9wdGlvbnMiKTtwKHRoaXMsInByb2dyYW1JbmZvIik7cCh0aGlzLCJidWZmZXJJbmZvIik7cCh0aGlzLCJwcm9maWxlciIpO3AodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDppfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IG89dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPWNmKHRoaXMuY29udGV4dCxbbyt0aGlzLmdldFZlcnRleFNoYWRlcigpLG8rdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPWFhKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9SXQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4saSksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9SXQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgaSxvLHMsYSx1LGY7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBjIGluIGUpdHlwZW9mIGVbY109PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7Y31gKSxlW2NdPWVbY10oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtjfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksYWYodGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxSaSh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLElmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLGxmKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgRmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxQZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIERmIGV4dGVuZHMgYmV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBGZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBQZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19dmFyIE1mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIGJhY2tncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIGZvcmVncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGJhY2tncm91bmRDb2xvciA9IHRleHR1cmUyRChiYWNrZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBmb3JlZ3JvdW5kQ29sb3IgPSB0ZXh0dXJlMkQoZm9yZWdyb3VuZCwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdHJlc2hvbGRDb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBnbF9GcmFnQ29sb3IgPSBmb3JlZ3JvdW5kQ29sb3IgKiB0cmVzaG9sZENvbG9yLmEgKwogICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciAqICgxLiAtIHRyZXNob2xkQ29sb3IuYSk7Cn0KYCxDZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7Cn0KYDtjbGFzcyBQciBleHRlbmRzIGJle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIE1mfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBDZn19Y2xhc3MgRHJ7Y29uc3RydWN0b3IoKXtwKHRoaXMsInN0ZXBzIixbXSk7cCh0aGlzLCJwcm9maWxlciIpfWFkZFN0ZXAoZSl7dGhpcy5zdGVwcy5wdXNoKGUpfWFzeW5jIHJ1bigpe2Zvcihjb25zdCBlIG9mIHRoaXMuc3RlcHMpZS5wcm9ncmFtLnJ1bihlLmdldFVuaWZvcm1zKCkpfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuLGk7KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYFBJUCBbJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XWApO2Zvcihjb25zdCBvIG9mIHRoaXMuc3RlcHMpby5wcmV2ZW50UmVzaXplfHxvLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCk7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucG9wQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lO2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLnNldFByb2ZpbGVyKGUpfXNldElkKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLmlkPWV9fWNsYXNzIE1yIGV4dGVuZHMgRHJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMSl9fWNvbnN0IE9mPTEwLE5mPTIsVWY9ODtjbGFzcyBCZiBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywiYmx1ciIpO3RoaXMuY29udGV4dD10LHRoaXMucmFkaXVzPW47Y29uc3QgaT17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9O3RoaXMuYmx1cj1uZXcgRGYoey4uLmkscmFkaXVzOm4sLi4udGhpcy5nZXRCbHVyVGV4dHVyZVNpemUodC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0KX0pO2NvbnN0IG89bmV3IFByKHsuLi5pLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTp0aGlzLmJsdXIscHJldmVudFJlc2l6ZTohMCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx0aGlzLmlucHV0SW1hZ2UpLG1hc2s6Uyh0LHRoaXMuaW5wdXRNYXNrKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpTKHQsdGhpcy5ibHVyLm91dHB1dCksZm9yZWdyb3VuZDpTKHQsdGhpcy5pbnB1dEltYWdlKSx0aHJlc2hvbGQ6Uyh0LHRoaXMuaW5wdXRNYXNrKX0pfSl9Z2V0Qmx1clRleHR1cmVTaXplKHQsbil7Y29uc3QgaT10aGlzLnJhZGl1cz5PZj9VZjpOZjtyZXR1cm57d2lkdGg6TWF0aC5tYXgoT2ksdC9pKSxoZWlnaHQ6TWF0aC5tYXgoT2ksbi9pKX19c2V0RGF0YSh0LG4pe3RoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbik7Y29uc3QgaT10aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LG4pO3RoaXMuYmx1ci5yZXNpemVPdXRwdXQoaS53aWR0aCxpLmhlaWdodCl9fWNsYXNzIE5pIGV4dGVuZHMgTXJ7Y29uc3RydWN0b3IodCl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0QmFja2dyb3VuZEltYWdlIik7cCh0aGlzLCJpbnB1dE1hc2siKTtwKHRoaXMsInByZWNpc2VNYXNrRW5hYmxlZCIsITApO3RoaXMuY29udGV4dD10O2NvbnN0IG49e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxpPW5ldyBQcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOlModCx0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlKSxmb3JlZ3JvdW5kOlModCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3Mga2YgZXh0ZW5kcyBOaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7cCh0aGlzLCJmcmFtZVJlYWRlciIpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IGlucHV0VmlkZW8odCl7dGhpcy5mcmFtZVJlYWRlcj10LmdldFJlYWRlcigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCl9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHN1cGVyLnJ1bigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX12YXIgTGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCwkZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgLENyPShyPT4ocltyLkxJTkVBUj0wXT0iTElORUFSIixyW3IuR0FVU1NJQU49MV09IkdBVVNTSUFOIixyKSkoQ3J8fHt9KTtjbGFzcyBVaSBleHRlbmRzIGJle2dldERlZmluZXMoKXt2YXIgZTtyZXR1cm57UkFESVVTOihlPXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP2U6MX19Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gTGYrdGhpcy5jcmVhdGVMb29wRnVuY3Rpb24oKX1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gJGZ9Y3JlYXRlTG9vcEZ1bmN0aW9uKCl7dmFyIHQ7bGV0IGU9KHQ9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dDoxO3JldHVybmAKCiAgICAgICAgdmVjNCBsb29wKCkgeyAKICAgICAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAsMCwwLDApOwogICAgICAgICAgICBmbG9hdCBmYWN0b3JTdW0gPSAwLjsKCiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZFJhZGl1cyA9IHZlYzIoLSR7ZX0uKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkSW5jcmVtZW50ID0gdmVjMigxLikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgZGlmZiA9IG5vcm1hbGl6ZWRSYWRpdXM7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9IDEuOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmYWN0b3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQgKyBkaWZmKTsKICAgICAgICAgICAgICAgICAgICBmYWN0b3JTdW0gKz0gZmFjdG9yOwogICAgICAgICAgICAgICAgICAgIGRpZmYueCArPSBub3JtYWxpemVkSW5jcmVtZW50Lng7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkaWZmLnkgKz0gbm9ybWFsaXplZEluY3JlbWVudC55OwogICAgICAgICAgICAgICAgZGlmZi54ID0gbm9ybWFsaXplZFJhZGl1cy54OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQgLyBmYWN0b3JTdW07CiAgICAgICAgfWB9Z2V0RmFjdG9yKGUsdCl7c3dpdGNoKHRoaXMub3B0aW9ucy50eXBlKXtjYXNlIDE6cmV0dXJuIHRoaXMuZ2V0TGluZWFyRmFjdG9yKGUsdCk7Y2FzZSAwOmRlZmF1bHQ6cmV0dXJuIHRoaXMuZ2V0TGluZWFyRmFjdG9yKGUsdCl9fWdldExpbmVhckZhY3RvcihlLHQpe3JldHVybiAxfWdldEdhdXNzaWFuRmFjdG9yKGUsdCl7dmFyIHU7Y29uc3Qgbj1NYXRoLlBJKjIsaT1NYXRoLm1heCgodT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD91OjEsMSksbz0xLyhuKmkqKjIpLHM9LShlKioyK3QqKjIpLGE9bypzO3JldHVybiBvKk1hdGguRSoqYX19Y2xhc3MgR2YgZXh0ZW5kcyBNcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7cCh0aGlzLCJpbnB1dEltYWdlIik7cCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0sbz1uZXcgVWkoey4uLmkscmFkaXVzOm4sdHlwZTpDci5HQVVTU0lBTn0pLHM9bmV3IFByKHsuLi5pLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6Uyh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpTKHQsby5vdXRwdXQpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgT3IgZXh0ZW5kcyBiZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KTtwKHRoaXMsImZiaTIiKTt0aGlzLmZiaTI9SXQodC5jb250ZXh0LFt7Zm9ybWF0OnQuY29udGV4dC5SR0JBLHR5cGU6dC5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnQuY29udGV4dC5MSU5FQVIsbWFnOnQuY29udGV4dC5MSU5FQVIsd3JhcDp0LmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQud2lkdGgsdC5oZWlnaHQpfXJ1bih0KXtjb25zdCBuPXRoaXMuZmJpO3RoaXMuZmJpPXRoaXMuZmJpMix0aGlzLmZiaTI9bix0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXSxzdXBlci5ydW4oey4uLnQscHJldmlvdXNfcmVuZGVyaW5nOnRoaXMuZmJpMi5hdHRhY2htZW50c1swXX0pfXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuZmJpMj1JdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdCxuKX19dmFyIHpmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCi8vIHVuaWZvcm0gZmxvYXQgdHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2VfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzX3JlbmRlcmluZzsKdW5pZm9ybSB2ZWMyIGNhbnZhczsKCnVuaWZvcm0gZmxvYXQgZGVsdGE7CgpmbG9hdCBjdXJyZW50X2ZhY3RvciA9IDAuNjk7CmZsb2F0IHByZXZpb3VzX2ZhY3RvciA9IDAuNzQ7CmZsb2F0IHRocmVzaG9sZF9hY3RpdmF0aW9uID0gMC41NDsKCmZsb2F0IG1hcChmbG9hdCB2YWx1ZSwgZmxvYXQgbWluMSwgZmxvYXQgbWF4MSwgZmxvYXQgbWluMiwgZmxvYXQgbWF4MikgewogIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTsKfQoKZmxvYXQgZ2V0VGhyZXNob2xkKCkgewogIHZlYzQgY29sb3IgPSB2ZWM0KDAuKTsKICBmb3IgKGZsb2F0IHkgPSAtNi47IHkgPCA3LjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTYuOyB4IDwgNy47IHggKz0gMS4pIHsKICAgICAgdmVjNCBpbWFnZV9ub3dfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX25vdywgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgdmVjNCBpbWFnZV9iZWZvcmVfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX2JlZm9yZSwgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgY29sb3IgKz0gYWJzKGltYWdlX2JlZm9yZV9jb2xvciAtIGltYWdlX25vd19jb2xvcik7CiAgICB9CiAgfQogIHJldHVybiAoY29sb3IueCArIGNvbG9yLnkgKyBjb2xvci56KSAvICgzLiAqIDkuKTsKfQoKdm9pZCBtYWluKCkgewogIGZsb2F0IHRyZXNob2xkX2lucHV0ID0gLjQ7CiAgZmxvYXQgdHJlc2hvbGRfcHJldmlvdXNfcmVuZGVyaW5nID0gLjk4OwoKICB2ZWM0IG1hc2tfbm93X2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfbm93LCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBtYXNrX2JlZm9yZV9jb2xvciA9IHRleHR1cmUyRChtYXNrX2JlZm9yZSwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yID0gdGV4dHVyZTJEKHByZXZpb3VzX3JlbmRlcmluZywgX3RleHR1cmVfY29vcmQpOwoKICB2ZWMzIG1hc2tfZGlmZiA9IGFicyhtYXNrX2JlZm9yZV9jb2xvci54eXogLSBtYXNrX25vd19jb2xvci54eXopOwogIGZsb2F0IGZsaWNrZXJpbmcgPSBtYXNrX2RpZmYueDsKICBmbG9hdCB0aHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICBpZiAodGhyZXNob2xkIDwgdGhyZXNob2xkX2FjdGl2YXRpb24pIHsKICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZmxpY2tlcmluZywgMC4sIDAuLCAxLikgKiBjdXJyZW50X2ZhY3RvciArCiAgICAgICAgICAgICAgICAgICBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgKiBwcmV2aW91c19mYWN0b3I7CiAgICBnbF9GcmFnQ29sb3IgKj0gKDEuIC0gdGhyZXNob2xkKTsKICB9Cn0KYCxIZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIFZmIGV4dGVuZHMgT3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gemZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEhmfX12YXIgV2Y9YCN2ZXJzaW9uIDMwMCBlcwovLyBodHRwczovL2dpdGh1Yi5jb20vVm9sY29taXgvdmlydHVhbC1iYWNrZ3JvdW5kL2Jsb2IvbWFpbi9zcmMvcGlwZWxpbmVzL3dlYmdsMi9qb2ludEJpbGF0ZXJhbEZpbHRlclN0YWdlLnRzCgpwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0X2ZyYW1lOwp1bmlmb3JtIHNhbXBsZXIyRCBzZWdtZW50YXRpb25fbWFzazsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHZlYzIgdGV4ZWxfc2l6ZTsKdW5pZm9ybSBmbG9hdCBzdGVwOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKdW5pZm9ybSBmbG9hdCBvZmZzZXQ7CnVuaWZvcm0gZmxvYXQgc2lnbWFfdGV4ZWw7CnVuaWZvcm0gZmxvYXQgc2lnbWFfY29sb3I7CgppbiB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjNCBvdXRDb2xvcjsKCmZsb2F0IGdhdXNzaWFuKGZsb2F0IHgsIGZsb2F0IHNpZ21hKSB7CiAgZmxvYXQgY29lZmYgPSAtMC41IC8gKHNpZ21hICogc2lnbWEgKiA0LjAgKyAxLjBlLTYpOwogIHJldHVybiBleHAoKHggKiB4KSAqIGNvZWZmKTsKfQoKdm9pZCBtYWluKCkgewogIHZlYzIgY2VudGVyQ29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICB2ZWMzIGNlbnRlckNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY2VudGVyQ29vcmQpLnJnYjsKICBmbG9hdCBuZXdWYWwgPSAwLjA7CiAgZmxvYXQgc3BhY2VXZWlnaHQgPSAwLjA7CiAgZmxvYXQgY29sb3JXZWlnaHQgPSAwLjA7CiAgZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7CiAgLy8gU3Vic2FtcGxlIGtlcm5lbCBzcGFjZS4KICBmb3IgKGZsb2F0IGkgPSAtcmFkaXVzICsgb2Zmc2V0OyBpIDw9IHJhZGl1czsgaSArPSBzdGVwKSB7CiAgICBmb3IgKGZsb2F0IGogPSAtcmFkaXVzICsgb2Zmc2V0OyBqIDw9IHJhZGl1czsgaiArPSBzdGVwKSB7CiAgICAgIHZlYzIgc2hpZnQgPSB2ZWMyKGosIGkpICogdGV4ZWxfc2l6ZTsKICAgICAgdmVjMiBjb29yZCA9IHZlYzIoY2VudGVyQ29vcmQgKyBzaGlmdCk7CiAgICAgIHZlYzMgZnJhbWVDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNvb3JkKS5yZ2I7CiAgICAgIGZsb2F0IHRocmVzaG9sZCA9IHRleHR1cmUodGhyZXNob2xkLCBjb29yZCkuYTsKICAgICAgZmxvYXQgb3V0VmFsID0gdGV4dHVyZShzZWdtZW50YXRpb25fbWFzaywgY29vcmQpLmE7CgogICAgICBzcGFjZVdlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvb3JkLCBjb29yZCksIHNpZ21hX3RleGVsKTsKICAgICAgY29sb3JXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb2xvciwgZnJhbWVDb2xvciksIHNpZ21hX2NvbG9yKTsKICAgICAgdG90YWxXZWlnaHQgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodDsKICAgICAgbmV3VmFsICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQgKiBvdXRWYWwgKiB0aHJlc2hvbGQ7CiAgICB9CiAgfQogIG5ld1ZhbCAvPSB0b3RhbFdlaWdodDsKICBvdXRDb2xvciA9IHZlYzQodmVjMygwLiksIG5ld1ZhbCk7Cn1gLGpmPWAjdmVyc2lvbiAzMDAgZXMKaW4gdmVjMiBwb3NpdGlvbjsKaW4gdmVjMiB0ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjMiBfdGV4dHVyZV9jb29yZDsKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfWA7Y2xhc3MgcWYgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBXZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gamZ9fXZhciBYZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIGludCBjb3VudCA9IDA7CiAgZm9yIChmbG9hdCB5ID0gLTEuOyB5IDwgMi47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0xLjsgeCA8IDIuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZCArIHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpOwogICAgICBpZiAoY29sb3IuciA+IC4xKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQogIH0KICBpZiAoY291bnQgPiA1KSB7CiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIH0KfQpgLFlmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgUWYgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBYZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gWWZ9fXZhciBLZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIGZvciAoZmxvYXQgeSA9IC0yLjsgeSA8IDMuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMi47IHggPCAzLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgICAgIGNvb3JkICs9IHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIGNvbG9yICs9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCkgKiAoMS4gLyA0Lik7CiAgICB9CiAgfQoKICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgLEpmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgWmYgZXh0ZW5kcyBPcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBLZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gSmZ9fXZhciBlbD1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0czsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGlucHV0c19jb2xvciA9IHRleHR1cmUyRChpbnB1dHMsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHRocmVzaG9sZF9jb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBpZiAodGhyZXNob2xkX2NvbG9yLnIgPCAuMSAmJiBpbnB1dHNfY29sb3IuciA+IC41KSB7CiAgICBnbF9GcmFnQ29sb3IgPSBpbnB1dHNfY29sb3I7CiAgfQp9CmAsdGw9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBybCBleHRlbmRzIE9ye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGVsfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0bH19Y2xhc3MgbmwgZXh0ZW5kcyBEcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywicHJldmlvdXNJbnB1dEltYWdlIik7cCh0aGlzLCJwcmV2aW91c0lucHV0TWFzayIpO3AodGhpcywib3V0cHV0Iik7cCh0aGlzLCJvcHRpb25zIix7Y3VycmVudFRocmVzaG9sZE1pbmltdW06MCxjdXJyZW50VGhyZXNob2xkTWF4aW11bToxLHByZXZpb3VzVGhyZXNob2xkTWluaW11bTowLHByZXZpb3VzVGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZE1pbmltdW06MCx0aHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkRmFjdG9yOjF9KTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn0scz1uZXcgVmYobyksYT1uZXcgVWkoey4uLm8scmFkaXVzOjEsdHlwZTpDci5HQVVTU0lBTn0pLHU9bmV3IHJsKG8pLGY9bmV3IFpmKG8pLGM9bmV3IFFmKG8pLGQ9bmV3IHFmKHsuLi5vfSkseT0uNjYsXz02NDAsbT00ODAseD0yNTYsdj0xNDQ7bGV0IGI9MTtiKj1NYXRoLm1heChfL3gsbS92KTtjb25zdCBBPU1hdGgubWF4KDEsTWF0aC5zcXJ0KGIpKnkpLFA9MS9fLEM9MS9tO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpTKHQsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6Uyh0LHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpTKHQsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOlModCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6Uyh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6Uyh0LHMub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmMsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZixnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCxjLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTphLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LGYub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmQsZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRfZnJhbWU6Uyh0LHRoaXMuaW5wdXRJbWFnZSksc2VnbWVudGF0aW9uX21hc2s6Uyh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6Uyh0LGEub3V0cHV0KSx0ZXhlbF9zaXplOltQLENdLHN0ZXA6QSxyYWRpdXM6YixvZmZzZXQ6QT4xP0EqLjU6MCxzaWdtYV90ZXhlbDpNYXRoLm1heChQLEMpKmIsc2lnbWFfY29sb3I6LjF9KX0pLHRoaXMub3V0cHV0PWQub3V0cHV0fXNldERhdGEodCxuKXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOnQsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazpuLHRoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59c2V0T3B0aW9ucyh0KXt0aGlzLm9wdGlvbnM9dH19dmFyIGlsPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLG9sPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3Mgc2wgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBpbH1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gb2x9fWNsYXNzIGFsIGV4dGVuZHMgRHJ7Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKCk7cCh0aGlzLCJpbnB1dEltYWdlIik7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbz17Y29udGV4dDp0LGhlaWdodDppLHdpZHRoOm59O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgc2woey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YSh0KXt0aGlzLmlucHV0SW1hZ2U9dH19Y2xhc3MgdWx7Y29uc3RydWN0b3IoZSl7cCh0aGlzLCJyZXNpemUiKTtwKHRoaXMsImNhbnZhcyIpO3AodGhpcywiY29udGV4dCIpO3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIiksdGhpcy5jYW52YXMud2lkdGg9ZS53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5yZXNpemU9bmV3IGFsKHRoaXMuY29udGV4dCxlLndpZHRoLGUuaGVpZ2h0KX1yZXNpemVGb3JlZ3JvdW5kKGUsdCl7dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLnJlc2l6ZS5yZXNpemVPdXRwdXQoZSx0KX1hc3luYyBwcm9jZXNzKGUpe3ZhciB0LG47cmV0dXJuIHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLCh0PXRoaXMucmVzaXplKT09bnVsbHx8dC5zZXREYXRhKGUpLChuPXRoaXMucmVzaXplKT09bnVsbHx8bi5ydW4oKSx0aGlzLmNhbnZhc319Y2xhc3MgY2x7Y29uc3RydWN0b3IoZSx0KXtwKHRoaXMsImltcHJvdmVNYXNrU2VnbWVudGF0aW9uIik7cCh0aGlzLCJiYWNrZ3JvdW5kUmVzaXplciIpO3AodGhpcywiYmFja2dyb3VuZEltYWdlIik7cCh0aGlzLCJiYWNrZ3JvdW5kVmlkZW8iKTtwKHRoaXMsInByb2ZpbGVyIik7cCh0aGlzLCJhY3RpdmVQaXBlbGluZSIpO3AodGhpcywiY2FudmFzIik7cCh0aGlzLCJvcHRpb25zIik7cCh0aGlzLCJjb250ZXh0Iik7cCh0aGlzLCJ2aXJ0dWFsQkdJbWFnZSIpO3RoaXMuaWQ9ZSx0aGlzLmNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdGhpcy5jb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoIndlYmdsMiIpLHRoaXMuY2FudmFzLndpZHRoPXQuZm9yZWdyb3VuZFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10LmZvcmVncm91bmRIZWlnaHQsdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbj1uZXcgbmwodGhpcy5jb250ZXh0LHQubWFza1dpZHRoLHQubWFza0hlaWdodCksdGhpcy5iYWNrZ3JvdW5kSW1hZ2U9bmV3IE5pKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kVmlkZW89bmV3IGtmKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplcj1uZXcgdWwoe3dpZHRoOnQuZm9yZWdyb3VuZFdpZHRoLGhlaWdodDp0LmZvcmVncm91bmRIZWlnaHR9KX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMuYWN0aXZlUGlwZWxpbmU9bmV3IEJmKHRoaXMuY29udGV4dCx0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgR2YodGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6dGhpcy5hY3RpdmVQaXBlbGluZT10aGlzLmJhY2tncm91bmRWaWRlbzticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZEltYWdlO2JyZWFrfXRoaXMub3B0aW9ucz1lfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24pPT1udWxsfHx0LnNldE9wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvLmlucHV0VmlkZW89ZX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt0aGlzLnZpcnR1YWxCR0ltYWdlPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKGUpfWFzeW5jIHByb2Nlc3MoZSx0KXt2YXIgbixpLG8scyxhLHUsZjtpZih0aGlzLmFjdGl2ZVBpcGVsaW5lJiZlLndpZHRoJiYodD09bnVsbD92b2lkIDA6dC53aWR0aCkpe2NvbnN0IGM9YFske3RoaXMuaWR9XSBiYWNrZ3JvdW5kLWZpbHRlcmA7KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYyk7bGV0IGQ9dDsoKChpPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOmkuc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJigobz10aGlzLm9wdGlvbnMpPT1udWxsP3ZvaWQgMDpvLnNlbGZpZVNlZ21lbnRhdGlvblR5cGUpPT09IlBSRUNJU0UifHwhKChzPXRoaXMub3B0aW9ucykhPW51bGwmJnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJnRoaXMuYWN0aXZlUGlwZWxpbmUucHJlY2lzZU1hc2tFbmFibGVkKSYmKHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0SWQodGhpcy5pZCksdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnNldERhdGEoZSx0KSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnJ1bigpLGQ9dGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5vdXRwdXQpLHRoaXMuYWN0aXZlUGlwZWxpbmUuc2V0SWQodGhpcy5pZCksdGhpcy5hY3RpdmVQaXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKSwoYT10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8YS5zZXREYXRhKGUsZCksKHU9dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fHUucnVuKCksKGY9dGhpcy5wcm9maWxlcik9PW51bGx8fGYucG9wQ29udGV4dChjKX19YXN5bmMgcmVzaXplRm9yZWdyb3VuZChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UucmVzaXplT3V0cHV0KGUsdCksdGhpcy5iYWNrZ3JvdW5kVmlkZW8ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5yZXNpemVGb3JlZ3JvdW5kKGUsdCksKG49dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy52aXJ0dWFsQkdJbWFnZSYmKHRoaXMuYmFja2dyb3VuZEltYWdlLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IHRoaXMuYmFja2dyb3VuZFJlc2l6ZXIucHJvY2Vzcyh0aGlzLnZpcnR1YWxCR0ltYWdlKSl9YXN5bmMgcHJvZmlsZShlKXtjb25zdCB0PW5ldyBScyh0aGlzLmNvbnRleHQpO3JldHVybiB0aGlzLnByb2ZpbGVyPXQsdC5zdGFydCgpLGF3YWl0IGduKGUpLHRoaXMucHJvZmlsZXI9dm9pZCAwLHQuc3RvcCgpLHQuZ2V0UmVzb2x2ZWRRdWVyaWVzKCl9Z2V0Qmx1clNpemUoZT1zdC5Mb3cpe3N3aXRjaChlKXtjYXNlIHN0LkxvdzpyZXR1cm4gNTtjYXNlIHN0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfX12YXIgZmw9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLGk7dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihsLGgpe249bCxpPWh9KTt2YXIgbz17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKG9bc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGwsaCl7dGhyb3cgaH0sZj0hMCxjPSIiO2Z1bmN0aW9uIGQobCl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUobCxjKTpjK2x9dmFyIHk7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGM9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihjPXIpLGMuaW5kZXhPZigiYmxvYjoiKSE9PTA/Yz1jLnN1YnN0cigwLGMucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpjPSIiO3ZhciBfPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksbT10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBvKW8uaGFzT3duUHJvcGVydHkocykmJih0W3NdPW9bc10pO289bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgdj10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJm1lKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIGIsQT0hMSxQPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIEMobCxoLGcpe2Zvcih2YXIgdz1oK2csTT1oO2xbTV0mJiEoTT49dyk7KSsrTTtpZihNLWg+MTYmJmwuc3ViYXJyYXkmJlApcmV0dXJuIFAuZGVjb2RlKGwuc3ViYXJyYXkoaCxNKSk7Zm9yKHZhciBVPSIiO2g8TTspe3ZhciBSPWxbaCsrXTtpZighKFImMTI4KSl7VSs9U3RyaW5nLmZyb21DaGFyQ29kZShSKTtjb250aW51ZX12YXIgaz1sW2grK10mNjM7aWYoKFImMjI0KT09MTkyKXtVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChSJjMxKTw8NnxrKTtjb250aW51ZX12YXIgZWU9bFtoKytdJjYzO2lmKChSJjI0MCk9PTIyND9SPShSJjE1KTw8MTJ8azw8NnxlZTpSPShSJjcpPDwxOHxrPDwxMnxlZTw8NnxsW2grK10mNjMsUjw2NTUzNilVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFIpO2Vsc2V7dmFyIGppPVItNjU1MzY7VSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxqaT4+MTAsNTYzMjB8amkmMTAyMyl9fXJldHVybiBVfWZ1bmN0aW9uIFcobCxoKXtyZXR1cm4gbD9DKEhlLGwsaCk6IiJ9ZnVuY3Rpb24gaWUobCxoLGcpe2Zvcih2YXIgdz0wO3c8bC5sZW5ndGg7Kyt3KUZ0W2grKz4+MF09bC5jaGFyQ29kZUF0KHcpO2d8fChGdFtoPj4wXT0wKX1mdW5jdGlvbiBYKGwsaCl7cmV0dXJuIGwlaD4wJiYobCs9aC1sJWgpLGx9dmFyIGtpLEZ0LEhlLFk7ZnVuY3Rpb24gTGkobCl7a2k9bCx0LkhFQVA4PUZ0PW5ldyBJbnQ4QXJyYXkobCksdC5IRUFQMTY9bmV3IEludDE2QXJyYXkobCksdC5IRUFQMzI9WT1uZXcgSW50MzJBcnJheShsKSx0LkhFQVBVOD1IZT1uZXcgVWludDhBcnJheShsKSx0LkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGwpLHQuSEVBUFUzMj1uZXcgVWludDMyQXJyYXkobCksdC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkobCksdC5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkobCl9dC5JTklUSUFMX01FTU9SWTt2YXIgVXIsJGk9W10sR2k9W10semk9W10sX2w9MDtmdW5jdGlvbiB4bCgpe3JldHVybiB2fHxfbD4wfWZ1bmN0aW9uIGdsKCl7aWYodC5wcmVSdW4pZm9yKHR5cGVvZiB0LnByZVJ1bj09ImZ1bmN0aW9uIiYmKHQucHJlUnVuPVt0LnByZVJ1bl0pO3QucHJlUnVuLmxlbmd0aDspRWwodC5wcmVSdW4uc2hpZnQoKSk7QnIoJGkpfWZ1bmN0aW9uIGJsKCl7QnIoR2kpfWZ1bmN0aW9uIHZsKCl7aWYodC5wb3N0UnVuKWZvcih0eXBlb2YgdC5wb3N0UnVuPT0iZnVuY3Rpb24iJiYodC5wb3N0UnVuPVt0LnBvc3RSdW5dKTt0LnBvc3RSdW4ubGVuZ3RoOylBbCh0LnBvc3RSdW4uc2hpZnQoKSk7QnIoemkpfWZ1bmN0aW9uIEVsKGwpeyRpLnVuc2hpZnQobCl9ZnVuY3Rpb24gVGwobCl7R2kudW5zaGlmdChsKX1mdW5jdGlvbiBBbChsKXt6aS51bnNoaWZ0KGwpfXZhciB2ZT0wLFZlPW51bGw7ZnVuY3Rpb24gd2wobCl7dmUrKyx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSl9ZnVuY3Rpb24gUmwobCl7aWYodmUtLSx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSksdmU9PTAmJlZlKXt2YXIgaD1WZTtWZT1udWxsLGgoKX19dC5wcmVsb2FkZWRJbWFnZXM9e30sdC5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gbWUobCl7dC5vbkFib3J0JiZ0Lm9uQWJvcnQobCksbD0iQWJvcnRlZCgiK2wrIikiLG0obCksQT0hMCxsKz0iLiBCdWlsZCB3aXRoIC1zIEFTU0VSVElPTlM9MSBmb3IgbW9yZSBpbmZvLiI7dmFyIGg9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihsKTt0aHJvdyBpKGgpLGh9dmFyIFNsPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBIaShsKXtyZXR1cm4gbC5zdGFydHNXaXRoKFNsKX12YXIgUTtRPSJ0ZmxpdGUtc2ltZC53YXNtIixIaShRKXx8KFE9ZChRKSk7ZnVuY3Rpb24gVmkobCl7dHJ5e2lmKGw9PVEmJngpcmV0dXJuIG5ldyBVaW50OEFycmF5KHgpO2lmKCF5KXRocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChoKXttZShoKX19ZnVuY3Rpb24gSWwoKXtyZXR1cm4heCYmZiYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKFEse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKGwpe2lmKCFsLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIrUSsiJyI7cmV0dXJuIGwuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIFZpKFEpfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBWaShRKX0pfWZ1bmN0aW9uIEZsKCl7dmFyIGw9e2E6UWx9O2Z1bmN0aW9uIGgoUixrKXt2YXIgZWU9Ui5leHBvcnRzO3QuYXNtPWVlLGI9dC5hc20ucSxMaShiLmJ1ZmZlciksVXI9dC5hc20uRSxUbCh0LmFzbS5yKSxSbCgpfXdsKCk7ZnVuY3Rpb24gZyhSKXtoKFIuaW5zdGFuY2UpfWZ1bmN0aW9uIHcoUil7cmV0dXJuIElsKCkudGhlbihmdW5jdGlvbihrKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoayxsKX0pLnRoZW4oZnVuY3Rpb24oayl7cmV0dXJuIGt9KS50aGVuKFIsZnVuY3Rpb24oayl7bSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitrKSxtZShrKX0pfWZ1bmN0aW9uIE0oKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhSGkoUSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChRLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihSKXt2YXIgaz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhSLGwpO3JldHVybiBrLnRoZW4oZyxmdW5jdGlvbihlZSl7cmV0dXJuIG0oIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2VlKSxtKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLHcoZyl9KX0pOncoZyl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBVPXQuaW5zdGFudGlhdGVXYXNtKGwsaCk7cmV0dXJuIFV9Y2F0Y2goUil7cmV0dXJuIG0oIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrUiksITF9cmV0dXJuIE0oKS5jYXRjaChpKSx7fX1mdW5jdGlvbiBCcihsKXtmb3IoO2wubGVuZ3RoPjA7KXt2YXIgaD1sLnNoaWZ0KCk7aWYodHlwZW9mIGg9PSJmdW5jdGlvbiIpe2godCk7Y29udGludWV9dmFyIGc9aC5mdW5jO3R5cGVvZiBnPT0ibnVtYmVyIj9oLmFyZz09PXZvaWQgMD9Vci5nZXQoZykoKTpVci5nZXQoZykoaC5hcmcpOmcoaC5hcmc9PT12b2lkIDA/bnVsbDpoLmFyZyl9fWZ1bmN0aW9uIFBsKGwsaCxnLHcpe21lKCJBc3NlcnRpb24gZmFpbGVkOiAiK1cobCkrIiwgYXQ6ICIrW2g/VyhoKToidW5rbm93biBmaWxlbmFtZSIsZyx3P1codyk6InVua25vd24gZnVuY3Rpb24iXSl9ZnVuY3Rpb24gRGwobCxoKXttZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gTWwobCxoKXttZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gQ2woKXttZSgiIil9dmFyIFB0O1B0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTt2YXIgT2w9ITA7ZnVuY3Rpb24gTmwobCl7cmV0dXJuIFlbV2koKT4+Ml09bCxsfWZ1bmN0aW9uIFVsKGwsaCl7dmFyIGc7aWYobD09PTApZz1EYXRlLm5vdygpO2Vsc2UgaWYoKGw9PT0xfHxsPT09NCkmJk9sKWc9UHQoKTtlbHNlIHJldHVybiBObCgyOCksLTE7cmV0dXJuIFlbaD4+Ml09Zy8xZTN8MCxZW2grND4+Ml09ZyUxZTMqMWUzKjFlM3wwLDB9ZnVuY3Rpb24gQmwoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiBrbChsLGgsZyl7SGUuY29weVdpdGhpbihsLGgsaCtnKX1mdW5jdGlvbiBMbChsKXt0cnl7cmV0dXJuIGIuZ3JvdyhsLWtpLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksTGkoYi5idWZmZXIpLDF9Y2F0Y2h7fX1mdW5jdGlvbiAkbChsKXt2YXIgaD1IZS5sZW5ndGg7bD1sPj4+MDt2YXIgZz0yMTQ3NDgzNjQ4O2lmKGw+ZylyZXR1cm4hMTtmb3IodmFyIHc9MTt3PD00O3cqPTIpe3ZhciBNPWgqKDErLjIvdyk7TT1NYXRoLm1pbihNLGwrMTAwNjYzMjk2KTt2YXIgVT1NYXRoLm1pbihnLFgoTWF0aC5tYXgobCxNKSw2NTUzNikpLFI9TGwoVSk7aWYoUilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBHbChsKXtmb3IodmFyIGg9UHQoKTtQdCgpLWg8bDspO312YXIga3I9e307ZnVuY3Rpb24gemwoKXtyZXR1cm4gYXx8Ii4vdGhpcy5wcm9ncmFtIn1mdW5jdGlvbiBXZSgpe2lmKCFXZS5zdHJpbmdzKXt2YXIgbD0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixoPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6bCxfOnpsKCl9O2Zvcih2YXIgZyBpbiBrcilrcltnXT09PXZvaWQgMD9kZWxldGUgaFtnXTpoW2ddPWtyW2ddO3ZhciB3PVtdO2Zvcih2YXIgZyBpbiBoKXcucHVzaChnKyI9IitoW2ddKTtXZS5zdHJpbmdzPXd9cmV0dXJuIFdlLnN0cmluZ3N9dmFyIER0PXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24obCxoKXt2YXIgZz1EdC5idWZmZXJzW2xdO2g9PT0wfHxoPT09MTA/KChsPT09MT9fOm0pKEMoZywwKSksZy5sZW5ndGg9MCk6Zy5wdXNoKGgpfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtEdC52YXJhcmdzKz00O3ZhciBsPVlbRHQudmFyYXJncy00Pj4yXTtyZXR1cm4gbH0sZ2V0U3RyOmZ1bmN0aW9uKGwpe3ZhciBoPVcobCk7cmV0dXJuIGh9LGdldDY0OmZ1bmN0aW9uKGwsaCl7cmV0dXJuIGx9fTtmdW5jdGlvbiBIbChsLGgpe3ZhciBnPTA7cmV0dXJuIFdlKCkuZm9yRWFjaChmdW5jdGlvbih3LE0pe3ZhciBVPWgrZztZW2wrTSo0Pj4yXT1VLGllKHcsVSksZys9dy5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24gVmwobCxoKXt2YXIgZz1XZSgpO1lbbD4+Ml09Zy5sZW5ndGg7dmFyIHc9MDtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKE0pe3crPU0ubGVuZ3RoKzF9KSxZW2g+PjJdPXcsMH1mdW5jdGlvbiBXbChsKXtKbChsKX1mdW5jdGlvbiBqbChsKXtyZXR1cm4gMH1mdW5jdGlvbiBxbChsLGgsZyx3LE0pe31mdW5jdGlvbiBYbChsLGgsZyx3KXtmb3IodmFyIE09MCxVPTA7VTxnO1UrKyl7Zm9yKHZhciBSPVlbaCtVKjg+PjJdLGs9WVtoKyhVKjgrNCk+PjJdLGVlPTA7ZWU8aztlZSsrKUR0LnByaW50Q2hhcihsLEhlW1IrZWVdKTtNKz1rfXJldHVybiBZW3c+PjJdPU0sMH1mdW5jdGlvbiBZbCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobCksbFswXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXttZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uIE10KGwsaCl7TXQucmFuZG9tRGV2aWNlfHwoTXQucmFuZG9tRGV2aWNlPVlsKCkpO2Zvcih2YXIgZz0wO2c8aDtnKyspRnRbbCtnPj4wXT1NdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgUWw9e2E6UGwsZTpEbCxkOk1sLGI6Q2wsbjpVbCxoOkJsLGw6a2wsbTokbCxwOkdsLGY6SGwsZzpWbCxqOldsLGk6amwsazpxbCxjOlhsLG86TXR9O0ZsKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9pc0dQVUVuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5faXNHUFVFbmFibGVkPXQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIFdpPXQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oV2k9dC5fX19lcnJub19sb2NhdGlvbj10LmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN0O2Z1bmN0aW9uIEtsKGwpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrbCsiKSIsdGhpcy5zdGF0dXM9bH1WZT1mdW5jdGlvbiBsKCl7Q3R8fExyKCksQ3R8fChWZT1sKX07ZnVuY3Rpb24gTHIobCl7aWYodmU+MHx8KGdsKCksdmU+MCkpcmV0dXJuO2Z1bmN0aW9uIGgoKXtDdHx8KEN0PSEwLHQuY2FsbGVkUnVuPSEwLCFBJiYoYmwoKSxuKHQpLHQub25SdW50aW1lSW5pdGlhbGl6ZWQmJnQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSx2bCgpKSl9dC5zZXRTdGF0dXM/KHQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNldFN0YXR1cygiIil9LDEpLGgoKX0sMSkpOmgoKX10LnJ1bj1McjtmdW5jdGlvbiBKbChsLGgpe1psKGwpfWZ1bmN0aW9uIFpsKGwpe3hsKCl8fCh0Lm9uRXhpdCYmdC5vbkV4aXQobCksQT0hMCksdShsLG5ldyBLbChsKSl9aWYodC5wcmVJbml0KWZvcih0eXBlb2YgdC5wcmVJbml0PT0iZnVuY3Rpb24iJiYodC5wcmVJbml0PVt0LnByZUluaXRdKTt0LnByZUluaXQubGVuZ3RoPjA7KXQucHJlSW5pdC5wb3AoKSgpO3JldHVybiBMcigpLGUucmVhZHl9fSgpO2NsYXNzIGxse2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJzZWxlY3RlZFRGTGl0ZSIpO3AodGhpcywiaXNTSU1EU3VwcG9ydGVkIiwhMSk7cCh0aGlzLCJpc1RocmVhZHNTdXBwb3J0ZWQiLCExKTtwKHRoaXMsImlucHV0V2lkdGgiLDApO3AodGhpcywiaW5wdXRIZWlnaHQiLDApO3AodGhpcywiaW5wdXRDaGFubmVsQ291bnQiLDApO3AodGhpcywiaW5wdXRNZW1vcnlPZmZzZXQiLDApO3AodGhpcywib3V0cHV0V2lkdGgiLDApO3AodGhpcywib3V0cHV0SGVpZ2h0IiwwKTtwKHRoaXMsIm91dHB1dENoYW5uZWxDb3VudCIsMCk7cCh0aGlzLCJvdXRwdXRNZW1vcnlPZmZzZXQiLDApfX1jb25zdCBkbD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC92b25hZ2UtdGVuc29yZmxvdy13YXNtL3RmbGl0ZS1zaW1kLXdhc20vMS4xLjMvIixtbD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gaGwocj1kbCxlPW1sKXtsZXQgdD1uZXcgbGw7dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIGZsKHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixjKT0+e2NvbnN0IGQ9dTtpZih0eXBlb2YgZD4idSIpcmV0dXJuIGMoIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IHk9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6Iix5KTtsZXQgXz1lK2Ake3l9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIitfKTt0cnl7Y29uc3QgeD1hd2FpdChhd2FpdCBmZXRjaChfKSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6Iix4LmJ5dGVMZW5ndGgpO2NvbnN0IHY9ZC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6Iix2KSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxkLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoeCksdik7Y29uc3QgYj1kLl9sb2FkTW9kZWwoeC5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6IixiKSxiIT09MCl7YygiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPWQuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PWQuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1kLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9ZC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PWQuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9ZC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1kLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1kLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1kfWNhdGNoKG0pe2MobSk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e2kodCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksbygibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksbygibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyBwbHtjb25zdHJ1Y3Rvcigpe3AodGhpcywiY2FudmFzIixuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkpO3AodGhpcywiY29udGV4dCIsdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSk7cCh0aGlzLCJwaXhlbENvdW50IiwwKTtwKHRoaXMsImlucHV0T2Zmc2V0IiwwKTtwKHRoaXMsIm91dHB1dE9mZnNldCIsMCk7cCh0aGlzLCJpbmZvcyIpO3AodGhpcywibWFzayIpfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmluaXRXYXNtKGUsdCksdGhpcy5pbmZvcyYmKHRoaXMuY2FudmFzLndpZHRoPXRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLnBpeGVsQ291bnQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoKnRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5tYXNrPW5ldyBJbWFnZURhdGEodGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuaW5mb3MuaW5wdXRIZWlnaHQpLHRoaXMuaW5wdXRPZmZzZXQ9dGhpcy5pbmZvcy5pbnB1dE1lbW9yeU9mZnNldC80LHRoaXMub3V0cHV0T2Zmc2V0PXRoaXMuaW5mb3Mub3V0cHV0TWVtb3J5T2Zmc2V0LzQpfWFzeW5jIGluaXRXYXNtKGUsdCl7dGhpcy5pbmZvcz1hd2FpdCBobChlLHQpfWdldE91dHB1dERpbWVuc2lvbnMoKXt2YXIgZSx0LG4saTtyZXR1cm57d2lkdGg6KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUub3V0cHV0V2lkdGgpIT1udWxsP3Q6MCxoZWlnaHQ6KGk9KG49dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOm4ub3V0cHV0SGVpZ2h0KSE9bnVsbD9pOjB9fWFzeW5jIHByb2Nlc3MoZSl7aWYoIXRoaXMubWFza3x8IXRoaXMuaW5mb3MpcmV0dXJuO2NvbnN0IHQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLG49dGhpcy5pbmZvcy5pbnB1dEhlaWdodDt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLHQsbik7Y29uc3QgaT10aGlzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCx0LG4pLG89dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmlucHV0T2Zmc2V0K3MqMztvW2FdPWkuZGF0YVtzKjRdLzI1NSxvW2ErMV09aS5kYXRhW3MqNCsxXS8yNTUsb1thKzJdPWkuZGF0YVtzKjQrMl0vMjU1fXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuX3J1bkluZmVyZW5jZSgpO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzJbdGhpcy5vdXRwdXRPZmZzZXQrc107dGhpcy5tYXNrLmRhdGFbcyo0XT10aGlzLm1hc2suZGF0YVtzKjQrM109MjU1KmF9cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKHRoaXMubWFzayl9aXNHcHVTdXBwb3J0ZWQoKXt2YXIgZSx0LG47cmV0dXJuKG49KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUuc2VsZWN0ZWRURkxpdGUpPT1udWxsP3ZvaWQgMDp0Ll9pc0dQVUVuYWJsZWQoKSkhPW51bGw/bjohMX19Y2xhc3MgeWx7Y29uc3RydWN0b3IoKXtwKHRoaXMsInNlbGZpZVNlZ21lbnRhdGlvbiIsbmV3IHBsKTtwKHRoaXMsImJhY2tncm91bmRGaWx0ZXIiKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpO2NvbnN0e3dpZHRoOm4saGVpZ2h0Oml9PXRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmdldE91dHB1dERpbWVuc2lvbnMoKTt0aGlzLmJhY2tncm91bmRGaWx0ZXI9bmV3IGNsKGUse2ZvcmVncm91bmRXaWR0aDoxLGZvcmVncm91bmRIZWlnaHQ6MSxtYXNrV2lkdGg6bixtYXNrSGVpZ2h0Oml9KX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbyxzLGEsdTtjb25zdCBuPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLGk9YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhuKTtpPygobi53aWR0aCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRofHxuLmhlaWdodCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCkmJih0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aD1uLndpZHRoLHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodD1uLmhlaWdodCxhd2FpdCgobz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpvLnJlc2l6ZUZvcmVncm91bmQobi53aWR0aCxuLmhlaWdodCkpKSxhd2FpdCgocz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpzLnByb2Nlc3MobixpKSksZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZSgoYT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDphLmNhbnZhcyx7dGltZXN0YW1wOih1PWUudGltZXN0YW1wKSE9bnVsbD91OjAsYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9YXN5bmMgc2V0VmlkZW9CR1JlYWRhYmxlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlkZW9CR1JlYWRhYmxlKGUpKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpcnR1YWxCR0ltYWdlKGUpKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt2YXIgdDsodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsfHx0LnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnByb2ZpbGUoZSkpIT1udWxsP246W119fWNvbnN0IE5yPWNsYXNze2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyB5bCk7cCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IHdzKTtwKHRoaXMsInJhdGUiLDMwKTtwKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7cCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4saSk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTppfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6aX0pfSl9YXN5bmMgb25NZWRpYVByb2Nlc3NvckV2ZW50KCl7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGU9Pnt0aGlzLmV2ZW50c1F1ZXVlLmxlbmd0aD4wP2UodGhpcy5ldmVudHNRdWV1ZS5zaGlmdCgpKTp0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWV9KX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe2ZzKGUpfWFzeW5jIHByb2ZpbGUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnByb2ZpbGUoZSkpfX07bGV0IEJpPU5yOygoKT0+e1hpKCJQcm9jZXNzb3JXb3JrZXIiLE5yKX0pKCl9KSgpOwo=",bu=typeof window<"u"&&window.Blob&&new Blob([atob(pu)],{type:"text/javascript;charset=utf-8"});function P3(){const o=bu&&(window.URL||window.webkitURL).createObjectURL(bu);try{return o?new Worker(o):new Worker("data:application/javascript;base64,"+pu)}finally{o&&(window.URL||window.webkitURL).revokeObjectURL(o)}}const is=class extends As{constructor(){super(...arguments);Rt(this,"rate",30);Rt(this,"worker")}async init(r){this.worker=await i2(es,P3),await this.worker.init(`worker_${is.initCount++}`,r),await this.worker.setVonageMetadata(Ts()),await this.setBackgroundOptions(r),this.listenWorker()}async setTrackExpectedRate(r){var m;await((m=this.worker)==null?void 0:m.setTrackExpectedRate(r))}async setBackgroundOptions(r){var y,I,H;const{transformerType:m}=r;switch(m){case"VideoBackground":await((y=this.worker)==null?void 0:y.setVideoBGReadable(await Os.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((I=this.worker)==null?void 0:I.setVirtualBGImage(await Os.createImageCanvas(r.backgroundAssetUri)));break}await((H=this.worker)==null?void 0:H.setBackgroundOptions(r))}async transform(r,m){var y;await((y=this.worker)==null?void 0:y.transform(r,m))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate())}async setFlickeringOptions(r){var m;await((m=this.worker)==null?void 0:m.setFlickeringOptions(r))}async profile(r){var y;const m=await((y=this.worker)==null?void 0:y.profile(r));return JSON.parse(m!=null?m:"[]")}async listenWorker(){var r,m,y;for(;(r=this.worker)!=null&&r.worker;){const{name:I,data:H}=await((m=this.worker)==null?void 0:m.onMediaProcessorEvent());switch(I){case"error":case"warn":this.emit(I,H);break;case"pipelineInfo":switch(this.emit(I,H),H){case"pipeline_ended":case"pipeline_ended_with_error":await((y=this.worker)==null?void 0:y.terminate());return}break}}}};let Oi=is;Rt(Oi,"initCount",0);class O3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},m=[];let y=0;for(const H of this.queries){const Y=[];for(const k of H)r[k.name]===void 0&&(r[k.name]=n.length,n.push({name:k.name})),Y.push({type:k.action==Qs.PUSH?"O":"C",frame:r[k.name],at:k.timestamp}),y=Math.max(y,k.timestamp+k.duration);m.push({events:Y,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:y})}const I={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:m};return JSON.stringify(I,null,2)}}class ns extends As{constructor(){super();Rt(this,"worker",new Oi);Rt(this,"connector",new jc(this.worker))}async init(r){await this.worker.init(r),this.worker.onAny((m,y)=>this.emit(m,y))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const m=await Promise.all(this.instances.map(y=>y.profile(r)));return new O3(m)}static async create(r){const m=new this;return await m.init(r),this.instances.push(m),m}}Rt(ns,"instances",[]);function _3(){return mi}function Q3(){return pi}function D3(){return bi}function $3(){return yi}function q3(){return gi}function td(){return Zi}function ed(){return vi}var yu=(o=>(o.FAST="FAST",o.PRECISE="PRECISE",o))(yu||{});async function nd(o){return await ns.create(o)}ze.BackgroundTransformer=mu,ze.BlurRadius=Mr,ze.ErrorFunction=Js,ze.MediapipeHelper=Gi,ze.PipelineInfoData=fi,ze.SelfieSegmentationType=yu,ze.VonageMediaProcessor=ns,ze.WarningType=Ns,ze.createVonageMediaProcessor=nd,ze.getSupportedBrowserFeatures=Es,ze.getVonageFaceDetection=$3,ze.getVonageFaceMash=q3,ze.getVonageHands=Q3,ze.getVonageHolistic=D3,ze.getVonageObjectron=td,ze.getVonagePose=ed,ze.getVonageSelfieSegmentation=_3,ze.isSupported=$c,Object.defineProperties(ze,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
458
|
+
`;class B3 extends xr{getFragmentShader(){return U3}getVertexShader(){return M3}}class A3 extends Do{constructor(r,m,y){super();Rt(this,"inputImage");this.context=r;const I={context:r,height:y,width:m};this.addStep({program:new B3({...I,disableFramebuffer:!0}),getUniforms:()=>({texture:mn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}class j3{constructor(n){Rt(this,"resize");Rt(this,"canvas");Rt(this,"context");this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.width,this.canvas.height=n.height,this.resize=new A3(this.context,n.width,n.height)}resizeForeground(n,r){this.canvas.width=n,this.canvas.height=r,this.resize.resizeOutput(n,r)}async process(n){var r,m;return this.canvas.width=this.canvas.width,(r=this.resize)==null||r.setData(n),(m=this.resize)==null||m.run(),this.canvas}}class z3{constructor(n,r){Rt(this,"improveMaskSegmentation");Rt(this,"backgroundResizer");Rt(this,"backgroundImage");Rt(this,"backgroundVideo");Rt(this,"profiler");Rt(this,"activePipeline");Rt(this,"canvas");Rt(this,"options");Rt(this,"context");Rt(this,"virtualBGImage");this.id=n,this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=r.foregroundWidth,this.canvas.height=r.foregroundHeight,this.improveMaskSegmentation=new K3(this.context,r.maskWidth,r.maskHeight),this.backgroundImage=new hu(this.context),this.backgroundVideo=new G3(this.context),this.backgroundResizer=new j3({width:r.foregroundWidth,height:r.foregroundHeight})}setBackgroundOptions(n){switch(n.transformerType){case"BackgroundBlur":this.activePipeline=new v3(this.context,this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.activePipeline=new W3(this.context,this.getBlurSize(n.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break}this.options=n}setFlickeringOptions(n){var r;(r=this.improveMaskSegmentation)==null||r.setOptions(n)}setVideoBGReadable(n){this.backgroundVideo.inputVideo=n}async setVirtualBGImage(n){this.virtualBGImage=n,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(n)}async process(n,r){var m,y,I,F,Y,k,et;if(this.activePipeline&&n.width&&(r==null?void 0:r.width)){const O=`[${this.id}] background-filter`;(m=this.profiler)==null||m.pushContext(O);let st=r;(((y=this.options)==null?void 0:y.selfieSegmentationType)&&((I=this.options)==null?void 0:I.selfieSegmentationType)==="PRECISE"||!((F=this.options)!=null&&F.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setId(this.id),this.improveMaskSegmentation.setProfiler(this.profiler),this.improveMaskSegmentation.setData(n,r),this.improveMaskSegmentation.run(),st=this.improveMaskSegmentation.output),this.activePipeline.setId(this.id),this.activePipeline.setProfiler(this.profiler),(Y=this.activePipeline)==null||Y.setData(n,st),(k=this.activePipeline)==null||k.run(),(et=this.profiler)==null||et.popContext(O)}}async resizeForeground(n,r){var m;this.canvas.width=n,this.canvas.height=r,this.backgroundImage.resizeOutput(n,r),this.backgroundVideo.resizeOutput(n,r),this.backgroundResizer.resizeForeground(n,r),(m=this.activePipeline)==null||m.resizeOutput(n,r),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}async profile(n){const r=new a2(this.context);return this.profiler=r,r.start(),await _s(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}getBlurSize(n=Mr.Low){switch(n){case Mr.Low:return 5;case Mr.High:return 12}return n}}class mu{constructor(){Rt(this,"selfieSegmentation",new ks);Rt(this,"backgroundFilter");Rt(this,"previousDimensions",{width:0,height:0})}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath);const{width:m,height:y}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new z3(n,{foregroundWidth:1,foregroundHeight:1,maskWidth:m,maskHeight:y})}async transform(n,r){var F,Y,k,et;const m=(F=n.timestamp)!=null?F:0,y=await createImageBitmap(n),I=await this.selfieSegmentation.process(y);I?((y.width!==this.previousDimensions.width||y.height!==this.previousDimensions.height)&&(this.previousDimensions.width=y.width,this.previousDimensions.height=y.height,await((Y=this.backgroundFilter)==null?void 0:Y.resizeForeground(y.width,y.height))),await((k=this.backgroundFilter)==null?void 0:k.process(y,I)),n.close(),r.enqueue(new VideoFrame((et=this.backgroundFilter)==null?void 0:et.canvas,{timestamp:m,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n))}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n)}async profile(n){var r,m;return(m=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?m:[]}}const rs=class{constructor(){Rt(this,"backgroundTransformer",new mu);Rt(this,"mediaProcessor",new Bc);Rt(this,"rate",30);Rt(this,"resolveOnMediaProcessor");Rt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((m,y)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:m,data:y}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:m,data:y})})}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){Yc(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let es=rs;(()=>{s2("ProcessorWorker",rs)})();const pu="dmFyIGVkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgdGQ9KEssdGUscmUpPT50ZSBpbiBLP2VkKEssdGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJlfSk6S1t0ZV09cmU7dmFyIHA9KEssdGUscmUpPT4odGQoSyx0eXBlb2YgdGUhPSJzeW1ib2wiP3RlKyIiOnRlLHJlKSxyZSk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBLPShyPT4ocltyLklOSVQ9MF09IklOSVQiLHJbci5GT1JXQVJEPTFdPSJGT1JXQVJEIixyW3IuVEVSTUlOQVRFPTJdPSJURVJNSU5BVEUiLHIpKShLfHx7fSk7ZnVuY3Rpb24gdGUocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1mdW5jdGlvbiByZShyLGUpe2NvbnN0e2lkOnR9PXIsbj1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHJlc3VsdDplfSxuLmZpbHRlcihpPT50ZShpKSkpfWFzeW5jIGZ1bmN0aW9uIHFpKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7cmUocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWZ1bmN0aW9uICRyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1jb25zdCBHcj17fTtmdW5jdGlvbiBYaShyLGUpe2Uud29ya2VySWQ9ciwkcigpJiYoR3JbZS53b3JrZXJJZF09ZSl9ZnVuY3Rpb24gWWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3RdPXIuYXJncyxuPUdyW3RdO2lmKG4pZS5pbnN0YW5jZT1uZXcgbihyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7cmUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gUWkocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSkscmUocixuKX1mdW5jdGlvbiBLaSgpe2NvbnN0IHI9e307b25tZXNzYWdlPWFzeW5jIGU9Pntjb25zdCB0PWUuZGF0YTtzd2l0Y2godC50eXBlKXtjYXNlIEsuSU5JVDpZaSh0LHIpO2JyZWFrO2Nhc2UgSy5GT1JXQVJEOnFpKHQscik7YnJlYWs7Y2FzZSBLLlRFUk1JTkFURTpRaSh0LHIpO2JyZWFrfX19JHIoKSYmS2koKTtjbGFzcyBuZXt9bmUudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxuZS5lcnJvcnM9e3RyYW5zZm9ybWVyX25vbmU6Ik5vIHRyYW5zZm9ybWVycyBwcm92aWRlZCIsdHJhbnNmb3JtZXJfc3RhcnQ6IkNhbm5vdCBzdGFydCB0cmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJfdHJhbnNmb3JtOiJDYW5ub3QgdHJhbnNmb3JtIGZyYW1lIix0cmFuc2Zvcm1lcl9mbHVzaDoiQ2Fubm90IGZsdXNoIHRyYW5zZm9ybWVyIixyZWFkYWJsZV9udWxsOiJSZWFkYWJsZSBpcyBudWxsIix3cml0YWJsZV9udWxsOiJXcml0YWJsZSBpcyBudWxsIn07dmFyIE90PXtleHBvcnRzOnt9fSx6cj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksbz0wO288aS5sZW5ndGg7bysrKWlbb109YXJndW1lbnRzW29dO3JldHVybiBlLmFwcGx5KHQsaSl9fSxKaT16cixvZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIE50KHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpfWZ1bmN0aW9uIFV0KHIpe3JldHVybiB0eXBlb2Ygcj4idSJ9ZnVuY3Rpb24gWmkocil7cmV0dXJuIHIhPT1udWxsJiYhVXQocikmJnIuY29uc3RydWN0b3IhPT1udWxsJiYhVXQoci5jb25zdHJ1Y3RvcikmJnR5cGVvZiByLmNvbnN0cnVjdG9yLmlzQnVmZmVyPT0iZnVuY3Rpb24iJiZyLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHIpfWZ1bmN0aW9uIEhyKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIn1mdW5jdGlvbiBlbyhyKXtyZXR1cm4gb2UuY2FsbChyKT09PSJbb2JqZWN0IEZvcm1EYXRhXSJ9ZnVuY3Rpb24gdG8ocil7dmFyIGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhyKTplPXImJnIuYnVmZmVyJiZIcihyLmJ1ZmZlciksZX1mdW5jdGlvbiBybyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmcifWZ1bmN0aW9uIG5vKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciJ9ZnVuY3Rpb24gVnIocil7cmV0dXJuIHIhPT1udWxsJiZ0eXBlb2Ygcj09Im9iamVjdCJ9ZnVuY3Rpb24gamUocil7aWYob2UuY2FsbChyKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO3ZhciBlPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIGlvKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRGF0ZV0ifWZ1bmN0aW9uIG9vKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRmlsZV0ifWZ1bmN0aW9uIHNvKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgQmxvYl0ifWZ1bmN0aW9uIFdyKHIpe3JldHVybiBvZS5jYWxsKHIpPT09IltvYmplY3QgRnVuY3Rpb25dIn1mdW5jdGlvbiBhbyhyKXtyZXR1cm4gVnIocikmJldyKHIucGlwZSl9ZnVuY3Rpb24gdW8ocil7cmV0dXJuIG9lLmNhbGwocik9PT0iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIn1mdW5jdGlvbiBjbyhyKXtyZXR1cm4gci50cmltP3IudHJpbSgpOnIucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfWZ1bmN0aW9uIGZvKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiJiYobmF2aWdhdG9yLnByb2R1Y3Q9PT0iUmVhY3ROYXRpdmUifHxuYXZpZ2F0b3IucHJvZHVjdD09PSJOYXRpdmVTY3JpcHQifHxuYXZpZ2F0b3IucHJvZHVjdD09PSJOUyIpPyExOnR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUifWZ1bmN0aW9uIEJ0KHIsZSl7aWYoIShyPT09bnVsbHx8dHlwZW9mIHI+InUiKSlpZih0eXBlb2YgciE9Im9iamVjdCImJihyPVtyXSksTnQocikpZm9yKHZhciB0PTAsbj1yLmxlbmd0aDt0PG47dCsrKWUuY2FsbChudWxsLHJbdF0sdCxyKTtlbHNlIGZvcih2YXIgaSBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGkpJiZlLmNhbGwobnVsbCxyW2ldLGkscil9ZnVuY3Rpb24ga3QoKXt2YXIgcj17fTtmdW5jdGlvbiBlKGksbyl7amUocltvXSkmJmplKGkpP3Jbb109a3QocltvXSxpKTpqZShpKT9yW29dPWt0KHt9LGkpOk50KGkpP3Jbb109aS5zbGljZSgpOnJbb109aX1mb3IodmFyIHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKylCdChhcmd1bWVudHNbdF0sZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbG8ocixlLHQpe3JldHVybiBCdChlLGZ1bmN0aW9uKGksbyl7dCYmdHlwZW9mIGk9PSJmdW5jdGlvbiI/cltvXT1KaShpLHQpOnJbb109aX0pLHJ9ZnVuY3Rpb24gbW8ocil7cmV0dXJuIHIuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYocj1yLnNsaWNlKDEpKSxyfXZhciBHPXtpc0FycmF5Ok50LGlzQXJyYXlCdWZmZXI6SHIsaXNCdWZmZXI6WmksaXNGb3JtRGF0YTplbyxpc0FycmF5QnVmZmVyVmlldzp0byxpc1N0cmluZzpybyxpc051bWJlcjpubyxpc09iamVjdDpWcixpc1BsYWluT2JqZWN0OmplLGlzVW5kZWZpbmVkOlV0LGlzRGF0ZTppbyxpc0ZpbGU6b28saXNCbG9iOnNvLGlzRnVuY3Rpb246V3IsaXNTdHJlYW06YW8saXNVUkxTZWFyY2hQYXJhbXM6dW8saXNTdGFuZGFyZEJyb3dzZXJFbnY6Zm8sZm9yRWFjaDpCdCxtZXJnZTprdCxleHRlbmQ6bG8sdHJpbTpjbyxzdHJpcEJPTTptb30sRWU9RztmdW5jdGlvbiBqcihyKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgcXI9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciBpO2lmKG4paT1uKHQpO2Vsc2UgaWYoRWUuaXNVUkxTZWFyY2hQYXJhbXModCkpaT10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgbz1bXTtFZS5mb3JFYWNoKHQsZnVuY3Rpb24odSxmKXt1PT09bnVsbHx8dHlwZW9mIHU+InUifHwoRWUuaXNBcnJheSh1KT9mPWYrIltdIjp1PVt1XSxFZS5mb3JFYWNoKHUsZnVuY3Rpb24oZCl7RWUuaXNEYXRlKGQpP2Q9ZC50b0lTT1N0cmluZygpOkVlLmlzT2JqZWN0KGQpJiYoZD1KU09OLnN0cmluZ2lmeShkKSksby5wdXNoKGpyKGYpKyI9IitqcihkKSl9KSl9KSxpPW8uam9pbigiJiIpfWlmKGkpe3ZhciBzPWUuaW5kZXhPZigiIyIpO3MhPT0tMSYmKGU9ZS5zbGljZSgwLHMpKSxlKz0oZS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBlfSxobz1HO2Z1bmN0aW9uIHFlKCl7dGhpcy5oYW5kbGVycz1bXX1xZS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOm4/bi5zeW5jaHJvbm91czohMSxydW5XaGVuOm4/bi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxxZS5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LHFlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2hvLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihuKXtuIT09bnVsbCYmZShuKX0pfTt2YXIgcG89cWUseW89Ryxfbz1mdW5jdGlvbihlLHQpe3lvLmZvckVhY2goZSxmdW5jdGlvbihpLG8pe28hPT10JiZvLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPWksZGVsZXRlIGVbb10pfSl9LFhyPWZ1bmN0aW9uKGUsdCxuLGksbyl7cmV0dXJuIGUuY29uZmlnPXQsbiYmKGUuY29kZT1uKSxlLnJlcXVlc3Q9aSxlLnJlc3BvbnNlPW8sZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fSxlfSx4bz1YcixZcj1mdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzPW5ldyBFcnJvcihlKTtyZXR1cm4geG8ocyx0LG4saSxvKX0sZ289WXIsYm89ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFuLnN0YXR1c3x8IWl8fGkobi5zdGF0dXMpP2Uobik6dChnbygiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKX0sWGU9Ryx2bz1YZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKHQsbixpLG8scyxhKXt2YXIgdT1bXTt1LnB1c2godCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pKSxYZS5pc051bWJlcihpKSYmdS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoaSkudG9HTVRTdHJpbmcoKSksWGUuaXNTdHJpbmcobykmJnUucHVzaCgicGF0aD0iK28pLFhlLmlzU3RyaW5nKHMpJiZ1LnB1c2goImRvbWFpbj0iK3MpLGE9PT0hMCYmdS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9dS5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKHQpe3ZhciBuPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIit0KyIpPShbXjtdKikiKSk7cmV0dXJuIG4/ZGVjb2RlVVJJQ29tcG9uZW50KG5bM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLndyaXRlKHQsIiIsRGF0ZS5ub3coKS04NjRlNSl9fX0oKTpmdW5jdGlvbigpe3JldHVybnt3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fX0oKSxFbz1mdW5jdGlvbihlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfSxUbz1mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfSxBbz1Fbyx3bz1UbyxSbz1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhQW8odCk/d28oZSx0KTp0fSxMdD1HLFNvPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sSW89ZnVuY3Rpb24oZSl7dmFyIHQ9e30sbixpLG87cmV0dXJuIGUmJkx0LmZvckVhY2goZS5zcGxpdChgCmApLGZ1bmN0aW9uKGEpe2lmKG89YS5pbmRleE9mKCI6Iiksbj1MdC50cmltKGEuc3Vic3RyKDAsbykpLnRvTG93ZXJDYXNlKCksaT1MdC50cmltKGEuc3Vic3RyKG8rMSkpLG4pe2lmKHRbbl0mJlNvLmluZGV4T2Yobik+PTApcmV0dXJuO249PT0ic2V0LWNvb2tpZSI/dFtuXT0odFtuXT90W25dOltdKS5jb25jYXQoW2ldKTp0W25dPXRbbl0/dFtuXSsiLCAiK2k6aX19KSx0fSxRcj1HLEZvPVFyLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG47ZnVuY3Rpb24gaShvKXt2YXIgcz1vO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpLHM9dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIscykse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiBuPWkod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHMpe3ZhciBhPVFyLmlzU3RyaW5nKHMpP2kocyk6cztyZXR1cm4gYS5wcm90b2NvbD09PW4ucHJvdG9jb2wmJmEuaG9zdD09PW4uaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gJHQocil7dGhpcy5tZXNzYWdlPXJ9JHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LCR0LnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBZZT0kdCxRZT1HLFBvPWJvLERvPXZvLE1vPXFyLENvPVJvLE9vPUlvLE5vPUZvLEd0PVlyLFVvPUplLEJvPVllLEtyPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe3ZhciBvPWUuZGF0YSxzPWUuaGVhZGVycyxhPWUucmVzcG9uc2VUeXBlLHU7ZnVuY3Rpb24gZigpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUodSksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix1KX1RZS5pc0Zvcm1EYXRhKG8pJiZkZWxldGUgc1siQ29udGVudC1UeXBlIl07dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIGQ9ZS5hdXRoLnVzZXJuYW1lfHwiIix5PWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7cy5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoZCsiOiIreSl9dmFyIF89Q28oZS5iYXNlVVJMLGUudXJsKTtjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxNbyhfLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQ7ZnVuY3Rpb24gbSgpe2lmKCEhYyl7dmFyIHY9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjP09vKGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsYj0hYXx8YT09PSJ0ZXh0Inx8YT09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLEE9e2RhdGE6YixzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczp2LGNvbmZpZzplLHJlcXVlc3Q6Y307UG8oZnVuY3Rpb24oQyl7bihDKSxmKCl9LGZ1bmN0aW9uKEMpe2koQyksZigpfSxBKSxjPW51bGx9fWlmKCJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1tOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWN8fGMucmVhZHlTdGF0ZSE9PTR8fGMuc3RhdHVzPT09MCYmIShjLnJlc3BvbnNlVVJMJiZjLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChtKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7IWN8fChpKEd0KCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe2koR3QoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciBiPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixBPWUudHJhbnNpdGlvbmFsfHxVby50cmFuc2l0aW9uYWw7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoYj1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGkoR3QoYixlLEEuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxRZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgeD0oZS53aXRoQ3JlZGVudGlhbHN8fE5vKF8pKSYmZS54c3JmQ29va2llTmFtZT9Eby5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDt4JiYoc1tlLnhzcmZIZWFkZXJOYW1lXT14KX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZRZS5mb3JFYWNoKHMsZnVuY3Rpb24oYixBKXt0eXBlb2Ygbz4idSImJkEudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiP2RlbGV0ZSBzW0FdOmMuc2V0UmVxdWVzdEhlYWRlcihBLGIpfSksUWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscyksYSYmYSE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSx0eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHU9ZnVuY3Rpb24odil7IWN8fChpKCF2fHx2JiZ2LnR5cGU/bmV3IEJvKCJjYW5jZWxlZCIpOnYpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZSh1KSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/dSgpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix1KSkpLG98fChvPW51bGwpLGMuc2VuZChvKX0pfSxPPUcsSnI9X28sa289WHIsTG89eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBacihyLGUpeyFPLmlzVW5kZWZpbmVkKHIpJiZPLmlzVW5kZWZpbmVkKHJbIkNvbnRlbnQtVHlwZSJdKSYmKHJbIkNvbnRlbnQtVHlwZSJdPWUpfWZ1bmN0aW9uICRvKCl7dmFyIHI7cmV0dXJuKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSJ8fHR5cGVvZiBwcm9jZXNzPCJ1IiYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpPT09IltvYmplY3QgcHJvY2Vzc10iKSYmKHI9S3IpLHJ9ZnVuY3Rpb24gR28ocixlLHQpe2lmKE8uaXNTdHJpbmcocikpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShyKSxPLnRyaW0ocil9Y2F0Y2gobil7aWYobi5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBufXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkocil9dmFyIEtlPXt0cmFuc2l0aW9uYWw6e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LGFkYXB0ZXI6JG8oKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBKcih0LCJBY2NlcHQiKSxKcih0LCJDb250ZW50LVR5cGUiKSxPLmlzRm9ybURhdGEoZSl8fE8uaXNBcnJheUJ1ZmZlcihlKXx8Ty5pc0J1ZmZlcihlKXx8Ty5pc1N0cmVhbShlKXx8Ty5pc0ZpbGUoZSl8fE8uaXNCbG9iKGUpP2U6Ty5pc0FycmF5QnVmZmVyVmlldyhlKT9lLmJ1ZmZlcjpPLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhacih0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6Ty5pc09iamVjdChlKXx8dCYmdFsiQ29udGVudC1UeXBlIl09PT0iYXBwbGljYXRpb24vanNvbiI/KFpyKHQsImFwcGxpY2F0aW9uL2pzb24iKSxHbyhlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8S2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxpPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbz0hbiYmdGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYob3x8aSYmTy5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKHMpe2lmKG8pdGhyb3cgcy5uYW1lPT09IlN5bnRheEVycm9yIj9rbyhzLHRoaXMsIkVfSlNPTl9QQVJTRSIpOnN9cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07Ty5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKGUpe0tlLmhlYWRlcnNbZV09e319KSxPLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtLZS5oZWFkZXJzW2VdPU8ubWVyZ2UoTG8pfSk7dmFyIEplPUtlLHpvPUcsSG89SmUsVm89ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXN8fEhvO3JldHVybiB6by5mb3JFYWNoKG4sZnVuY3Rpb24ocyl7ZT1zLmNhbGwoaSxlLHQpfSksZX0sZW49ZnVuY3Rpb24oZSl7cmV0dXJuISEoZSYmZS5fX0NBTkNFTF9fKX0sdG49Ryx6dD1WbyxXbz1lbixqbz1KZSxxbz1ZZTtmdW5jdGlvbiBIdChyKXtpZihyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxyLnNpZ25hbCYmci5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgcW8oImNhbmNlbGVkIil9dmFyIFhvPWZ1bmN0aW9uKGUpe0h0KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT16dC5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz10bi5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLHRuLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sZnVuY3Rpb24oaSl7ZGVsZXRlIGUuaGVhZGVyc1tpXX0pO3ZhciB0PWUuYWRhcHRlcnx8am8uYWRhcHRlcjtyZXR1cm4gdChlKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBIdChlKSxpLmRhdGE9enQuY2FsbChlLGkuZGF0YSxpLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksaX0sZnVuY3Rpb24oaSl7cmV0dXJuIFdvKGkpfHwoSHQoZSksaSYmaS5yZXNwb25zZSYmKGkucmVzcG9uc2UuZGF0YT16dC5jYWxsKGUsaS5yZXNwb25zZS5kYXRhLGkucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KGkpfSl9LHo9Ryxybj1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49e307ZnVuY3Rpb24gaShjLGQpe3JldHVybiB6LmlzUGxhaW5PYmplY3QoYykmJnouaXNQbGFpbk9iamVjdChkKT96Lm1lcmdlKGMsZCk6ei5pc1BsYWluT2JqZWN0KGQpP3oubWVyZ2Uoe30sZCk6ei5pc0FycmF5KGQpP2Quc2xpY2UoKTpkfWZ1bmN0aW9uIG8oYyl7aWYoei5pc1VuZGVmaW5lZCh0W2NdKSl7aWYoIXouaXNVbmRlZmluZWQoZVtjXSkpcmV0dXJuIGkodm9pZCAwLGVbY10pfWVsc2UgcmV0dXJuIGkoZVtjXSx0W2NdKX1mdW5jdGlvbiBzKGMpe2lmKCF6LmlzVW5kZWZpbmVkKHRbY10pKXJldHVybiBpKHZvaWQgMCx0W2NdKX1mdW5jdGlvbiBhKGMpe2lmKHouaXNVbmRlZmluZWQodFtjXSkpe2lmKCF6LmlzVW5kZWZpbmVkKGVbY10pKXJldHVybiBpKHZvaWQgMCxlW2NdKX1lbHNlIHJldHVybiBpKHZvaWQgMCx0W2NdKX1mdW5jdGlvbiB1KGMpe2lmKGMgaW4gdClyZXR1cm4gaShlW2NdLHRbY10pO2lmKGMgaW4gZSlyZXR1cm4gaSh2b2lkIDAsZVtjXSl9dmFyIGY9e3VybDpzLG1ldGhvZDpzLGRhdGE6cyxiYXNlVVJMOmEsdHJhbnNmb3JtUmVxdWVzdDphLHRyYW5zZm9ybVJlc3BvbnNlOmEscGFyYW1zU2VyaWFsaXplcjphLHRpbWVvdXQ6YSx0aW1lb3V0TWVzc2FnZTphLHdpdGhDcmVkZW50aWFsczphLGFkYXB0ZXI6YSxyZXNwb25zZVR5cGU6YSx4c3JmQ29va2llTmFtZTphLHhzcmZIZWFkZXJOYW1lOmEsb25VcGxvYWRQcm9ncmVzczphLG9uRG93bmxvYWRQcm9ncmVzczphLGRlY29tcHJlc3M6YSxtYXhDb250ZW50TGVuZ3RoOmEsbWF4Qm9keUxlbmd0aDphLHRyYW5zcG9ydDphLGh0dHBBZ2VudDphLGh0dHBzQWdlbnQ6YSxjYW5jZWxUb2tlbjphLHNvY2tldFBhdGg6YSxyZXNwb25zZUVuY29kaW5nOmEsdmFsaWRhdGVTdGF0dXM6dX07cmV0dXJuIHouZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLGZ1bmN0aW9uKGQpe3ZhciB5PWZbZF18fG8sXz15KGQpO3ouaXNVbmRlZmluZWQoXykmJnkhPT11fHwobltkXT1fKX0pLG59LG5uPXt2ZXJzaW9uOiIwLjI1LjAifSxZbz1ubi52ZXJzaW9uLFZ0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaChmdW5jdGlvbihyLGUpe1Z0W3JdPWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09PXJ8fCJhIisoZTwxPyJuICI6IiAiKStyfX0pO3ZhciBvbj17fTtWdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGkobyxzKXtyZXR1cm4iW0F4aW9zIHYiK1lvKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIrcysobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihvLHMsYSl7aWYoZT09PSExKXRocm93IG5ldyBFcnJvcihpKHMsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIW9uW3NdJiYob25bc109ITAsY29uc29sZS53YXJuKGkocywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxzLGEpOiEwfX07ZnVuY3Rpb24gUW8ocixlLHQpe2lmKHR5cGVvZiByIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKHIpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPWVbb107aWYocyl7dmFyIGE9cltvXSx1PWE9PT12b2lkIDB8fHMoYSxvLHIpO2lmKHUhPT0hMCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19dmFyIEtvPXthc3NlcnRPcHRpb25zOlFvLHZhbGlkYXRvcnM6VnR9LHNuPUcsSm89cXIsYW49cG8sdW49WG8sWmU9cm4sY249S28sVGU9Y24udmFsaWRhdG9ycztmdW5jdGlvbiBNZShyKXt0aGlzLmRlZmF1bHRzPXIsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGFuLHJlc3BvbnNlOm5ldyBhbn19TWUucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSwhdC51cmwpdGhyb3cgbmV3IEVycm9yKCJQcm92aWRlZCBjb25maWcgdXJsIGlzIG5vdCB2YWxpZCIpO3Q9WmUodGhpcy5kZWZhdWx0cyx0KSx0Lm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIG49dC50cmFuc2l0aW9uYWw7biE9PXZvaWQgMCYmY24uYXNzZXJ0T3B0aW9ucyhuLHtzaWxlbnRKU09OUGFyc2luZzpUZS50cmFuc2l0aW9uYWwoVGUuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6VGUudHJhbnNpdGlvbmFsKFRlLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6VGUudHJhbnNpdGlvbmFsKFRlLmJvb2xlYW4pfSwhMSk7dmFyIGk9W10sbz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oXyl7dHlwZW9mIF8ucnVuV2hlbj09ImZ1bmN0aW9uIiYmXy5ydW5XaGVuKHQpPT09ITF8fChvPW8mJl8uc3luY2hyb25vdXMsaS51bnNoaWZ0KF8uZnVsZmlsbGVkLF8ucmVqZWN0ZWQpKX0pO3ZhciBzPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oXyl7cy5wdXNoKF8uZnVsZmlsbGVkLF8ucmVqZWN0ZWQpfSk7dmFyIGE7aWYoIW8pe3ZhciB1PVt1bix2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseSh1LGkpLHU9dS5jb25jYXQocyksYT1Qcm9taXNlLnJlc29sdmUodCk7dS5sZW5ndGg7KWE9YS50aGVuKHUuc2hpZnQoKSx1LnNoaWZ0KCkpO3JldHVybiBhfWZvcih2YXIgZj10O2kubGVuZ3RoOyl7dmFyIGM9aS5zaGlmdCgpLGQ9aS5zaGlmdCgpO3RyeXtmPWMoZil9Y2F0Y2goeSl7ZCh5KTticmVha319dHJ5e2E9dW4oZil9Y2F0Y2goeSl7cmV0dXJuIFByb21pc2UucmVqZWN0KHkpfWZvcig7cy5sZW5ndGg7KWE9YS50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBhfSxNZS5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe2lmKCFlLnVybCl0aHJvdyBuZXcgRXJyb3IoIlByb3ZpZGVkIGNvbmZpZyB1cmwgaXMgbm90IHZhbGlkIik7cmV0dXJuIGU9WmUodGhpcy5kZWZhdWx0cyxlKSxKbyhlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxzbi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtNZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFplKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSxzbi5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7TWUucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFplKGl8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOm59KSl9fSk7dmFyIFpvPU1lLGVzPVllO2Z1bmN0aW9uIEFlKHIpe2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7ZT1pfSk7dmFyIHQ9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihuKXtpZighIXQuX2xpc3RlbmVycyl7dmFyIGksbz10Ll9saXN0ZW5lcnMubGVuZ3RoO2ZvcihpPTA7aTxvO2krKyl0Ll9saXN0ZW5lcnNbaV0obik7dC5fbGlzdGVuZXJzPW51bGx9fSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24obil7dmFyIGksbz1uZXcgUHJvbWlzZShmdW5jdGlvbihzKXt0LnN1YnNjcmliZShzKSxpPXN9KS50aGVuKG4pO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUoaSl9LG99LHIoZnVuY3Rpb24oaSl7dC5yZWFzb258fCh0LnJlYXNvbj1uZXcgZXMoaSksZSh0LnJlYXNvbikpfSl9QWUucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sQWUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxBZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYoISF0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sQWUuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgQWUoZnVuY3Rpb24oaSl7ZT1pfSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgdHM9QWUscnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmFwcGx5KG51bGwsbil9fSxucz1HLGlzPWZ1bmN0aW9uKGUpe3JldHVybiBucy5pc09iamVjdChlKSYmZS5pc0F4aW9zRXJyb3I9PT0hMH0sZm49Ryxvcz16cixldD1abyxzcz1ybixhcz1KZTtmdW5jdGlvbiBsbihyKXt2YXIgZT1uZXcgZXQociksdD1vcyhldC5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZm4uZXh0ZW5kKHQsZXQucHJvdG90eXBlLGUpLGZuLmV4dGVuZCh0LGUpLHQuY3JlYXRlPWZ1bmN0aW9uKGkpe3JldHVybiBsbihzcyhyLGkpKX0sdH12YXIgSj1sbihhcyk7Si5BeGlvcz1ldCxKLkNhbmNlbD1ZZSxKLkNhbmNlbFRva2VuPXRzLEouaXNDYW5jZWw9ZW4sSi5WRVJTSU9OPW5uLnZlcnNpb24sSi5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxKLnNwcmVhZD1ycyxKLmlzQXhpb3NFcnJvcj1pcyxPdC5leHBvcnRzPUosT3QuZXhwb3J0cy5kZWZhdWx0PUo7dmFyIHVzPU90LmV4cG9ydHM7Y2xhc3MgVHtpc0VtcHR5KCl7cmV0dXJuIXRoaXMuaXNQcmVzZW50KCl9c3RhdGljIG9mKGUpe2lmKGUhPW51bGwpcmV0dXJuIG5ldyBkbihlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIHdhcyBudWxsIG9yIHVuZGVmaW5lZC4iKX1zdGF0aWMgb2ZOb25OdWxsKGUpe3JldHVybiBULm9mKGUpfXN0YXRpYyBvZk51bGxhYmxlKGUpe3JldHVybiBlIT1udWxsP25ldyBkbihlKTpuZXcgbW59c3RhdGljIGVtcHR5KCl7cmV0dXJuIG5ldyBtbn1zdGF0aWMgZnJvbShlKXtzd2l0Y2goZS5raW5kKXtjYXNlInByZXNlbnQiOnJldHVybiBULm9mKGUudmFsdWUpO2Nhc2UiZW1wdHkiOnJldHVybiBULmVtcHR5KCk7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcGFzc2VkIHZhbHVlIHdhcyBub3QgYW4gT3B0aW9uIHR5cGUuIil9fX1jbGFzcyBkbiBleHRlbmRzIFR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnBheWxvYWQ9ZX1pc1ByZXNlbnQoKXtyZXR1cm4hMH1nZXQoKXtyZXR1cm4gdGhpcy5wYXlsb2FkfWlmUHJlc2VudChlKXtlKHRoaXMucGF5bG9hZCl9aWZQcmVzZW50T3JFbHNlKGUsdCl7ZSh0aGlzLnBheWxvYWQpfWZpbHRlcihlKXtyZXR1cm4gZSh0aGlzLnBheWxvYWQpP3RoaXM6VC5lbXB0eSgpfW1hcChlKXtjb25zdCB0PWUodGhpcy5wYXlsb2FkKTtyZXR1cm4gVC5vZk51bGxhYmxlKHQpfWZsYXRNYXAoZSl7cmV0dXJuIGUodGhpcy5wYXlsb2FkKX1vcihlKXtyZXR1cm4gdGhpc31vckVsc2UoZSl7cmV0dXJuIHRoaXMucGF5bG9hZH1vckVsc2VHZXQoZSl7cmV0dXJuIHRoaXMucGF5bG9hZH1vckVsc2VUaHJvdyhlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yTnVsbCgpe3JldHVybiB0aGlzLnBheWxvYWR9b3JVbmRlZmluZWQoKXtyZXR1cm4gdGhpcy5wYXlsb2FkfXRvT3B0aW9uKCl7cmV0dXJue2tpbmQ6InByZXNlbnQiLHZhbHVlOnRoaXMucGF5bG9hZH19bWF0Y2hlcyhlKXtyZXR1cm4gZS5wcmVzZW50KHRoaXMucGF5bG9hZCl9dG9KU09OKGUpe3JldHVybiB0aGlzLnBheWxvYWR9fWNsYXNzIG1uIGV4dGVuZHMgVHtpc1ByZXNlbnQoKXtyZXR1cm4hMX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9Z2V0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIG9wdGlvbmFsIGlzIG5vdCBwcmVzZW50LiIpfWlmUHJlc2VudChlKXt9aWZQcmVzZW50T3JFbHNlKGUsdCl7dCgpfWZpbHRlcihlKXtyZXR1cm4gdGhpc31tYXAoZSl7cmV0dXJuIFQuZW1wdHkoKX1mbGF0TWFwKGUpe3JldHVybiBULmVtcHR5KCl9b3IoZSl7cmV0dXJuIGUoKX1vckVsc2UoZSl7cmV0dXJuIGV9b3JFbHNlR2V0KGUpe3JldHVybiB0aGlzLm9yRWxzZShlKCkpfW9yRWxzZVRocm93KGUpe3Rocm93IGUoKX1vck51bGwoKXtyZXR1cm4gbnVsbH1vclVuZGVmaW5lZCgpe310b09wdGlvbigpe3JldHVybntraW5kOiJlbXB0eSJ9fW1hdGNoZXMoZSl7cmV0dXJuIGUuZW1wdHkoKX10b0pTT04oZSl7cmV0dXJuIG51bGx9fWNvbnN0IGNzPSIyLjAuMCI7ZnVuY3Rpb24gZnMocil7Z2xvYmFsVGhpcy5fdm9uYWdlTWVkaWFQcm9jZXNzb3JNZXRhZGF0YT1yfWZ1bmN0aW9uIGxzKCl7cmV0dXJuIGdsb2JhbFRoaXMuX3ZvbmFnZU1lZGlhUHJvY2Vzc29yTWV0YWRhdGF9Y2xhc3MgSHtjb25zdHJ1Y3Rvcigpe2NvbnN0IGU9bHMoKTt0aGlzLl9yZXBvcnQ9e2FjdGlvbjpULmVtcHR5KCksYXBwbGljYXRpb25JZDpULm9mTnVsbGFibGUoZSE9PXZvaWQgMCYmZSE9bnVsbD9lLmFwcElkOm51bGwpLHRpbWVzdGFtcDpEYXRlLm5vdygpLGZwczpULmVtcHR5KCksZnJhbWVzVHJhbnNmb3JtZWQ6VC5lbXB0eSgpLGd1aWQ6VC5lbXB0eSgpLGhpZ2hlc3RGcmFtZVRyYW5zZm9ybUNwdTpULmVtcHR5KCksbWVzc2FnZTpULmVtcHR5KCksc291cmNlOlQub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2Uuc291cmNlVHlwZTpudWxsKSx0cmFuc2Zvcm1lZEZwczpULmVtcHR5KCksdHJhbnNmb3JtZXJUeXBlOlQuZW1wdHkoKSx2YXJpYXRpb246VC5lbXB0eSgpLHZpZGVvSGVpZ2h0OlQuZW1wdHkoKSx2aWRlb1dpZHRoOlQuZW1wdHkoKSx2ZXJzaW9uOmNzLGVycm9yOlQuZW1wdHkoKSxwcm94eVVybDpULm9mTnVsbGFibGUoZSE9PXZvaWQgMCYmZSE9bnVsbD9lLnByb3h5VXJsOm51bGwpfX1hY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5hY3Rpb249VC5vZk51bGxhYmxlKGUpLHRoaXN9ZnJhbWVzVHJhbnNmb3JtZWQoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5mcmFtZXNUcmFuc2Zvcm1lZD1ULm9mTnVsbGFibGUoZSksdGhpc31mcHMoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5mcHM9VC5vZk51bGxhYmxlKGUpLHRoaXN9Z3VpZChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0Lmd1aWQ9VC5vZk51bGxhYmxlKGUpLHRoaXN9bWVzc2FnZShlKXtyZXR1cm4gdGhpcy5fcmVwb3J0Lm1lc3NhZ2U9VC5vZk51bGxhYmxlKGUpLHRoaXN9dHJhbnNmb3JtZWRGcHMoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC50cmFuc2Zvcm1lZEZwcz1ULm9mTnVsbGFibGUoZSksdGhpc310cmFuc2Zvcm1lclR5cGUoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC50cmFuc2Zvcm1lclR5cGU9VC5vZk51bGxhYmxlKGUpLHRoaXN9dmFyaWF0aW9uKGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmFyaWF0aW9uPVQub2ZOdWxsYWJsZShlKSx0aGlzfXZpZGVvSGVpZ2h0KGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmlkZW9IZWlnaHQ9VC5vZk51bGxhYmxlKGUpLHRoaXN9dmlkZW9XaWR0aChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnZpZGVvV2lkdGg9VC5vZk51bGxhYmxlKGUpLHRoaXN9ZXJyb3IoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC5lcnJvcj1ULm9mTnVsbGFibGUoZSksdGhpc31idWlsZCgpe3JldHVybiB0aGlzLl9yZXBvcnR9fWNvbnN0IGRzPXI9PkpTT04uc3RyaW5naWZ5KHIsKGUsdCk9PntpZih0IT09bnVsbClyZXR1cm4gdH0pO2NsYXNzIFZ7c3RhdGljIHJlcG9ydChlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntpZihlLmFwcGxpY2F0aW9uSWQuaXNFbXB0eSgpfHxlLnNvdXJjZS5pc0VtcHR5KCkpe3QoInN1Y2Nlc3MiKTtyZXR1cm59bGV0IGk9dXMuY3JlYXRlKCksbz17dGltZW91dDoxZTQsdGltZW91dEVycm9yTWVzc2FnZToiUmVxdWVzdCB0aW1lb3V0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fSxzPSJobGcudG9rYm94LmNvbS9wcm9kL2xvZ2dpbmcvdmNwX3dlYnJ0YyI7aWYoZS5wcm94eVVybC5pc0VtcHR5KCkpcz0iaHR0cHM6Ly8iK3M7ZWxzZXtsZXQgYTtlLnByb3h5VXJsLmdldCgpLnNsaWNlKGUucHJveHlVcmwuZ2V0KCkubGVuZ3RoLTEpIT09Ii8iP2E9ZS5wcm94eVVybC5nZXQoKSsiLyI6YT1lLnByb3h5VXJsLmdldCgpLHM9YStzfWkucG9zdChzLGRzKGUpLG8pLnRoZW4oYT0+e2NvbnNvbGUubG9nKGEpLHQoInN1Y2Nlc3MiKX0pLmNhdGNoKGE9Pntjb25zb2xlLmxvZyhhKSxuKGEpfSl9KX19dmFyIHR0LG1zPW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiBocygpe2lmKCF0dCYmKHR0PXR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKXx8dHlwZW9mIG1zQ3J5cHRvPCJ1IiYmdHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIiYmbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pLCF0dCkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiB0dChtcyl9dmFyIHBzPS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtmdW5jdGlvbiB5cyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciJiZwcy50ZXN0KHIpfWZvcih2YXIgTj1bXSxXdD0wO1d0PDI1NjsrK1d0KU4ucHVzaCgoV3QrMjU2KS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtmdW5jdGlvbiBfcyhyKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCx0PShOW3JbZSswXV0rTltyW2UrMV1dK05bcltlKzJdXStOW3JbZSszXV0rIi0iK05bcltlKzRdXStOW3JbZSs1XV0rIi0iK05bcltlKzZdXStOW3JbZSs3XV0rIi0iK05bcltlKzhdXStOW3JbZSs5XV0rIi0iK05bcltlKzEwXV0rTltyW2UrMTFdXStOW3JbZSsxMl1dK05bcltlKzEzXV0rTltyW2UrMTRdXStOW3JbZSsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCF5cyh0KSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCIpO3JldHVybiB0fWZ1bmN0aW9uIGhuKHIsZSx0KXtyPXJ8fHt9O3ZhciBuPXIucmFuZG9tfHwoci5ybmd8fGhzKSgpO2lmKG5bNl09bls2XSYxNXw2NCxuWzhdPW5bOF0mNjN8MTI4LGUpe3Q9dHx8MDtmb3IodmFyIGk9MDtpPDE2OysraSllW3QraV09bltpXTtyZXR1cm4gZX1yZXR1cm4gX3Mobil9Y29uc3Qgc2U9bmV3IFdlYWtNYXAscnQ9bmV3IFdlYWtNYXAsQ2U9bmV3IFdlYWtNYXAsanQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLHBuPVByb21pc2UucmVzb2x2ZSgpLG50PVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLGl0PVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IHF0PSExO2Z1bmN0aW9uIHdlKHIpe2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmdHlwZW9mIHIhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gb3Qocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gUmUocixlKXtjb25zdCB0PXJ0LmdldChyKTtyZXR1cm4gdC5oYXMoZSl8fHQuc2V0KGUsbmV3IFNldCksdC5nZXQoZSl9ZnVuY3Rpb24gT2UocixlKXtjb25zdCB0PXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6anQsbj1DZS5nZXQocik7cmV0dXJuIG4uaGFzKHQpfHxuLnNldCh0LG5ldyBTZXQpLG4uZ2V0KHQpfWZ1bmN0aW9uIHhzKHIsZSx0KXtjb25zdCBuPUNlLmdldChyKTtpZihuLmhhcyhlKSlmb3IoY29uc3QgaSBvZiBuLmdldChlKSlpLmVucXVldWUodCk7aWYobi5oYXMoanQpKXtjb25zdCBpPVByb21pc2UuYWxsKFtlLHRdKTtmb3IoY29uc3QgbyBvZiBuLmdldChqdCkpby5lbnF1ZXVlKGkpfX1mdW5jdGlvbiB5bihyLGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0hMSxuPSgpPT57fSxpPVtdO2NvbnN0IG89e2VucXVldWUocyl7aS5wdXNoKHMpLG4oKX0sZmluaXNoKCl7dD0hMCxuKCl9fTtmb3IoY29uc3QgcyBvZiBlKU9lKHIscykuYWRkKG8pO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIGk/aS5sZW5ndGg9PT0wP3Q/KGk9dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2Uocz0+e249c30pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBpLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKHMpe2k9dm9pZCAwO2Zvcihjb25zdCBhIG9mIGUpT2UocixhKS5kZWxldGUobyk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBfbihyKXtpZihyPT09dm9pZCAwKXJldHVybiB4bjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXhuLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgWHQ9cj0+cj09PW50fHxyPT09aXQ7Y2xhc3MgaGV7c3RhdGljIG1peGluKGUsdCl7cmV0dXJuIHQ9X24odCksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgcyBvZiB0KWlmKG4ucHJvdG90eXBlW3NdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtzfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IGhlfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6aX0pO2NvbnN0IG89cz0+ZnVuY3Rpb24oLi4uYSl7cmV0dXJuIHRoaXNbZV1bc10oLi4uYSl9O2Zvcihjb25zdCBzIG9mIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHMse2VudW1lcmFibGU6ITEsdmFsdWU6byhzKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7aWYodHlwZW9mIHByb2Nlc3MhPSJvYmplY3QiKXJldHVybiBxdDtjb25zdHtlbnY6ZX09cHJvY2Vzc3x8e2Vudjp7fX07cmV0dXJuIGUuREVCVUc9PT0iZW1pdHRlcnkifHxlLkRFQlVHPT09IioifHxxdH1zdGF0aWMgc2V0IGlzRGVidWdFbmFibGVkKGUpe3F0PWV9Y29uc3RydWN0b3IoZT17fSl7c2Uuc2V0KHRoaXMsbmV3IFNldCkscnQuc2V0KHRoaXMsbmV3IE1hcCksQ2Uuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHQsbixpLG8pPT57bz1KU09OLnN0cmluZ2lmeShvKSx0eXBlb2YgaT09InN5bWJvbCImJihpPWkudG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke2l9CglkYXRhOiAke299YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGhlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7b3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpd2UobiksUmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksWHQobil8fHRoaXMuZW1pdChudCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtvdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl3ZShuKSxSZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLFh0KG4pfHx0aGlzLmVtaXQoaXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsaT0+e24oKSx0KGkpfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpd2UodCk7cmV0dXJuIHluKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3dlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCkseHModGhpcyxlLHQpO2NvbnN0IG49UmUodGhpcyxlKSxpPXNlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVh0KGUpP1tdOlsuLi5pXTthd2FpdCBwbixhd2FpdCBQcm9taXNlLmFsbChbLi4uby5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKGkuaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXt3ZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49UmUodGhpcyxlKSxpPXNlLmdldCh0aGlzKSxvPVsuLi5uXSxzPVsuLi5pXTthd2FpdCBwbjtmb3IoY29uc3QgYSBvZiBvKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpaS5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gb3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSxzZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChudCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiB5bih0aGlzKX1vZmZBbnkoZSl7b3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdChpdCx7bGlzdGVuZXI6ZX0pLHNlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7UmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49T2UodGhpcyx0KTtmb3IoY29uc3QgaSBvZiBuKWkuZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7c2UuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgcnQuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBDZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9c2UuZ2V0KHRoaXMpLnNpemUrUmUodGhpcyxuKS5zaXplK09lKHRoaXMsbikuc2l6ZStPZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmd2UobiksdCs9c2UuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IGkgb2YgcnQuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPWkuc2l6ZTtmb3IoY29uc3QgaSBvZiBDZS5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9X24odCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IHhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTpudCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6aXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgWXQ9aGU7ZnVuY3Rpb24gZ3Mocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwmJiJtZXNzYWdlImluIHImJnR5cGVvZiByLm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIGJzKHIpe2lmKGdzKHIpKXJldHVybiByO3RyeXtyZXR1cm4gbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHIpKX1jYXRjaHtyZXR1cm4gbmV3IEVycm9yKFN0cmluZyhyKSl9fWZ1bmN0aW9uIFF0KHIpe3JldHVybiBicyhyKS5tZXNzYWdlfXZhciBLdD0ocj0+KHIucGlwZWxpbmVfZW5kZWQ9InBpcGVsaW5lX2VuZGVkIixyLnBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX2VuZGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfc3RhcnRlZD0icGlwZWxpbmVfc3RhcnRlZCIsci5waXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9yZXN0YXJ0ZWQ9InBpcGVsaW5lX3Jlc3RhcnRlZCIsci5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IiLHIpKShLdHx8e30pO2NvbnN0IHZzPTUwMCxFcz0uODtjbGFzcyBUcyBleHRlbmRzIFl0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmluZGV4Xz10LHRoaXMudXVpZF89aG4oKSx0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXz0wLHRoaXMudHJhbnNmb3JtZXJfPWUsdGhpcy5zaG91bGRTdG9wXz0hMSx0aGlzLmlzRmxhc2hlZF89ITEsdGhpcy5mcmFtZXNGcm9tU291cmNlXz0wLHRoaXMuZnBzXz0wLHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz0wLHRoaXMudmlkZW9IZWlnaHRfPTAsdGhpcy52aWRlb1dpZHRoXz0wLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMudHJhbnNmb3JtZXJUeXBlXz0iQ3VzdG9tIiwiZ2V0VHJhbnNmb3JtZXJUeXBlImluIGUmJih0aGlzLnRyYW5zZm9ybWVyVHlwZV89ZS5nZXRUcmFuc2Zvcm1lclR5cGUoKSk7Y29uc3Qgbj1uZXcgSCgpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJDcmVhdGUiKS5idWlsZCgpO1YucmVwb3J0KG4pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWV9YXN5bmMgc3RhcnQoZSl7aWYodGhpcy5jb250cm9sbGVyXz1lLHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQ9PSJmdW5jdGlvbiIpdHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0KGUpfWNhdGNoKHQpe2NvbnN0IG49bmV3IEgoKS5hY3Rpb24oIk1lZGlhVHJhbnNmb3JtZXIiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLnRyYW5zZm9ybWVyX3N0YXJ0KS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkVycm9yIikuZXJyb3IoUXQodCkpLmJ1aWxkKCk7Vi5yZXBvcnQobik7Y29uc3QgaT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6dCxmdW5jdGlvbjoic3RhcnQifTt0aGlzLmVtaXQoImVycm9yIixpKX19YXN5bmMgdHJhbnNmb3JtKGUsdCl7dmFyIG4saSxvLHM7aWYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPT09MCYmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz1EYXRlLm5vdygpKSxlIGluc3RhbmNlb2YgVmlkZW9GcmFtZSYmKHRoaXMudmlkZW9IZWlnaHRfPShuPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheUhlaWdodCkhPW51bGw/bjowLHRoaXMudmlkZW9XaWR0aF89KGk9ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5V2lkdGgpIT1udWxsP2k6MCksKyt0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNlIHRyeXthd2FpdCgocz0obz10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6cy5jYWxsKG8sZSx0KSksKyt0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXyx0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXz09PXZzJiZ0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnQoKX1jYXRjaChhKXtjb25zdCB1PW5ldyBIKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRXJyb3IiKS5lcnJvcihRdChhKSkuYnVpbGQoKTtWLnJlcG9ydCh1KTtjb25zdCBmPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIixmKX19YXN5bmMgZmx1c2goZSl7aWYodGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaD09ImZ1bmN0aW9uIiYmIXRoaXMuaXNGbGFzaGVkXyl7dGhpcy5pc0ZsYXNoZWRfPSEwO3RyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaChlKX1jYXRjaChuKXtjb25zdCBpPW5ldyBIKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy50cmFuc2Zvcm1lcl9mbHVzaCkudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJFcnJvciIpLmVycm9yKFF0KG4pKS5idWlsZCgpO1YucmVwb3J0KGkpO2NvbnN0IG89e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOm4sZnVuY3Rpb246ImZsdXNoIn07dGhpcy5lbWl0KCJlcnJvciIsbyl9fXRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydCgpO2NvbnN0IHQ9bmV3IEgoKS5hY3Rpb24oIk1lZGlhVHJhbnNmb3JtZXIiKS5ndWlkKHRoaXMudXVpZF8pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRGVsZXRlIikuYnVpbGQoKTtWLnJlcG9ydCh0KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCl7bGV0IGU9KERhdGUubm93KCktdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfKS8xZTMsdD10aGlzLmZyYW1lc0Zyb21Tb3VyY2VfL2Usbj10aGlzLmZyYW1lc1RyYW5zZm9ybWVkXy9lO2lmKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy50cmFja0V4cGVjdGVkUmF0ZV8qRXM+dCl7Y29uc3Qgbz17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dH19O3RoaXMuZW1pdCgid2FybiIsbyl9Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmZwcyh0KS50cmFuc2Zvcm1lZEZwcyhuKS5mcmFtZXNUcmFuc2Zvcm1lZCh0aGlzLmZyYW1lc1RyYW5zZm9ybWVkXykuZ3VpZCh0aGlzLnV1aWRfKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52aWRlb0hlaWdodCh0aGlzLnZpZGVvSGVpZ2h0XykudmlkZW9XaWR0aCh0aGlzLnZpZGVvV2lkdGhfKS52YXJpYXRpb24oIlFvUyIpLmJ1aWxkKCk7Vi5yZXBvcnQoaSksdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy5mcmFtZXNGcm9tU291cmNlXz0wLHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfPTB9fWNsYXNzIEFzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBUcyhlW3RdLHQpO24ub24oImVycm9yIixpPT57dGhpcy5lbWl0KCJlcnJvciIsaSl9KSxuLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IGkgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKGkpKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBpPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2gobz0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsbyl9KSxhd2FpdCB0LmFib3J0KGkpLGF3YWl0IG4uY2FuY2VsKGkpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyB3cyBleHRlbmRzIFl0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnV1aWRfPWhuKCksdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Y29uc3QgZT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLnZhcmlhdGlvbigiQ3JlYXRlIikuYnVpbGQoKTtWLnJlcG9ydChlKX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUsdCl7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89dCx0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoKGUsdCk9PntpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUpLnZhcmlhdGlvbigiRXJyb3IiKS5idWlsZCgpO1YucmVwb3J0KGkpLHQoIltNZWRpYVByb2Nlc3Nvcl0gTmVlZCB0byBzZXQgdHJhbnNmb3JtZXJzLiIpO3JldHVybn1pZighdGhpcy5yZWFkYWJsZV8pe2NvbnN0IGk9bmV3IEgoKS5hY3Rpb24oIk1lZGlhUHJvY2Vzc29yIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLmVycm9ycy5yZWFkYWJsZV9udWxsKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtWLnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIFJlYWRhYmxlIGlzIG51bGwuIik7cmV0dXJufWlmKCF0aGlzLndyaXRhYmxlXyl7Y29uc3QgaT1uZXcgSCgpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UobmUuZXJyb3JzLndyaXRhYmxlX251bGwpLnZhcmlhdGlvbigiRXJyb3IiKS5idWlsZCgpO1YucmVwb3J0KGkpLHQoIltNZWRpYVByb2Nlc3Nvcl0gV3JpdGFibGUgaXMgbnVsbC4iKTtyZXR1cm59bGV0IG49ITE7dGhpcy5waXBlbGluZV8mJihuPSEwLHRoaXMucGlwZWxpbmVfLmNsZWFyTGlzdGVuZXJzKCksdGhpcy5waXBlbGluZV8uZGVzdHJveSgpKSx0aGlzLnBpcGVsaW5lXz1uZXcgQXModGhpcy50cmFuc2Zvcm1lcnNfKSx0aGlzLnBpcGVsaW5lXy5vbigid2FybiIsaT0+e3RoaXMuZW1pdCgid2FybiIsaSl9KSx0aGlzLnBpcGVsaW5lXy5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJwaXBlbGluZUluZm8iLGk9PntuJiYoaT09PSJwaXBlbGluZV9zdGFydGVkIj9pPUt0LnBpcGVsaW5lX3Jlc3RhcnRlZDppPT09InBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciImJihpPUt0LnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yKSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLGkpfSksdGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyksdGhpcy5waXBlbGluZV8uc3RhcnQodGhpcy5yZWFkYWJsZV8sdGhpcy53cml0YWJsZV8pLnRoZW4oKCk9PntlKCl9KS5jYXRjaChpPT57dChpKX0pfSl9c2V0VHJhbnNmb3JtZXJzKGUpe2NvbnN0IHQ9bmV3IEgoKS5hY3Rpb24oIk1lZGlhUHJvY2Vzc29yIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKG5lLnVwZGF0ZXMudHJhbnNmb3JtZXJfbmV3KS52YXJpYXRpb24oIlVwZGF0ZSIpLmJ1aWxkKCk7cmV0dXJuIFYucmVwb3J0KHQpLHRoaXMudHJhbnNmb3JtZXJzXz1lLHRoaXMucmVhZGFibGVfJiZ0aGlzLndyaXRhYmxlXz90aGlzLnRyYW5zZm9ybUludGVybmFsKCk6UHJvbWlzZS5yZXNvbHZlKCl9ZGVzdHJveSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKTtjb25zdCB0PW5ldyBIKCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykudmFyaWF0aW9uKCJEZWxldGUiKS5idWlsZCgpO1YucmVwb3J0KHQpLGUoKX0pfX12YXIgc3Q9KHI9PihyLkxvdz0iTG93IixyLkhpZ2g9IkhpZ2giLHIpKShzdHx8e30pO2FzeW5jIGZ1bmN0aW9uIGduKHIpe3JldHVybiBuZXcgUHJvbWlzZShlPT57c2V0VGltZW91dCgoKT0+e2UoKX0scil9KX1jbGFzcyBSc3tjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImNvbnRleHQiKTtwKHRoaXMsImV4dGVuc2lvbiIpO3AodGhpcywicXVlcmllcyIsW10pO3AodGhpcywiYWN0aXZlUXVlcnkiKTt0aGlzLmNvbnRleHQ9ZSx0aGlzLmV4dGVuc2lvbj1lLmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5X3dlYmdsMiIpfXN0YXJ0KCl7fXN0b3AoKXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCl9cHVzaENvbnRleHQoZSl7dGhpcy5jcmVhdGVRdWVyeSgiUFVTSCIsZSl9cG9wQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQT1AiLGUpfWNyZWF0ZVF1ZXJ5KGUsdCl7dGhpcy5hY3RpdmVRdWVyeSYmdGhpcy5jb250ZXh0LmVuZFF1ZXJ5KHRoaXMuZXh0ZW5zaW9uLlRJTUVfRUxBUFNFRF9FWFQpLHRoaXMuYWN0aXZlUXVlcnk9dGhpcy5jb250ZXh0LmNyZWF0ZVF1ZXJ5KCksdGhpcy5jb250ZXh0LmJlZ2luUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCx0aGlzLmFjdGl2ZVF1ZXJ5KSx0aGlzLnF1ZXJpZXMucHVzaCh7bmFtZTp0LGFjdGlvbjplLHF1ZXJ5OnRoaXMuYWN0aXZlUXVlcnl9KX1hc3luYyBnZXRSZXNvbHZlZFF1ZXJpZXMoKXtjb25zdCBlPShhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5xdWVyaWVzXS5tYXAodD0+dGhpcy5yZXNvbHZlUXVlcnkodCkpKSkuZmlsdGVyKHQ9PnQpO2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7Kyt0KWVbdF0udGltZXN0YW1wKz1lW3QtMV0uZHVyYXRpb24rZVt0LTFdLnRpbWVzdGFtcDtyZXR1cm4gZX1hc3luYyByZXNvbHZlUXVlcnkoZSl7aWYoIWF3YWl0IHRoaXMuYXdhaXRRdWVyeUF2YWlsYWJsZShlKSl7Y29uc29sZS5sb2coIlVuYXdhaXRhYmxlIHF1ZXJ5IixlKTtyZXR1cm59aWYodGhpcy5jb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmV4dGVuc2lvbi5HUFVfRElTSk9JTlRfRVhUKSl7Y29uc29sZS5sb2coIkRpc2pvaW50ZWQgcXVlcnkiLGUpO3JldHVybn1yZXR1cm57Li4uZSxkdXJhdGlvbjp0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUKSx0aW1lc3RhbXA6MH19YXN5bmMgYXdhaXRRdWVyeUF2YWlsYWJsZShlKXtmb3IobGV0IHQ9MDt0PDEwOysrdCl7aWYodGhpcy5jb250ZXh0LmdldFF1ZXJ5UGFyYW1ldGVyKGUucXVlcnksdGhpcy5jb250ZXh0LlFVRVJZX1JFU1VMVF9BVkFJTEFCTEUpKXJldHVybiBlO2F3YWl0IGduKDIwMCl9fX0vKiBAbGljZW5zZSB0d2dsLmpzIDUuMi4wIENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgSnQ9NTEyMCxOZT01MTIxLFp0PTUxMjIsZXI9NTEyMyx0cj01MTI0LHJyPTUxMjUsbnI9NTEyNixTcz0zMjgxOSxJcz0zMjgyMCxGcz0zMzYzNSxQcz01MTMxLERzPTMzNjQwLE1zPTM1ODk5LENzPTM1OTAyLE9zPTM2MjY5LE5zPTM0MDQyLGJuPXt9O3tjb25zdCByPWJuO3JbSnRdPUludDhBcnJheSxyW05lXT1VaW50OEFycmF5LHJbWnRdPUludDE2QXJyYXkscltlcl09VWludDE2QXJyYXksclt0cl09SW50MzJBcnJheSxyW3JyXT1VaW50MzJBcnJheSxyW25yXT1GbG9hdDMyQXJyYXkscltTc109VWludDE2QXJyYXkscltJc109VWludDE2QXJyYXkscltGc109VWludDE2QXJyYXkscltQc109VWludDE2QXJyYXkscltEc109VWludDMyQXJyYXkscltNc109VWludDMyQXJyYXkscltDc109VWludDMyQXJyYXkscltPc109VWludDMyQXJyYXkscltOc109VWludDMyQXJyYXl9ZnVuY3Rpb24gaXIocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gSnQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gTmU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gZXI7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gcnI7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gdm4ocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gSnQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gTmU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gZXI7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gcnI7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gRW4ocil7Y29uc3QgZT1ibltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IGF0PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24gVG4oLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBBbj1uZXcgTWFwO2Z1bmN0aW9uIHV0KHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1Bbi5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsQW4uc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBVcyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXI8InUiJiZ1dChlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIEJzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlcjwidSImJnV0KGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gb3IocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMVGV4dHVyZTwidSImJnV0KGUsIldlYkdMVGV4dHVyZSIpfWZ1bmN0aW9uIGtzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFNhbXBsZXI8InUiJiZ1dChlLCJXZWJHTFNhbXBsZXIiKX1jb25zdCB3bj0zNTA0NCxwZT0zNDk2MixMcz0zNDk2Mywkcz0zNDY2MCxHcz01MTIwLHpzPTUxMjEsSHM9NTEyMixWcz01MTIzLFdzPTUxMjQsanM9NTEyNSxSbj01MTI2LFNuPXthdHRyaWJQcmVmaXg6IiJ9O2Z1bmN0aW9uIHFzKHIsZSx0LG4saSl7ci5iaW5kQnVmZmVyKGUsdCksci5idWZmZXJEYXRhKGUsbixpfHx3bil9ZnVuY3Rpb24gSW4ocixlLHQsbil7aWYoVXMocixlKSlyZXR1cm4gZTt0PXR8fHBlO2NvbnN0IGk9ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gcXMocix0LGksZSxuKSxpfWZ1bmN0aW9uIEZuKHIpe3JldHVybiByPT09ImluZGljZXMifWZ1bmN0aW9uIFhzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBZcyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgUXM9L2Nvb3JkfHRleHR1cmUvaSxLcz0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gSnMocixlKXtsZXQgdDtpZihRcy50ZXN0KHIpP3Q9MjpLcy50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiBacyhyLGUsdCl7cmV0dXJuIHIubnVtQ29tcG9uZW50c3x8ci5zaXplfHxKcyhlLHR8fFlzKHIpLmxlbmd0aCl9ZnVuY3Rpb24gUG4ocixlKXtpZihhdChyKSlyZXR1cm4gcjtpZihhdChyLmRhdGEpKXJldHVybiByLmRhdGE7QXJyYXkuaXNBcnJheShyKSYmKHI9e2RhdGE6cn0pO2xldCB0PXIudHlwZT9zcihyLnR5cGUpOnZvaWQgMDtyZXR1cm4gdHx8KEZuKGUpP3Q9VWludDE2QXJyYXk6dD1GbG9hdDMyQXJyYXkpLG5ldyB0KHIuZGF0YSl9ZnVuY3Rpb24gZWEocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9yOnI/dm4ocik6Um59ZnVuY3Rpb24gc3Iocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIj9FbihyKTpyfHxGbG9hdDMyQXJyYXl9ZnVuY3Rpb24gdGEocixlKXtyZXR1cm57YnVmZmVyOmUuYnVmZmVyLG51bVZhbHVlczoyKjMqNCx0eXBlOmVhKGUudHlwZSksYXJyYXlUeXBlOnNyKGUudHlwZSl9fWZ1bmN0aW9uIHJhKHIsZSl7Y29uc3QgdD1lLmRhdGF8fGUsbj1zcihlLnR5cGUpLGk9dCpuLkJZVEVTX1BFUl9FTEVNRU5ULG89ci5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gci5iaW5kQnVmZmVyKHBlLG8pLHIuYnVmZmVyRGF0YShwZSxpLGUuZHJhd1R5cGV8fHduKSx7YnVmZmVyOm8sbnVtVmFsdWVzOnQsdHlwZTp2bihuKSxhcnJheVR5cGU6bn19ZnVuY3Rpb24gbmEocixlLHQpe2NvbnN0IG49UG4oZSx0KTtyZXR1cm57YXJyYXlUeXBlOm4uY29uc3RydWN0b3IsYnVmZmVyOkluKHIsbix2b2lkIDAsZS5kcmF3VHlwZSksdHlwZTppcihuKSxudW1WYWx1ZXM6MH19ZnVuY3Rpb24gaWEocixlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCFGbihuKSl7Y29uc3QgaT1lW25dLG89aS5hdHRyaWJ8fGkubmFtZXx8aS5hdHRyaWJOYW1lfHxTbi5hdHRyaWJQcmVmaXgrbjtpZihpLnZhbHVlKXtpZighQXJyYXkuaXNBcnJheShpLnZhbHVlKSYmIWF0KGkudmFsdWUpKXRocm93IG5ldyBFcnJvcigiYXJyYXkudmFsdWUgaXMgbm90IGFycmF5IG9yIHR5cGVkYXJyYXkiKTt0W29dPXt2YWx1ZTppLnZhbHVlfX1lbHNle2xldCBzO2kuYnVmZmVyJiZpLmJ1ZmZlciBpbnN0YW5jZW9mIFdlYkdMQnVmZmVyP3M9dGE6dHlwZW9mIGk9PSJudW1iZXIifHx0eXBlb2YgaS5kYXRhPT0ibnVtYmVyIj9zPXJhOnM9bmE7Y29uc3R7YnVmZmVyOmEsdHlwZTp1LG51bVZhbHVlczpmLGFycmF5VHlwZTpjfT1zKHIsaSxuKSxkPWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOlhzKGMpLHk9WnMoaSxuLGYpO3Rbb109e2J1ZmZlcjphLG51bUNvbXBvbmVudHM6eSx0eXBlOnUsbm9ybWFsaXplOmQsc3RyaWRlOmkuc3RyaWRlfHwwLG9mZnNldDppLm9mZnNldHx8MCxkaXZpc29yOmkuZGl2aXNvcj09PXZvaWQgMD92b2lkIDA6aS5kaXZpc29yLGRyYXdUeXBlOmkuZHJhd1R5cGV9fX19KSxyLmJpbmRCdWZmZXIocGUsbnVsbCksdH1mdW5jdGlvbiBvYShyLGUpe3JldHVybiBlPT09R3N8fGU9PT16cz8xOmU9PT1Ic3x8ZT09PVZzPzI6ZT09PVdzfHxlPT09anN8fGU9PT1Sbj80OjB9Y29uc3QgYXI9WyJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImFfcG9zaXRpb24iXTtmdW5jdGlvbiBzYShyLGUpe2xldCB0LG47Zm9yKG49MDtuPGFyLmxlbmd0aCYmKHQ9YXJbbl0sISh0IGluIGV8fCh0PVNuLmF0dHJpYlByZWZpeCt0LHQgaW4gZSkpKTsrK24pO249PT1hci5sZW5ndGgmJih0PU9iamVjdC5rZXlzKGUpWzBdKTtjb25zdCBpPWVbdF07aWYoIWkuYnVmZmVyKXJldHVybiAxO3IuYmluZEJ1ZmZlcihwZSxpLmJ1ZmZlcik7Y29uc3Qgbz1yLmdldEJ1ZmZlclBhcmFtZXRlcihwZSwkcyk7ci5iaW5kQnVmZmVyKHBlLG51bGwpO2NvbnN0IHM9b2EocixpLnR5cGUpLGE9by9zLHU9aS5udW1Db21wb25lbnRzfHxpLnNpemUsZj1hL3U7aWYoZiUxIT09MCl0aHJvdyBuZXcgRXJyb3IoYG51bUNvbXBvbmVudHMgJHt1fSBub3QgY29ycmVjdCBmb3IgbGVuZ3RoICR7bGVuZ3RofWApO3JldHVybiBmfWZ1bmN0aW9uIGFhKHIsZSx0KXtjb25zdCBuPWlhKHIsZSksaT1PYmplY3QuYXNzaWduKHt9LHR8fHt9KTtpLmF0dHJpYnM9T2JqZWN0LmFzc2lnbih7fSx0P3QuYXR0cmliczp7fSxuKTtjb25zdCBvPWUuaW5kaWNlcztpZihvKXtjb25zdCBzPVBuKG8sImluZGljZXMiKTtpLmluZGljZXM9SW4ocixzLExzKSxpLm51bUVsZW1lbnRzPXMubGVuZ3RoLGkuZWxlbWVudFR5cGU9aXIocyl9ZWxzZSBpLm51bUVsZW1lbnRzfHwoaS5udW1FbGVtZW50cz1zYShyLGkuYXR0cmlicykpO3JldHVybiBpfWZ1bmN0aW9uIFVlKHIpe3JldHVybiEhci50ZXhTdG9yYWdlMkR9Y29uc3QgRG49ZnVuY3Rpb24oKXtjb25zdCByPXt9LGU9e307ZnVuY3Rpb24gdChuKXtjb25zdCBpPW4uY29uc3RydWN0b3IubmFtZTtpZighcltpXSl7Zm9yKGNvbnN0IG8gaW4gbilpZih0eXBlb2YgbltvXT09Im51bWJlciIpe2NvbnN0IHM9ZVtuW29dXTtlW25bb11dPXM/YCR7c30gfCAke299YDpvfXJbaV09ITB9fXJldHVybiBmdW5jdGlvbihpLG8pe3JldHVybiB0KGkpLGVbb118fCh0eXBlb2Ygbz09Im51bWJlciI/YDB4JHtvLnRvU3RyaW5nKDE2KX1gOm8pfX0oKSxhZT17dGV4dHVyZUNvbG9yOm5ldyBVaW50OEFycmF5KFsxMjgsMTkyLDI1NSwyNTVdKSx0ZXh0dXJlT3B0aW9uczp7fSxjcm9zc09yaWdpbjp2b2lkIDB9LEJlPWF0LE1uPWZ1bmN0aW9uKCl7bGV0IHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHI9cnx8KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTpudWxsKSxyfX0oKSxDbj02NDA2LFo9NjQwNyxGPTY0MDgsT249NjQwOSxObj02NDEwLGtlPTY0MDIsVW49MzQwNDEsY3Q9MzMwNzEsdWE9OTcyOCxjYT05NzI5LHVlPTM1NTMsY2U9MzQwNjcseWU9MzI4NzksX2U9MzU4NjYsdXI9MzQwNjksZmE9MzQwNzAsbGE9MzQwNzEsZGE9MzQwNzIsbWE9MzQwNzMsaGE9MzQwNzQsY3I9MTAyNDEsZnI9MTAyNDAsZnQ9MTAyNDIsbHQ9MTAyNDMsQm49MzI4ODIscGE9MzMwODIseWE9MzMwODMsX2E9MzMwODQseGE9MzMwODUsbHI9MzMxNyxrbj0zMzE0LExuPTMyODc4LCRuPTMzMTYsR249MzMxNSx6bj0zMjg3NyxnYT0zNzQ0MyxiYT0zNzQ0MSx2YT0zNzQ0MCxFYT0zMzMyMSxUYT0zNjc1NixBYT0zMzMyNSx3YT0zMzMyNixSYT0zMzMzMCxTYT0zMzMyOSxJYT0zMzMzOCxGYT0zMzMzNyxQYT0zMzM0MCxEYT0zMzMzOSxNYT0zMzMyMyxDYT0zNjc1NyxPYT0zMzMyNyxOYT0zMzMyOCxVYT0zMzMzNixCYT0zMzMzNSxrYT0zMzMzMixMYT0zMzMzMSwkYT0zMzMzNCxHYT0zMzMzMyx6YT0zMjg0OSxIYT0zNTkwNSxWYT0zNjE5NCxXYT0zNjc1OCxqYT0zNTg5OCxxYT0zNTkwMSxYYT0zNDg0MyxZYT0zNDgzNyxRYT0zNjIyMSxLYT0zNjIzOSxKYT0zNjIxNSxaYT0zNjIzMyxldT0zNjIwOSx0dT0zNjIyNyxydT0zMjg1NixudT0zNTkwNyxpdT0zNjc1OSxvdT0zMjg1NSxzdT0zMjg1NCxhdT0zMjg1Nyx1dT0zNDg0MixjdT0zNDgzNixmdT0zNjIyMCxsdT0zNjIzOCxkdT0zNjk3NSxtdT0zNjIxNCxodT0zNjIzMixwdT0zNjIyNix5dT0zNjIwOCxfdT0zMzE4OSx4dT0zMzE5MCxndT0zNjAxMixidT0zNjAxMyx2dT0zNTA1NixmZT01MTIwLEk9NTEyMSxkdD01MTIyLFNlPTUxMjMsbXQ9NTEyNCx4ZT01MTI1LEI9NTEyNixIbj0zMjgxOSxWbj0zMjgyMCxXbj0zMzYzNSxqPTUxMzEsTGU9MzYxOTMsZHI9MzM2NDAsRXU9MzU4OTksVHU9MzU5MDIsQXU9MzYyNjksd3U9MzQwNDIsaHQ9MzMzMTksSWU9MzMzMjAscHQ9NjQwMyxGZT0zNjI0NCxQZT0zNjI0OCxnZT0zNjI0OTtsZXQgbXI7ZnVuY3Rpb24geXQocil7aWYoIW1yKXtjb25zdCBlPXt9O2VbQ25dPXt0ZXh0dXJlRm9ybWF0OkNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEsMiwyLDRdLHR5cGU6W0ksaixMZSxCXX0sZVtPbl09e3RleHR1cmVGb3JtYXQ6T24sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbSSxqLExlLEJdfSxlW05uXT17dGV4dHVyZUZvcm1hdDpObixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyLDQsNCw4XSx0eXBlOltJLGosTGUsQl19LGVbWl09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszLDYsNiwxMiwyXSx0eXBlOltJLGosTGUsQixXbl19LGVbRl09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDgsOCwxNiwyLDJdLHR5cGU6W0ksaixMZSxCLEhuLFZuXX0sZVtrZV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOlt4ZSxTZV19LGVbRWFdPXt0ZXh0dXJlRm9ybWF0OnB0LGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW1RhXT17dGV4dHVyZUZvcm1hdDpwdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltmZV19LGVbQWFdPXt0ZXh0dXJlRm9ybWF0OnB0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMl0sdHlwZTpbQixqXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6cHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbQl19LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W0ldfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpGZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxXSx0eXBlOltmZV19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W1NlXX0sZVtMYV09e3RleHR1cmVGb3JtYXQ6RmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbZHRdfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpGZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbR2FdPXt0ZXh0dXJlRm9ybWF0OkZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W210XX0sZVtNYV09e3RleHR1cmVGb3JtYXQ6aHQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbQ2FdPXt0ZXh0dXJlRm9ybWF0Omh0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2ZlXX0sZVtPYV09e3RleHR1cmVGb3JtYXQ6aHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbOCw0XSx0eXBlOltCLGpdfSxlW05hXT17dGV4dHVyZUZvcm1hdDpodCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltCXX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbSV19LGVbQmFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzJdLHR5cGU6W2ZlXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU2VdfSxlW0ZhXT17dGV4dHVyZUZvcm1hdDpJZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltkdF19LGVbUGFdPXt0ZXh0dXJlRm9ybWF0OkllLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W3hlXX0sZVtEYV09e3RleHR1cmVGb3JtYXQ6SWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbbXRdfSxlW3phXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0hhXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW1ZhXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsMl0sdHlwZTpbSSxXbl19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OlosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbZmVdfSxlW2phXT17dGV4dHVyZUZvcm1hdDpaLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbQixqLEV1XX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2LDRdLHR5cGU6W0IsaixUdV19LGVbWGFdPXt0ZXh0dXJlRm9ybWF0OlosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNl0sdHlwZTpbQixqXX0sZVtZYV09e3RleHR1cmVGb3JtYXQ6Wixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbQl19LGVbUWFdPXt0ZXh0dXJlRm9ybWF0OlBlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W0ldfSxlW0thXT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltmZV19LGVbSmFdPXt0ZXh0dXJlRm9ybWF0OlBlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzZdLHR5cGU6W1NlXX0sZVtaYV09e3RleHR1cmVGb3JtYXQ6UGUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbZHRdfSxlW2V1XT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbeGVdfSxlW3R1XT17dGV4dHVyZUZvcm1hdDpQZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxMl0sdHlwZTpbbXRdfSxlW3J1XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW251XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW2l1XT17dGV4dHVyZUZvcm1hdDpGLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2ZlXX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDIsNF0sdHlwZTpbSSxWbixkcl19LGVbc3VdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltJLEhuXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltkcl19LGVbdXVdPXt0ZXh0dXJlRm9ybWF0OkYsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTYsOF0sdHlwZTpbQixqXX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6Rixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsxNl0sdHlwZTpbQl19LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0ldfSxlW2x1XT17dGV4dHVyZUZvcm1hdDpnZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltmZV19LGVbZHVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2RyXX0sZVttdV09e3RleHR1cmVGb3JtYXQ6Z2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbU2VdfSxlW2h1XT17dGV4dHVyZUZvcm1hdDpnZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltkdF19LGVbcHVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlttdF19LGVbeXVdPXt0ZXh0dXJlRm9ybWF0OmdlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOlt4ZV19LGVbX3VdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzIsNF0sdHlwZTpbU2UseGVdfSxlW3h1XT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt4ZV19LGVbZ3VdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0JdfSxlW3Z1XT17dGV4dHVyZUZvcm1hdDpVbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOlt3dV19LGVbYnVdPXt0ZXh0dXJlRm9ybWF0OlVuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0F1XX0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtjb25zdCBuPWVbdF07bi5ieXRlc1BlckVsZW1lbnRNYXA9e30sbi5ieXRlc1BlckVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihpLG8pe2NvbnN0IHM9bi50eXBlW29dO24uYnl0ZXNQZXJFbGVtZW50TWFwW3NdPWl9KX0pLG1yPWV9cmV0dXJuIG1yW3JdfWZ1bmN0aW9uIFJ1KHIsZSl7Y29uc3QgdD15dChyKTtpZighdCl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7Y29uc3Qgbj10LmJ5dGVzUGVyRWxlbWVudE1hcFtlXTtpZihuPT09dm9pZCAwKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gbn1mdW5jdGlvbiAkZShyKXtjb25zdCBlPXl0KHIpO2lmKCFlKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm57Zm9ybWF0OmUudGV4dHVyZUZvcm1hdCx0eXBlOmUudHlwZVswXX19ZnVuY3Rpb24gam4ocil7cmV0dXJuKHImci0xKT09PTB9ZnVuY3Rpb24gU3UocixlLHQsbil7aWYoIVVlKHIpKXJldHVybiBqbihlKSYmam4odCk7Y29uc3QgaT15dChuKTtpZighaSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGkuY29sb3JSZW5kZXJhYmxlJiZpLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIEl1KHIpe2NvbnN0IGU9eXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBlLnRleHR1cmVGaWx0ZXJhYmxlfWZ1bmN0aW9uIEZ1KHIsZSx0KXtyZXR1cm4gQmUoZSk/aXIoZSk6dHx8SX1mdW5jdGlvbiBfdChyLGUsdCxuLGkpe2lmKGklMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7aWYoIXQmJiFuKXtjb25zdCBvPU1hdGguc3FydChpLyhlPT09Y2U/NjoxKSk7byUxPT09MD8odD1vLG49byk6KHQ9aSxuPTEpfWVsc2UgaWYobil7aWYoIXQmJih0PWkvbix0JTEpKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMifWVsc2UgaWYobj1pL3QsbiUxKXRocm93ImNhbid0IGd1ZXNzIGRpbWVuc2lvbnMiO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBEZShyLGUpe2UuY29sb3JzcGFjZUNvbnZlcnNpb24hPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoZ2EsZS5jb2xvcnNwYWNlQ29udmVyc2lvbiksZS5wcmVtdWx0aXBseUFscGhhIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGJhLGUucHJlbXVsdGlwbHlBbHBoYSksZS5mbGlwWSE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh2YSxlLmZsaXBZKX1mdW5jdGlvbiBxbihyKXtyLnBpeGVsU3RvcmVpKGxyLDQpLFVlKHIpJiYoci5waXhlbFN0b3JlaShrbiwwKSxyLnBpeGVsU3RvcmVpKExuLDApLHIucGl4ZWxTdG9yZWkoJG4sMCksci5waXhlbFN0b3JlaShHbiwwKSxyLnBpeGVsU3RvcmVpKHpuLDApKX1mdW5jdGlvbiBQdShyLGUsdCxuKXtuLm1pbk1hZyYmKHQuY2FsbChyLGUsY3Isbi5taW5NYWcpLHQuY2FsbChyLGUsZnIsbi5taW5NYWcpKSxuLm1pbiYmdC5jYWxsKHIsZSxjcixuLm1pbiksbi5tYWcmJnQuY2FsbChyLGUsZnIsbi5tYWcpLG4ud3JhcCYmKHQuY2FsbChyLGUsZnQsbi53cmFwKSx0LmNhbGwocixlLGx0LG4ud3JhcCksKGU9PT15ZXx8a3MocixlKSkmJnQuY2FsbChyLGUsQm4sbi53cmFwKSksbi53cmFwUiYmdC5jYWxsKHIsZSxCbixuLndyYXBSKSxuLndyYXBTJiZ0LmNhbGwocixlLGZ0LG4ud3JhcFMpLG4ud3JhcFQmJnQuY2FsbChyLGUsbHQsbi53cmFwVCksbi5taW5Mb2QmJnQuY2FsbChyLGUscGEsbi5taW5Mb2QpLG4ubWF4TG9kJiZ0LmNhbGwocixlLHlhLG4ubWF4TG9kKSxuLmJhc2VMZXZlbCYmdC5jYWxsKHIsZSxfYSxuLmJhc2VMZXZlbCksbi5tYXhMZXZlbCYmdC5jYWxsKHIsZSx4YSxuLm1heExldmVsKX1mdW5jdGlvbiBYbihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8dWU7ci5iaW5kVGV4dHVyZShuLGUpLFB1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24gRHUocil7cmV0dXJuIHI9cnx8YWUudGV4dHVyZUNvbG9yLEJlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gaHIocixlLHQsbixpLG8pe3Q9dHx8YWUudGV4dHVyZU9wdGlvbnMsbz1vfHxGO2NvbnN0IHM9dC50YXJnZXR8fHVlO2lmKG49bnx8dC53aWR0aCxpPWl8fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxTdShyLG4saSxvKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1JdShvKT9jYTp1YTtyLnRleFBhcmFtZXRlcmkocyxjcixhKSxyLnRleFBhcmFtZXRlcmkocyxmcixhKSxyLnRleFBhcmFtZXRlcmkocyxmdCxjdCksci50ZXhQYXJhbWV0ZXJpKHMsbHQsY3QpfX1mdW5jdGlvbiBHZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBwcihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W3VyLGZhLGxhLGRhLG1hLGhhXX1mdW5jdGlvbiB5cihyLGUpe2NvbnN0IG49cHIocixlKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm57ZmFjZTppLG5keDpvfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaS5mYWNlLW8uZmFjZX0pLG59ZnVuY3Rpb24gWW4ocixlLHQsbil7bj1ufHxhZS50ZXh0dXJlT3B0aW9ucztjb25zdCBpPW4udGFyZ2V0fHx1ZSxvPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEYsZj0kZSh1KSxjPW4uZm9ybWF0fHxmLmZvcm1hdCxkPW4udHlwZXx8Zi50eXBlO2lmKERlKHIsbiksci5iaW5kVGV4dHVyZShpLGUpLGk9PT1jZSl7Y29uc3QgeT10LndpZHRoLF89dC5oZWlnaHQ7bGV0IG0seDtpZih5LzY9PT1fKW09Xyx4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihfLzY9PT15KW09eSx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZih5LzM9PT1fLzIpbT15LzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoeS8yPT09Xy8zKW09eS8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCB2PU1uKCk7dj8odi5jYW52YXMud2lkdGg9bSx2LmNhbnZhcy5oZWlnaHQ9bSxzPW0sYT1tLHlyKHIsbikuZm9yRWFjaChmdW5jdGlvbihiKXtjb25zdCBBPXhbYi5uZHgqMiswXSptLFA9eFtiLm5keCoyKzFdKm07di5kcmF3SW1hZ2UodCxBLFAsbSxtLDAsMCxtLG0pLHIudGV4SW1hZ2UyRChiLmZhY2Usbyx1LGMsZCx2LmNhbnZhcyl9KSx2LmNhbnZhcy53aWR0aD0xLHYuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1tLGE9bSx5cihyLG4pLmZvckVhY2goZnVuY3Rpb24oYil7Y29uc3QgQT14W2IubmR4KjIrMF0qbSxQPXhbYi5uZHgqMisxXSptO3IudGV4SW1hZ2UyRChiLmZhY2Usbyx1LG0sbSwwLGMsZCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEEsUCxtLG0se3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oQyl7RGUocixuKSxyLmJpbmRUZXh0dXJlKGksZSksci50ZXhJbWFnZTJEKGIuZmFjZSxvLHUsYyxkLEMpLEdlKG4pJiZocihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKGk9PT15ZXx8aT09PV9lKXtjb25zdCB5PU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLF89TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksbT1fL3k7aWYobSUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1fPzE6MCx2PXQuaGVpZ2h0PT09Xz8xOjA7ci5waXhlbFN0b3JlaShsciwxKSxyLnBpeGVsU3RvcmVpKGtuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoTG4sMCksci5waXhlbFN0b3JlaSh6biwwKSxyLnRleEltYWdlM0QoaSxvLHUseSx5LHksMCxjLGQsbnVsbCk7Zm9yKGxldCBiPTA7YjxtOysrYil7Y29uc3QgQT1iKnkqeCxQPWIqeSp2O3IucGl4ZWxTdG9yZWkoJG4sQSksci5waXhlbFN0b3JlaShHbixQKSxyLnRleFN1YkltYWdlM0QoaSxvLDAsMCxiLHkseSwxLGMsZCx0KX1xbihyKX1lbHNlIHIudGV4SW1hZ2UyRChpLG8sdSxjLGQsdCk7R2UobikmJmhyKHIsZSxuLHMsYSx1KSxYbihyLGUsbil9ZnVuY3Rpb24gemUoKXt9ZnVuY3Rpb24gTXUocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIEN1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFNdShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIE91KHIsZSx0KXt0PXR8fHplO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOmFlLmNyb3NzT3JpZ2luLGU9Q3UocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBpPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsbyksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LG89ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7VG4odSksdCh1LG4pLGkoKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxpKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBpLG87Y29uc3Qgcz1mdW5jdGlvbigpe3QoaSxvKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe289dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7aT11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gUW4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBfcihyLGUsdCl7cmV0dXJuIFFuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6T3UocixlLHQpfWZ1bmN0aW9uIHhyKHIsZSx0KXt0PXR8fGFlLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fHVlO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IGk9RHUodC5jb2xvcik7aWYobj09PWNlKWZvcihsZXQgbz0wO288NjsrK28pci50ZXhJbWFnZTJEKHVyK28sMCxGLDEsMSwwLEYsSSxpKTtlbHNlIG49PT15ZXx8bj09PV9lP3IudGV4SW1hZ2UzRChuLDAsRiwxLDEsMSwwLEYsSSxpKTpyLnRleEltYWdlMkQobiwwLEYsMSwxLDAsRixJLGkpfWZ1bmN0aW9uIE51KHIsZSx0LG4pe3JldHVybiBuPW58fHplLHQ9dHx8YWUudGV4dHVyZU9wdGlvbnMseHIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxfcih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKG8scyl7bz9uKG8sZSxzKTooWW4ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gVXUocixlLHQsbil7bj1ufHx6ZTtjb25zdCBpPXQuc3JjO2lmKGkubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBvPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8RixhPSRlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxJLGM9dC50YXJnZXR8fHVlO2lmKGMhPT1jZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjt4cihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBkPTY7Y29uc3QgeT1bXSxfPXByKHIsdCk7bGV0IG07ZnVuY3Rpb24geCh2KXtyZXR1cm4gZnVuY3Rpb24oYixBKXstLWQsYj95LnB1c2goYik6QS53aWR0aCE9PUEuaGVpZ2h0P3kucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrQS5zcmMpOihEZShyLHQpLHIuYmluZFRleHR1cmUoYyxlKSxkPT09NT9wcigpLmZvckVhY2goZnVuY3Rpb24oUCl7ci50ZXhJbWFnZTJEKFAsbyxzLHUsZixBKX0pOnIudGV4SW1hZ2UyRCh2LG8scyx1LGYsQSksR2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoYykpLGQ9PT0wJiZuKHkubGVuZ3RoP3k6dm9pZCAwLGUsbSl9fW09aS5tYXAoZnVuY3Rpb24odixiKXtyZXR1cm4gX3Iodix0LmNyb3NzT3JpZ2luLHgoX1tiXSkpfSl9ZnVuY3Rpb24gQnUocixlLHQsbil7bj1ufHx6ZTtjb25zdCBpPXQuc3JjLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz0kZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8SSxmPXQudGFyZ2V0fHxfZTtpZihmIT09eWUmJmYhPT1fZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO3hyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGM9aS5sZW5ndGg7Y29uc3QgZD1bXTtsZXQgeTtjb25zdCBfPXQubGV2ZWx8fDA7bGV0IG09dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IHY9aS5sZW5ndGg7bGV0IGI9ITA7ZnVuY3Rpb24gQShQKXtyZXR1cm4gZnVuY3Rpb24oQyxXKXtpZigtLWMsQylkLnB1c2goQyk7ZWxzZXtpZihEZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSxiKXtiPSExLG09dC53aWR0aHx8Vy53aWR0aCx4PXQuaGVpZ2h0fHxXLmhlaWdodCxyLnRleEltYWdlM0QoZixfLG8sbSx4LHYsMCxhLHUsbnVsbCk7Zm9yKGxldCBpZT0wO2llPHY7KytpZSlyLnRleFN1YkltYWdlM0QoZixfLDAsMCxpZSxtLHgsMSxhLHUsVyl9ZWxzZXtsZXQgaWU9VyxYOyhXLndpZHRoIT09bXx8Vy5oZWlnaHQhPT14KSYmKFg9TW4oKSxpZT1YLmNhbnZhcyxYLmNhbnZhcy53aWR0aD1tLFguY2FudmFzLmhlaWdodD14LFguZHJhd0ltYWdlKFcsMCwwLG0seCkpLHIudGV4U3ViSW1hZ2UzRChmLF8sMCwwLFAsbSx4LDEsYSx1LGllKSxYJiZpZT09PVguY2FudmFzJiYoWC5jYW52YXMud2lkdGg9MCxYLmNhbnZhcy5oZWlnaHQ9MCl9R2UodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZil9Yz09PTAmJm4oZC5sZW5ndGg/ZDp2b2lkIDAsZSx5KX19eT1pLm1hcChmdW5jdGlvbihQLEMpe3JldHVybiBfcihQLHQuY3Jvc3NPcmlnaW4sQShDKSl9KX1mdW5jdGlvbiBrdShyLGUsdCxuKXtuPW58fGFlLnRleHR1cmVPcHRpb25zO2NvbnN0IGk9bi50YXJnZXR8fHVlO3IuYmluZFRleHR1cmUoaSxlKTtsZXQgbz1uLndpZHRoLHM9bi5oZWlnaHQsYT1uLmRlcHRoO2NvbnN0IHU9bi5sZXZlbHx8MCxmPW4uaW50ZXJuYWxGb3JtYXR8fG4uZm9ybWF0fHxGLGM9JGUoZiksZD1uLmZvcm1hdHx8Yy5mb3JtYXQseT1uLnR5cGV8fEZ1KHIsdCxjLnR5cGUpO2lmKEJlKHQpKXQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSYmKHQ9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpKTtlbHNle2NvbnN0IHY9RW4oeSk7dD1uZXcgdih0KX1jb25zdCBfPVJ1KGYseSksbT10LmJ5dGVMZW5ndGgvXztpZihtJTEpdGhyb3cibGVuZ3RoIHdyb25nIHNpemUgZm9yIGZvcm1hdDogIitEbihyLGQpO2xldCB4O2lmKGk9PT15ZXx8aT09PV9lKWlmKCFvJiYhcyYmIWEpe2NvbnN0IHY9TWF0aC5jYnJ0KG0pO2lmKHYlMSE9PTApdGhyb3ciY2FuJ3QgZ3Vlc3MgY3ViZSBzaXplIG9mIGFycmF5IG9mIG51bUVsZW1lbnRzOiAiK207bz12LHM9dixhPXZ9ZWxzZSBvJiYoIXN8fCFhKT8oeD1fdChyLGkscyxhLG0vbykscz14LndpZHRoLGE9eC5oZWlnaHQpOnMmJighb3x8IWEpPyh4PV90KHIsaSxvLGEsbS9zKSxvPXgud2lkdGgsYT14LmhlaWdodCk6KHg9X3QocixpLG8scyxtL2EpLG89eC53aWR0aCxzPXguaGVpZ2h0KTtlbHNlIHg9X3QocixpLG8scyxtKSxvPXgud2lkdGgscz14LmhlaWdodDtpZihxbihyKSxyLnBpeGVsU3RvcmVpKGxyLG4udW5wYWNrQWxpZ25tZW50fHwxKSxEZShyLG4pLGk9PT1jZSl7Y29uc3Qgdj1fL3QuQllURVNfUEVSX0VMRU1FTlQsYj1tLzYqdjt5cihyLG4pLmZvckVhY2goQT0+e2NvbnN0IFA9YipBLm5keCxDPXQuc3ViYXJyYXkoUCxQK2IpO3IudGV4SW1hZ2UyRChBLmZhY2UsdSxmLG8scywwLGQseSxDKX0pfWVsc2UgaT09PXllfHxpPT09X2U/ci50ZXhJbWFnZTNEKGksdSxmLG8scyxhLDAsZCx5LHQpOnIudGV4SW1hZ2UyRChpLHUsZixvLHMsMCxkLHksdCk7cmV0dXJue3dpZHRoOm8saGVpZ2h0OnMsZGVwdGg6YSx0eXBlOnl9fWZ1bmN0aW9uIEx1KHIsZSx0KXtjb25zdCBuPXQudGFyZ2V0fHx1ZTtyLmJpbmRUZXh0dXJlKG4sZSk7Y29uc3QgaT10LmxldmVsfHwwLG89dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fEYscz0kZShvKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8cy50eXBlO2lmKERlKHIsdCksbj09PWNlKWZvcihsZXQgZj0wO2Y8NjsrK2Ypci50ZXhJbWFnZTJEKHVyK2YsaSxvLHQud2lkdGgsdC5oZWlnaHQsMCxhLHUsbnVsbCk7ZWxzZSBuPT09eWV8fG49PT1fZT9yLnRleEltYWdlM0QobixpLG8sdC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLDAsYSx1LG51bGwpOnIudGV4SW1hZ2UyRChuLGksbyx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpfWZ1bmN0aW9uIEtuKHIsZSx0KXt0PXR8fHplLGU9ZXx8YWUudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj1yLmNyZWF0ZVRleHR1cmUoKSxpPWUudGFyZ2V0fHx1ZTtsZXQgbz1lLndpZHRofHwxLHM9ZS5oZWlnaHR8fDE7Y29uc3QgYT1lLmludGVybmFsRm9ybWF0fHxGO3IuYmluZFRleHR1cmUoaSxuKSxpPT09Y2UmJihyLnRleFBhcmFtZXRlcmkoaSxmdCxjdCksci50ZXhQYXJhbWV0ZXJpKGksbHQsY3QpKTtsZXQgdT1lLnNyYztpZih1KWlmKHR5cGVvZiB1PT0iZnVuY3Rpb24iJiYodT11KHIsZSkpLHR5cGVvZiB1PT0ic3RyaW5nIilOdShyLG4sZSx0KTtlbHNlIGlmKEJlKHUpfHxBcnJheS5pc0FycmF5KHUpJiYodHlwZW9mIHVbMF09PSJudW1iZXIifHxBcnJheS5pc0FycmF5KHVbMF0pfHxCZSh1WzBdKSkpe2NvbnN0IGY9a3UocixuLHUsZSk7bz1mLndpZHRoLHM9Zi5oZWlnaHR9ZWxzZSBBcnJheS5pc0FycmF5KHUpJiYodHlwZW9mIHVbMF09PSJzdHJpbmcifHxRbih1WzBdKSk/aT09PWNlP1V1KHIsbixlLHQpOkJ1KHIsbixlLHQpOihZbihyLG4sdSxlKSxvPXUud2lkdGgscz11LmhlaWdodCk7ZWxzZSBMdShyLG4sZSk7cmV0dXJuIEdlKGUpJiZocihyLG4sZSxvLHMsYSksWG4ocixuLGUpLG59Y29uc3QgZ3I9VG47ZnVuY3Rpb24gSm4ocil7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIpOm51bGx9Y29uc3QgeHQ9MzM5ODQsZ3Q9MzQ5NjIsJHU9MzQ5NjMsR3U9MzU3MTMsenU9MzU3MTQsSHU9MzU2MzIsVnU9MzU2MzMsV3U9MzU5ODEsWm49MzU3MTgsanU9MzU3MjEscXU9MzU5NzEsWHU9MzUzODIsWXU9MzUzOTYsUXU9MzUzOTgsS3U9MzUzOTIsSnU9MzUzOTUsYnQ9NTEyNixlaT0zNTY2NCx0aT0zNTY2NSxyaT0zNTY2Nixicj01MTI0LG5pPTM1NjY3LGlpPTM1NjY4LG9pPTM1NjY5LHNpPTM1NjcwLGFpPTM1NjcxLHVpPTM1NjcyLGNpPTM1NjczLGZpPTM1Njc0LGxpPTM1Njc1LGRpPTM1Njc2LFp1PTM1Njc4LGVjPTM1NjgwLHRjPTM1Njc5LHJjPTM1NjgyLG5jPTM1Njg1LGljPTM1Njg2LG9jPTM1Njg3LHNjPTM1Njg4LGFjPTM1Njg5LHVjPTM1NjkwLGNjPTM2Mjg5LGZjPTM2MjkyLGxjPTM2MjkzLHZyPTUxMjUsbWk9MzYyOTQsaGk9MzYyOTUscGk9MzYyOTYsZGM9MzYyOTgsbWM9MzYyOTksaGM9MzYzMDAscGM9MzYzMDMseWM9MzYzMDYsX2M9MzYzMDcseGM9MzYzMDgsZ2M9MzYzMTEsdnQ9MzU1MyxFdD0zNDA2NyxFcj0zMjg3OSxUdD0zNTg2NixFPXt9O2Z1bmN0aW9uIHlpKHIsZSl7cmV0dXJuIEVbZV0uYmluZFBvaW50fWZ1bmN0aW9uIGJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFmKGUsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFmdihlLHQpfX1mdW5jdGlvbiBFYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0yZnYoZSx0KX19ZnVuY3Rpb24gVGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM2Z2KGUsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTRmdihlLHQpfX1mdW5jdGlvbiBfaShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xaShlLHQpfX1mdW5jdGlvbiB4aShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xaXYoZSx0KX19ZnVuY3Rpb24gZ2kocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMml2KGUsdCl9fWZ1bmN0aW9uIGJpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNpdihlLHQpfX1mdW5jdGlvbiB2aShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00aXYoZSx0KX19ZnVuY3Rpb24gd2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMXVpKGUsdCl9fWZ1bmN0aW9uIFJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aXYoZSx0KX19ZnVuY3Rpb24gU2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMnVpdihlLHQpfX1mdW5jdGlvbiBJYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zdWl2KGUsdCl9fWZ1bmN0aW9uIEZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTR1aXYoZSx0KX19ZnVuY3Rpb24gUGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIERjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDNmdihlLCExLHQpfX1mdW5jdGlvbiBNYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0ZnYoZSwhMSx0KX19ZnVuY3Rpb24gQ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4MngzZnYoZSwhMSx0KX19ZnVuY3Rpb24gT2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M3gyZnYoZSwhMSx0KX19ZnVuY3Rpb24gTmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4Mng0ZnYoZSwhMSx0KX19ZnVuY3Rpb24gVWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NHgyZnYoZSwhMSx0KX19ZnVuY3Rpb24gQmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M3g0ZnYoZSwhMSx0KX19ZnVuY3Rpb24ga2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NHgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gTChyLGUsdCxuKXtjb25zdCBpPXlpKHIsZSk7cmV0dXJuIFVlKHIpP2Z1bmN0aW9uKG8pe2xldCBzLGE7b3IocixvKT8ocz1vLGE9bnVsbCk6KHM9by50ZXh0dXJlLGE9by5zYW1wbGVyKSxyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZSh4dCt0KSxyLmJpbmRUZXh0dXJlKGkscyksci5iaW5kU2FtcGxlcih0LGEpfTpmdW5jdGlvbihvKXtyLnVuaWZvcm0xaShuLHQpLHIuYWN0aXZlVGV4dHVyZSh4dCt0KSxyLmJpbmRUZXh0dXJlKGksbyl9fWZ1bmN0aW9uICQocixlLHQsbixpKXtjb25zdCBvPXlpKHIsZSkscz1uZXcgSW50MzJBcnJheShpKTtmb3IobGV0IGE9MDthPGk7KythKXNbYV09dCthO3JldHVybiBVZShyKT9mdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUoeHQrc1tmXSk7bGV0IGMsZDtvcihyLHUpPyhjPXUsZD1udWxsKTooYz11LnRleHR1cmUsZD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxkKSxyLmJpbmRUZXh0dXJlKG8sYyl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKHh0K3NbZl0pLHIuYmluZFRleHR1cmUobyx1KX0pfX1FW2J0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjpiYyxhcnJheVNldHRlcjp2Y30sRVtlaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6RWMsY29sczoyfSxFW3RpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6VGMsY29sczozfSxFW3JpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6QWMsY29sczo0fSxFW2JyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6X2ksYXJyYXlTZXR0ZXI6eGl9LEVbbmldPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpnaSxjb2xzOjJ9LEVbaWldPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6YmksY29sczozfSxFW29pXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOnZpLGNvbHM6NH0sRVt2cl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjp3YyxhcnJheVNldHRlcjpSY30sRVttaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpTYyxjb2xzOjJ9LEVbaGldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOkljLGNvbHM6M30sRVtwaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6RmMsY29sczo0fSxFW3NpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOl9pLGFycmF5U2V0dGVyOnhpfSxFW2FpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmdpLGNvbHM6Mn0sRVt1aV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6YmksY29sczozfSxFW2NpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjp2aSxjb2xzOjR9LEVbZmldPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpQYyxyb3dzOjIsY29sczoyfSxFW2xpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6RGMscm93czozLGNvbHM6M30sRVtkaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOk1jLHJvd3M6NCxjb2xzOjR9LEVbbmNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpDYyxyb3dzOjIsY29sczozfSxFW2ljXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6TmMscm93czoyLGNvbHM6NH0sRVtvY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOk9jLHJvd3M6Myxjb2xzOjJ9LEVbc2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpCYyxyb3dzOjMsY29sczo0fSxFW2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6VWMscm93czo0LGNvbHM6Mn0sRVt1Y109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOmtjLHJvd3M6NCxjb2xzOjN9LEVbWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OnZ0fSxFW2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpFdH0sRVt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6RXJ9LEVbcmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OnZ0fSxFW2NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpUdH0sRVtmY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6VHR9LEVbbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkV0fSxFW2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDp2dH0sRVttY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6RXJ9LEVbaGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkV0fSxFW3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpUdH0sRVt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6dnR9LEVbX2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpMLGFycmF5U2V0dGVyOiQsYmluZFBvaW50OkVyfSxFW3hjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TCxhcnJheVNldHRlcjokLGJpbmRQb2ludDpFdH0sRVtnY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkwsYXJyYXlTZXR0ZXI6JCxiaW5kUG9pbnQ6VHR9O2Z1bmN0aW9uIEF0KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKGd0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8YnQsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGxlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoZ3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8YnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gd3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoZ3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8dnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gVHIocixlLHQpe2NvbnN0IG49dC5zaXplLGk9dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24obyl7ci5iaW5kQnVmZmVyKGd0LG8uYnVmZmVyKTtjb25zdCBzPW8uc2l6ZXx8by5udW1Db21wb25lbnRzfHxuLGE9cy9pLHU9by50eXBlfHxidCxjPUVbdV0uc2l6ZSpzLGQ9by5ub3JtYWxpemV8fCExLHk9by5vZmZzZXR8fDAsXz1jL2k7Zm9yKGxldCBtPTA7bTxpOysrbSlyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUrbSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUrbSxhLHUsZCxjLHkrXyptKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK20sby5kaXZpc29yfHwwKX19Y29uc3QgRD17fTtEW2J0XT17c2l6ZTo0LHNldHRlcjpBdH0sRFtlaV09e3NpemU6OCxzZXR0ZXI6QXR9LERbdGldPXtzaXplOjEyLHNldHRlcjpBdH0sRFtyaV09e3NpemU6MTYsc2V0dGVyOkF0fSxEW2JyXT17c2l6ZTo0LHNldHRlcjpsZX0sRFtuaV09e3NpemU6OCxzZXR0ZXI6bGV9LERbaWldPXtzaXplOjEyLHNldHRlcjpsZX0sRFtvaV09e3NpemU6MTYsc2V0dGVyOmxlfSxEW3ZyXT17c2l6ZTo0LHNldHRlcjp3dH0sRFttaV09e3NpemU6OCxzZXR0ZXI6d3R9LERbaGldPXtzaXplOjEyLHNldHRlcjp3dH0sRFtwaV09e3NpemU6MTYsc2V0dGVyOnd0fSxEW3NpXT17c2l6ZTo0LHNldHRlcjpsZX0sRFthaV09e3NpemU6OCxzZXR0ZXI6bGV9LERbdWldPXtzaXplOjEyLHNldHRlcjpsZX0sRFtjaV09e3NpemU6MTYsc2V0dGVyOmxlfSxEW2ZpXT17c2l6ZTo0LHNldHRlcjpUcixjb3VudDoyfSxEW2xpXT17c2l6ZTo5LHNldHRlcjpUcixjb3VudDozfSxEW2RpXT17c2l6ZToxNixzZXR0ZXI6VHIsY291bnQ6NH07Y29uc3QgTGM9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiAkYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKExjKV0saT1uZXcgTWFwKG4ubWFwKChvLHMpPT57Y29uc3QgYT1wYXJzZUludChvWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxjPWUuc3Vic3RyaW5nKG8uaW5kZXgsZik7cmV0dXJuW2EtMSxjXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgobyxzKT0+e2NvbnN0IGE9aS5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke299JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IEVpPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIFRpKHIpe2xldCBlPTA7cmV0dXJuIEVpLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UoRWksIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBHYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIHpjKHIsZSx0LG4pe2lmKG49bnx8Z3IsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsR3UpKXtjb25zdCBvPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1UaShyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHskYyhhLG8scyl9CkVycm9yIGNvbXBpbGluZyAke0RuKHIsZSl9OiAke299YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIEFyKHIsZSx0KXtsZXQgbixpLG87aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxpPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLG89Zi5jYWxsYmFja31jb25zdCBzPXR8fGdyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmMpe2EucHVzaChmKSxzKGYsLi4uYyl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6aSxjYWxsYmFjazpvLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oYyxkKXtmW2NdPWU/ZVtkXTpkfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IEhjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIFZjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIEh1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBWdX1mdW5jdGlvbiBXYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgaSBvZiBuKXQuaGFzKGkpJiZyLmRlbGV0ZVNoYWRlcihpKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgamM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gcWMocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczppLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6byx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309QXIodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPUpuKHUpLGM9Zj9mLnRleHQ6dTtsZXQgZD1yW0hjW2FdXTtmJiZmLnR5cGUmJihkPVZjKHIsZi50eXBlKXx8ZCksdT1yLmNyZWF0ZVNoYWRlcihkKSxyLnNoYWRlclNvdXJjZSh1LFRpKGMpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9bzthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fFd1KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBYYyhyLGUsdCxuLGkpe2NvbnN0IG89QXIodCxuLGkpLHM9bmV3IFNldChlKSxhPXFjKHIsZSxvKTtmdW5jdGlvbiB1KGYsYyl7Y29uc3QgZD1RYyhmLGMsby5lcnJvckNhbGxiYWNrKTtyZXR1cm4gZCYmV2MoZixjLHMpLGR9aWYoby5jYWxsYmFjayl7WWMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7by5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gWWMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KG8scyk9Pm8uZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IGk9MDtkbyBhd2FpdCBqYyhpKSxpPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBRYyhyLGUsdCl7aWYodD10fHxnciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsenUpKXtjb25zdCBpPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke2l9YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+emMocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke2l9CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIEtjKHIsZSx0LG4saSl7cmV0dXJuIFhjKHIsZSx0LG4saSl9ZnVuY3Rpb24gQWkocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgSmM9LyhcLnxcW3xdfFx3KykvZyxaYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBlZihyLGUsdCxuKXtjb25zdCBpPXIuc3BsaXQoSmMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBvPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9aVtvKytdO3MrPWE7Y29uc3QgdT1aYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9aVtvKytdKSxvPT09aS5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IGQ9aVtvKytdLHk9ZD09PSJbIixfPXRbZl18fCh5P1tdOnt9KTt0W2ZdPV8sdD1fLG5bc109bltzXXx8ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKHgpe3dpKG0seCl9fShfKSxzKz1kfX19ZnVuY3Rpb24gdGYocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGM9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxkPXUudHlwZSx5PUVbZF07aWYoIXkpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtkLnRvU3RyaW5nKDE2KX1gKTtsZXQgXztpZih5LmJpbmRQb2ludCl7Y29uc3QgbT10O3QrPXUuc2l6ZSxjP189eS5hcnJheVNldHRlcihyLGQsbSxmLHUuc2l6ZSk6Xz15LnNldHRlcihyLGQsbSxmLHUuc2l6ZSl9ZWxzZSB5LmFycmF5U2V0dGVyJiZjP189eS5hcnJheVNldHRlcihyLGYpOl89eS5zZXR0ZXIocixmKTtyZXR1cm4gXy5sb2NhdGlvbj1mLF99Y29uc3QgaT17fSxvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWm4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoQWkodSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBjPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihjKXtjb25zdCBkPW4oZSx1LGMpO2lbZl09ZCxlZihmLGQsbyxpKX19cmV0dXJuIGl9ZnVuY3Rpb24gcmYocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUscXUpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxpKTt0W28ubmFtZV09e2luZGV4OmksdHlwZTpvLnR5cGUsc2l6ZTpvLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIG5mKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxabiksbj1bXSxpPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2kucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsaSxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7bltkXVtmXT1jfSl9KTtjb25zdCBvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWHUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsWXUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxRdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsS3UpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxKdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixvW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6byx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB3aShyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOndpKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIFJpKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1lW2ldO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IHM9by5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlSaSh0LG9bYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gbyl7Y29uc3QgYT10W3NdO2EmJmEob1tzXSl9fX1mdW5jdGlvbiBvZihyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxqdSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldEFjdGl2ZUF0dHJpYihlLGkpO2lmKEFpKG8pKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLG8ubmFtZSksYT1EW28udHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbby5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIHNmKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIGFmKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihzZihlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcigkdSx0LmluZGljZXMpKX1mdW5jdGlvbiBTaShyLGUpe2NvbnN0IHQ9dGYocixlKSxuPW9mKHIsZSksaT17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gVWUocikmJihpLnVuaWZvcm1CbG9ja1NwZWM9bmYocixlKSxpLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1yZihyLGUpKSxpfWNvbnN0IHVmPS9cc3x7fH18Oy87ZnVuY3Rpb24gY2YocixlLHQsbixpKXtjb25zdCBvPUFyKHQsbixpKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXVmLnRlc3QoZikpe2NvbnN0IGM9Sm4oZik7aWYoYylmPWMudGV4dDtlbHNle2NvbnN0IGQ9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7by5lcnJvckNhbGxiYWNrKGQpLHMucHVzaChkKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gR2MobywiIik7Y29uc3QgYT1vLmNhbGxiYWNrO2EmJihvLmNhbGxiYWNrPShmLGMpPT57YShmLGY/dm9pZCAwOlNpKHIsYykpfSk7Y29uc3QgdT1LYyhyLGUsbyk7cmV0dXJuIHU/U2kocix1KTpudWxsfWNvbnN0IGZmPTQsSWk9NTEyMztmdW5jdGlvbiBsZihyLGUsdCxuLGksbyl7dD10PT09dm9pZCAwP2ZmOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47aT1pPT09dm9pZCAwPzA6aSxhfHxzP28hPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/SWk6ZS5lbGVtZW50VHlwZSxpLG8pOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP0lpOmUuZWxlbWVudFR5cGUsaSk6byE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxpLHUsbyk6ci5kcmF3QXJyYXlzKHQsaSx1KX1jb25zdCBGaT0zNjE2MCxSdD0zNjE2MSxkZj0zNTUzLG1mPTUxMjEsaGY9NjQwMixwZj02NDA4LHlmPTMzMTkwLF9mPTM2MDEyLHhmPTM1MDU2LGdmPTM2MDEzLGJmPTMyODU0LHZmPTMyODU1LEVmPTM2MTk0LFBpPTMzMTg5LERpPTY0MDEsTWk9MzYxNjgsd3I9MzQwNDEsUnI9MzYwNjQsU3Q9MzYwOTYsQ2k9MzYxMjgsU3I9MzMzMDYsSXI9MzMwNzEsRnI9OTcyOSxUZj1be2Zvcm1hdDpwZix0eXBlOm1mLG1pbjpGcix3cmFwOklyfSx7Zm9ybWF0OndyfV0scT17fTtxW3dyXT1TcixxW0RpXT1DaSxxW01pXT1DaSxxW2hmXT1TdCxxW1BpXT1TdCxxW3lmXT1TdCxxW19mXT1TdCxxW3hmXT1TcixxW2dmXT1TcjtmdW5jdGlvbiBBZihyLGUpe3JldHVybiBxW3JdfHxxW2VdfWNvbnN0IGRlPXt9O2RlW2JmXT0hMCxkZVt2Zl09ITAsZGVbRWZdPSEwLGRlW3dyXT0hMCxkZVtQaV09ITAsZGVbRGldPSEwLGRlW01pXT0hMDtmdW5jdGlvbiB3ZihyKXtyZXR1cm4gZGVbcl19Y29uc3QgUmY9MzI7ZnVuY3Rpb24gU2Yocil7cmV0dXJuIHI+PVJyJiZyPFJyK1JmfWZ1bmN0aW9uIEl0KHIsZSx0LG4pe2NvbnN0IGk9Rmksbz1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIoaSxvKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8VGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjpvLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgYz11LmF0dGFjaG1lbnQ7Y29uc3QgZD11LnNhbXBsZXMseT11LmZvcm1hdDtsZXQgXz11LmF0dGFjaG1lbnRQb2ludHx8QWYoeSx1LmludGVybmFsRm9ybWF0KTtpZihffHwoXz1ScitmKSxTZihfKSYmcy5wdXNoKF8pLCFjKWlmKGQhPT12b2lkIDB8fHdmKHkpKWM9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoUnQsYyksZD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKFJ0LGQseSx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShSdCx5LHQsbik7ZWxzZXtjb25zdCBtPU9iamVjdC5hc3NpZ24oe30sdSk7bS53aWR0aD10LG0uaGVpZ2h0PW4sbS5hdXRvPT09dm9pZCAwJiYobS5hdXRvPSExLG0ubWluPW0ubWlufHxtLm1pbk1hZ3x8RnIsbS5tYWc9bS5tYWd8fG0ubWluTWFnfHxGcixtLndyYXBTPW0ud3JhcFN8fG0ud3JhcHx8SXIsbS53cmFwVD1tLndyYXBUfHxtLndyYXB8fElyKSxjPUtuKHIsbSl9aWYoQnMocixjKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGksXyxSdCxjKTtlbHNlIGlmKG9yKHIsYykpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKGksXyxjLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLF8sdS50YXJnZXR8fGRmLGMsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGMpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIElmKHIsZSx0KXt0PXR8fEZpLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIFMocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOktuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgT2k9MjtjbGFzcyBiZXtjb25zdHJ1Y3RvcihlKXtwKHRoaXMsImlkIiwiXyIpO3AodGhpcywiY29udGV4dCIpO3AodGhpcywib3V0cHV0Iik7cCh0aGlzLCJmYmkiKTtwKHRoaXMsIm9wdGlvbnMiKTtwKHRoaXMsInByb2dyYW1JbmZvIik7cCh0aGlzLCJidWZmZXJJbmZvIik7cCh0aGlzLCJwcm9maWxlciIpO3AodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDppfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IG89dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPWNmKHRoaXMuY29udGV4dCxbbyt0aGlzLmdldFZlcnRleFNoYWRlcigpLG8rdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPWFhKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9SXQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4saSksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9SXQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgaSxvLHMsYSx1LGY7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBjIGluIGUpdHlwZW9mIGVbY109PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7Y31gKSxlW2NdPWVbY10oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtjfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksYWYodGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxSaSh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLElmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLGxmKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgRmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxQZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIERmIGV4dGVuZHMgYmV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBGZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBQZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19dmFyIE1mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gc2FtcGxlcjJEIGJhY2tncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIGZvcmVncm91bmQ7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGJhY2tncm91bmRDb2xvciA9IHRleHR1cmUyRChiYWNrZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBmb3JlZ3JvdW5kQ29sb3IgPSB0ZXh0dXJlMkQoZm9yZWdyb3VuZCwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgdHJlc2hvbGRDb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBnbF9GcmFnQ29sb3IgPSBmb3JlZ3JvdW5kQ29sb3IgKiB0cmVzaG9sZENvbG9yLmEgKwogICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciAqICgxLiAtIHRyZXNob2xkQ29sb3IuYSk7Cn0KYCxDZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7Cn0KYDtjbGFzcyBQciBleHRlbmRzIGJle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIE1mfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBDZn19Y2xhc3MgRHJ7Y29uc3RydWN0b3IoKXtwKHRoaXMsInN0ZXBzIixbXSk7cCh0aGlzLCJwcm9maWxlciIpfWFkZFN0ZXAoZSl7dGhpcy5zdGVwcy5wdXNoKGUpfWFzeW5jIHJ1bigpe2Zvcihjb25zdCBlIG9mIHRoaXMuc3RlcHMpZS5wcm9ncmFtLnJ1bihlLmdldFVuaWZvcm1zKCkpfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuLGk7KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYFBJUCBbJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9XWApO2Zvcihjb25zdCBvIG9mIHRoaXMuc3RlcHMpby5wcmV2ZW50UmVzaXplfHxvLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCk7KGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucG9wQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lO2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLnNldFByb2ZpbGVyKGUpfXNldElkKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuc3RlcHMpdC5wcm9ncmFtLmlkPWV9fWNsYXNzIE1yIGV4dGVuZHMgRHJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMSl9fWNvbnN0IE9mPTEwLE5mPTIsVWY9ODtjbGFzcyBCZiBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywiYmx1ciIpO3RoaXMuY29udGV4dD10LHRoaXMucmFkaXVzPW47Y29uc3QgaT17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9O3RoaXMuYmx1cj1uZXcgRGYoey4uLmkscmFkaXVzOm4sLi4udGhpcy5nZXRCbHVyVGV4dHVyZVNpemUodC5jYW52YXMud2lkdGgsdC5jYW52YXMuaGVpZ2h0KX0pO2NvbnN0IG89bmV3IFByKHsuLi5pLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTp0aGlzLmJsdXIscHJldmVudFJlc2l6ZTohMCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCx0aGlzLmlucHV0SW1hZ2UpLG1hc2s6Uyh0LHRoaXMuaW5wdXRNYXNrKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpTKHQsdGhpcy5ibHVyLm91dHB1dCksZm9yZWdyb3VuZDpTKHQsdGhpcy5pbnB1dEltYWdlKSx0aHJlc2hvbGQ6Uyh0LHRoaXMuaW5wdXRNYXNrKX0pfSl9Z2V0Qmx1clRleHR1cmVTaXplKHQsbil7Y29uc3QgaT10aGlzLnJhZGl1cz5PZj9VZjpOZjtyZXR1cm57d2lkdGg6TWF0aC5tYXgoT2ksdC9pKSxoZWlnaHQ6TWF0aC5tYXgoT2ksbi9pKX19c2V0RGF0YSh0LG4pe3RoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbik7Y29uc3QgaT10aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LG4pO3RoaXMuYmx1ci5yZXNpemVPdXRwdXQoaS53aWR0aCxpLmhlaWdodCl9fWNsYXNzIE5pIGV4dGVuZHMgTXJ7Y29uc3RydWN0b3IodCl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0QmFja2dyb3VuZEltYWdlIik7cCh0aGlzLCJpbnB1dE1hc2siKTtwKHRoaXMsInByZWNpc2VNYXNrRW5hYmxlZCIsITApO3RoaXMuY29udGV4dD10O2NvbnN0IG49e2NvbnRleHQ6dCxoZWlnaHQ6dC5jYW52YXMuaGVpZ2h0LHdpZHRoOnQuY2FudmFzLndpZHRofSxpPW5ldyBQcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOlModCx0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlKSxmb3JlZ3JvdW5kOlModCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3Mga2YgZXh0ZW5kcyBOaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7cCh0aGlzLCJmcmFtZVJlYWRlciIpO3AodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IGlucHV0VmlkZW8odCl7dGhpcy5mcmFtZVJlYWRlcj10LmdldFJlYWRlcigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCl9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHN1cGVyLnJ1bigpLHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX12YXIgTGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCwkZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgLENyPShyPT4ocltyLkxJTkVBUj0wXT0iTElORUFSIixyW3IuR0FVU1NJQU49MV09IkdBVVNTSUFOIixyKSkoQ3J8fHt9KTtjbGFzcyBVaSBleHRlbmRzIGJle2dldERlZmluZXMoKXt2YXIgZTtyZXR1cm57UkFESVVTOihlPXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP2U6MX19Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gTGYrdGhpcy5jcmVhdGVMb29wRnVuY3Rpb24oKX1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gJGZ9Y3JlYXRlTG9vcEZ1bmN0aW9uKCl7dmFyIHQ7bGV0IGU9KHQ9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dDoxO3JldHVybmAKCiAgICAgICAgdmVjNCBsb29wKCkgeyAKICAgICAgICAgICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAsMCwwLDApOwogICAgICAgICAgICBmbG9hdCBmYWN0b3JTdW0gPSAwLjsKCiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZFJhZGl1cyA9IHZlYzIoLSR7ZX0uKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkSW5jcmVtZW50ID0gdmVjMigxLikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgZGlmZiA9IG5vcm1hbGl6ZWRSYWRpdXM7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9IDEuOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmYWN0b3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQgKyBkaWZmKTsKICAgICAgICAgICAgICAgICAgICBmYWN0b3JTdW0gKz0gZmFjdG9yOwogICAgICAgICAgICAgICAgICAgIGRpZmYueCArPSBub3JtYWxpemVkSW5jcmVtZW50Lng7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkaWZmLnkgKz0gbm9ybWFsaXplZEluY3JlbWVudC55OwogICAgICAgICAgICAgICAgZGlmZi54ID0gbm9ybWFsaXplZFJhZGl1cy54OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQgLyBmYWN0b3JTdW07CiAgICAgICAgfWB9Z2V0RmFjdG9yKGUsdCl7c3dpdGNoKHRoaXMub3B0aW9ucy50eXBlKXtjYXNlIDE6cmV0dXJuIHRoaXMuZ2V0TGluZWFyRmFjdG9yKGUsdCk7Y2FzZSAwOmRlZmF1bHQ6cmV0dXJuIHRoaXMuZ2V0TGluZWFyRmFjdG9yKGUsdCl9fWdldExpbmVhckZhY3RvcihlLHQpe3JldHVybiAxfWdldEdhdXNzaWFuRmFjdG9yKGUsdCl7dmFyIHU7Y29uc3Qgbj1NYXRoLlBJKjIsaT1NYXRoLm1heCgodT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD91OjEsMSksbz0xLyhuKmkqKjIpLHM9LShlKioyK3QqKjIpLGE9bypzO3JldHVybiBvKk1hdGguRSoqYX19Y2xhc3MgR2YgZXh0ZW5kcyBNcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7cCh0aGlzLCJpbnB1dEltYWdlIik7cCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0sbz1uZXcgVWkoey4uLmkscmFkaXVzOm4sdHlwZTpDci5HQVVTU0lBTn0pLHM9bmV3IFByKHsuLi5pLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6Uyh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpTKHQsby5vdXRwdXQpLHRocmVzaG9sZDpTKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgT3IgZXh0ZW5kcyBiZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KTtwKHRoaXMsImZiaTIiKTt0aGlzLmZiaTI9SXQodC5jb250ZXh0LFt7Zm9ybWF0OnQuY29udGV4dC5SR0JBLHR5cGU6dC5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnQuY29udGV4dC5MSU5FQVIsbWFnOnQuY29udGV4dC5MSU5FQVIsd3JhcDp0LmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQud2lkdGgsdC5oZWlnaHQpfXJ1bih0KXtjb25zdCBuPXRoaXMuZmJpO3RoaXMuZmJpPXRoaXMuZmJpMix0aGlzLmZiaTI9bix0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXSxzdXBlci5ydW4oey4uLnQscHJldmlvdXNfcmVuZGVyaW5nOnRoaXMuZmJpMi5hdHRhY2htZW50c1swXX0pfXJlc2l6ZU91dHB1dCh0LG4pe3N1cGVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuZmJpMj1JdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sdCxuKX19dmFyIHpmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCi8vIHVuaWZvcm0gZmxvYXQgdHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2VfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzX3JlbmRlcmluZzsKdW5pZm9ybSB2ZWMyIGNhbnZhczsKCnVuaWZvcm0gZmxvYXQgZGVsdGE7CgpmbG9hdCBjdXJyZW50X2ZhY3RvciA9IDAuNjk7CmZsb2F0IHByZXZpb3VzX2ZhY3RvciA9IDAuNzQ7CmZsb2F0IHRocmVzaG9sZF9hY3RpdmF0aW9uID0gMC41NDsKCmZsb2F0IG1hcChmbG9hdCB2YWx1ZSwgZmxvYXQgbWluMSwgZmxvYXQgbWF4MSwgZmxvYXQgbWluMiwgZmxvYXQgbWF4MikgewogIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTsKfQoKZmxvYXQgZ2V0VGhyZXNob2xkKCkgewogIHZlYzQgY29sb3IgPSB2ZWM0KDAuKTsKICBmb3IgKGZsb2F0IHkgPSAtNi47IHkgPCA3LjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTYuOyB4IDwgNy47IHggKz0gMS4pIHsKICAgICAgdmVjNCBpbWFnZV9ub3dfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX25vdywgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgdmVjNCBpbWFnZV9iZWZvcmVfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX2JlZm9yZSwgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgY29sb3IgKz0gYWJzKGltYWdlX2JlZm9yZV9jb2xvciAtIGltYWdlX25vd19jb2xvcik7CiAgICB9CiAgfQogIHJldHVybiAoY29sb3IueCArIGNvbG9yLnkgKyBjb2xvci56KSAvICgzLiAqIDkuKTsKfQoKdm9pZCBtYWluKCkgewogIGZsb2F0IHRyZXNob2xkX2lucHV0ID0gLjQ7CiAgZmxvYXQgdHJlc2hvbGRfcHJldmlvdXNfcmVuZGVyaW5nID0gLjk4OwoKICB2ZWM0IG1hc2tfbm93X2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfbm93LCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBtYXNrX2JlZm9yZV9jb2xvciA9IHRleHR1cmUyRChtYXNrX2JlZm9yZSwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yID0gdGV4dHVyZTJEKHByZXZpb3VzX3JlbmRlcmluZywgX3RleHR1cmVfY29vcmQpOwoKICB2ZWMzIG1hc2tfZGlmZiA9IGFicyhtYXNrX2JlZm9yZV9jb2xvci54eXogLSBtYXNrX25vd19jb2xvci54eXopOwogIGZsb2F0IGZsaWNrZXJpbmcgPSBtYXNrX2RpZmYueDsKICBmbG9hdCB0aHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICBpZiAodGhyZXNob2xkIDwgdGhyZXNob2xkX2FjdGl2YXRpb24pIHsKICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZmxpY2tlcmluZywgMC4sIDAuLCAxLikgKiBjdXJyZW50X2ZhY3RvciArCiAgICAgICAgICAgICAgICAgICBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgKiBwcmV2aW91c19mYWN0b3I7CiAgICBnbF9GcmFnQ29sb3IgKj0gKDEuIC0gdGhyZXNob2xkKTsKICB9Cn0KYCxIZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIFZmIGV4dGVuZHMgT3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gemZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEhmfX12YXIgV2Y9YCN2ZXJzaW9uIDMwMCBlcwovLyBodHRwczovL2dpdGh1Yi5jb20vVm9sY29taXgvdmlydHVhbC1iYWNrZ3JvdW5kL2Jsb2IvbWFpbi9zcmMvcGlwZWxpbmVzL3dlYmdsMi9qb2ludEJpbGF0ZXJhbEZpbHRlclN0YWdlLnRzCgpwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0X2ZyYW1lOwp1bmlmb3JtIHNhbXBsZXIyRCBzZWdtZW50YXRpb25fbWFzazsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHZlYzIgdGV4ZWxfc2l6ZTsKdW5pZm9ybSBmbG9hdCBzdGVwOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKdW5pZm9ybSBmbG9hdCBvZmZzZXQ7CnVuaWZvcm0gZmxvYXQgc2lnbWFfdGV4ZWw7CnVuaWZvcm0gZmxvYXQgc2lnbWFfY29sb3I7CgppbiB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjNCBvdXRDb2xvcjsKCmZsb2F0IGdhdXNzaWFuKGZsb2F0IHgsIGZsb2F0IHNpZ21hKSB7CiAgZmxvYXQgY29lZmYgPSAtMC41IC8gKHNpZ21hICogc2lnbWEgKiA0LjAgKyAxLjBlLTYpOwogIHJldHVybiBleHAoKHggKiB4KSAqIGNvZWZmKTsKfQoKdm9pZCBtYWluKCkgewogIHZlYzIgY2VudGVyQ29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICB2ZWMzIGNlbnRlckNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY2VudGVyQ29vcmQpLnJnYjsKICBmbG9hdCBuZXdWYWwgPSAwLjA7CiAgZmxvYXQgc3BhY2VXZWlnaHQgPSAwLjA7CiAgZmxvYXQgY29sb3JXZWlnaHQgPSAwLjA7CiAgZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7CiAgLy8gU3Vic2FtcGxlIGtlcm5lbCBzcGFjZS4KICBmb3IgKGZsb2F0IGkgPSAtcmFkaXVzICsgb2Zmc2V0OyBpIDw9IHJhZGl1czsgaSArPSBzdGVwKSB7CiAgICBmb3IgKGZsb2F0IGogPSAtcmFkaXVzICsgb2Zmc2V0OyBqIDw9IHJhZGl1czsgaiArPSBzdGVwKSB7CiAgICAgIHZlYzIgc2hpZnQgPSB2ZWMyKGosIGkpICogdGV4ZWxfc2l6ZTsKICAgICAgdmVjMiBjb29yZCA9IHZlYzIoY2VudGVyQ29vcmQgKyBzaGlmdCk7CiAgICAgIHZlYzMgZnJhbWVDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNvb3JkKS5yZ2I7CiAgICAgIGZsb2F0IHRocmVzaG9sZCA9IHRleHR1cmUodGhyZXNob2xkLCBjb29yZCkuYTsKICAgICAgZmxvYXQgb3V0VmFsID0gdGV4dHVyZShzZWdtZW50YXRpb25fbWFzaywgY29vcmQpLmE7CgogICAgICBzcGFjZVdlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvb3JkLCBjb29yZCksIHNpZ21hX3RleGVsKTsKICAgICAgY29sb3JXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb2xvciwgZnJhbWVDb2xvciksIHNpZ21hX2NvbG9yKTsKICAgICAgdG90YWxXZWlnaHQgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodDsKICAgICAgbmV3VmFsICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQgKiBvdXRWYWwgKiB0aHJlc2hvbGQ7CiAgICB9CiAgfQogIG5ld1ZhbCAvPSB0b3RhbFdlaWdodDsKICBvdXRDb2xvciA9IHZlYzQodmVjMygwLiksIG5ld1ZhbCk7Cn1gLGpmPWAjdmVyc2lvbiAzMDAgZXMKaW4gdmVjMiBwb3NpdGlvbjsKaW4gdmVjMiB0ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjMiBfdGV4dHVyZV9jb29yZDsKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfWA7Y2xhc3MgcWYgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBXZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gamZ9fXZhciBYZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIGludCBjb3VudCA9IDA7CiAgZm9yIChmbG9hdCB5ID0gLTEuOyB5IDwgMi47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0xLjsgeCA8IDIuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZCArIHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpOwogICAgICBpZiAoY29sb3IuciA+IC4xKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQogIH0KICBpZiAoY291bnQgPiA1KSB7CiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIH0KfQpgLFlmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgUWYgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBYZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gWWZ9fXZhciBLZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIGZvciAoZmxvYXQgeSA9IC0yLjsgeSA8IDMuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMi47IHggPCAzLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgICAgIGNvb3JkICs9IHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIGNvbG9yICs9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCkgKiAoMS4gLyA0Lik7CiAgICB9CiAgfQoKICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgLEpmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgWmYgZXh0ZW5kcyBPcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBLZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gSmZ9fXZhciBlbD1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0czsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGlucHV0c19jb2xvciA9IHRleHR1cmUyRChpbnB1dHMsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHRocmVzaG9sZF9jb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBpZiAodGhyZXNob2xkX2NvbG9yLnIgPCAuMSAmJiBpbnB1dHNfY29sb3IuciA+IC41KSB7CiAgICBnbF9GcmFnQ29sb3IgPSBpbnB1dHNfY29sb3I7CiAgfQp9CmAsdGw9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBybCBleHRlbmRzIE9ye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIGVsfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB0bH19Y2xhc3MgbmwgZXh0ZW5kcyBEcntjb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKTtwKHRoaXMsImlucHV0SW1hZ2UiKTtwKHRoaXMsImlucHV0TWFzayIpO3AodGhpcywicHJldmlvdXNJbnB1dEltYWdlIik7cCh0aGlzLCJwcmV2aW91c0lucHV0TWFzayIpO3AodGhpcywib3V0cHV0Iik7cCh0aGlzLCJvcHRpb25zIix7Y3VycmVudFRocmVzaG9sZE1pbmltdW06MCxjdXJyZW50VGhyZXNob2xkTWF4aW11bToxLHByZXZpb3VzVGhyZXNob2xkTWluaW11bTowLHByZXZpb3VzVGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZE1pbmltdW06MCx0aHJlc2hvbGRNYXhpbXVtOjEsdGhyZXNob2xkRmFjdG9yOjF9KTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0Omksd2lkdGg6bn0scz1uZXcgVmYobyksYT1uZXcgVWkoey4uLm8scmFkaXVzOjEsdHlwZTpDci5HQVVTU0lBTn0pLHU9bmV3IHJsKG8pLGY9bmV3IFpmKG8pLGM9bmV3IFFmKG8pLGQ9bmV3IHFmKHsuLi5vfSkseT0uNjYsXz02NDAsbT00ODAseD0yNTYsdj0xNDQ7bGV0IGI9MTtiKj1NYXRoLm1heChfL3gsbS92KTtjb25zdCBBPU1hdGgubWF4KDEsTWF0aC5zcXJ0KGIpKnkpLFA9MS9fLEM9MS9tO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpTKHQsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6Uyh0LHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpTKHQsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOlModCx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6Uyh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6Uyh0LHMub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmMsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZixnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlModCxjLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTphLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6Uyh0LGYub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmQsZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRfZnJhbWU6Uyh0LHRoaXMuaW5wdXRJbWFnZSksc2VnbWVudGF0aW9uX21hc2s6Uyh0LHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6Uyh0LGEub3V0cHV0KSx0ZXhlbF9zaXplOltQLENdLHN0ZXA6QSxyYWRpdXM6YixvZmZzZXQ6QT4xP0EqLjU6MCxzaWdtYV90ZXhlbDpNYXRoLm1heChQLEMpKmIsc2lnbWFfY29sb3I6LjF9KX0pLHRoaXMub3V0cHV0PWQub3V0cHV0fXNldERhdGEodCxuKXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOnQsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazpuLHRoaXMuaW5wdXRJbWFnZT10LHRoaXMuaW5wdXRNYXNrPW59c2V0T3B0aW9ucyh0KXt0aGlzLm9wdGlvbnM9dH19dmFyIGlsPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLG9sPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3Mgc2wgZXh0ZW5kcyBiZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBpbH1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gb2x9fWNsYXNzIGFsIGV4dGVuZHMgRHJ7Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKCk7cCh0aGlzLCJpbnB1dEltYWdlIik7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbz17Y29udGV4dDp0LGhlaWdodDppLHdpZHRoOm59O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgc2woey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpTKHQsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YSh0KXt0aGlzLmlucHV0SW1hZ2U9dH19Y2xhc3MgdWx7Y29uc3RydWN0b3IoZSl7cCh0aGlzLCJyZXNpemUiKTtwKHRoaXMsImNhbnZhcyIpO3AodGhpcywiY29udGV4dCIpO3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wyIiksdGhpcy5jYW52YXMud2lkdGg9ZS53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5yZXNpemU9bmV3IGFsKHRoaXMuY29udGV4dCxlLndpZHRoLGUuaGVpZ2h0KX1yZXNpemVGb3JlZ3JvdW5kKGUsdCl7dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLnJlc2l6ZS5yZXNpemVPdXRwdXQoZSx0KX1hc3luYyBwcm9jZXNzKGUpe3ZhciB0LG47cmV0dXJuIHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLCh0PXRoaXMucmVzaXplKT09bnVsbHx8dC5zZXREYXRhKGUpLChuPXRoaXMucmVzaXplKT09bnVsbHx8bi5ydW4oKSx0aGlzLmNhbnZhc319Y2xhc3MgY2x7Y29uc3RydWN0b3IoZSx0KXtwKHRoaXMsImltcHJvdmVNYXNrU2VnbWVudGF0aW9uIik7cCh0aGlzLCJiYWNrZ3JvdW5kUmVzaXplciIpO3AodGhpcywiYmFja2dyb3VuZEltYWdlIik7cCh0aGlzLCJiYWNrZ3JvdW5kVmlkZW8iKTtwKHRoaXMsInByb2ZpbGVyIik7cCh0aGlzLCJhY3RpdmVQaXBlbGluZSIpO3AodGhpcywiY2FudmFzIik7cCh0aGlzLCJvcHRpb25zIik7cCh0aGlzLCJjb250ZXh0Iik7cCh0aGlzLCJ2aXJ0dWFsQkdJbWFnZSIpO3RoaXMuaWQ9ZSx0aGlzLmNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdGhpcy5jb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoIndlYmdsMiIpLHRoaXMuY2FudmFzLndpZHRoPXQuZm9yZWdyb3VuZFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10LmZvcmVncm91bmRIZWlnaHQsdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbj1uZXcgbmwodGhpcy5jb250ZXh0LHQubWFza1dpZHRoLHQubWFza0hlaWdodCksdGhpcy5iYWNrZ3JvdW5kSW1hZ2U9bmV3IE5pKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kVmlkZW89bmV3IGtmKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplcj1uZXcgdWwoe3dpZHRoOnQuZm9yZWdyb3VuZFdpZHRoLGhlaWdodDp0LmZvcmVncm91bmRIZWlnaHR9KX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMuYWN0aXZlUGlwZWxpbmU9bmV3IEJmKHRoaXMuY29udGV4dCx0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgR2YodGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6dGhpcy5hY3RpdmVQaXBlbGluZT10aGlzLmJhY2tncm91bmRWaWRlbzticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZEltYWdlO2JyZWFrfXRoaXMub3B0aW9ucz1lfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24pPT1udWxsfHx0LnNldE9wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvLmlucHV0VmlkZW89ZX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt0aGlzLnZpcnR1YWxCR0ltYWdlPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKGUpfWFzeW5jIHByb2Nlc3MoZSx0KXt2YXIgbixpLG8scyxhLHUsZjtpZih0aGlzLmFjdGl2ZVBpcGVsaW5lJiZlLndpZHRoJiYodD09bnVsbD92b2lkIDA6dC53aWR0aCkpe2NvbnN0IGM9YFske3RoaXMuaWR9XSBiYWNrZ3JvdW5kLWZpbHRlcmA7KG49dGhpcy5wcm9maWxlcik9PW51bGx8fG4ucHVzaENvbnRleHQoYyk7bGV0IGQ9dDsoKChpPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOmkuc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJigobz10aGlzLm9wdGlvbnMpPT1udWxsP3ZvaWQgMDpvLnNlbGZpZVNlZ21lbnRhdGlvblR5cGUpPT09IlBSRUNJU0UifHwhKChzPXRoaXMub3B0aW9ucykhPW51bGwmJnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJnRoaXMuYWN0aXZlUGlwZWxpbmUucHJlY2lzZU1hc2tFbmFibGVkKSYmKHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0SWQodGhpcy5pZCksdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnNldERhdGEoZSx0KSx0aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLnJ1bigpLGQ9dGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbi5vdXRwdXQpLHRoaXMuYWN0aXZlUGlwZWxpbmUuc2V0SWQodGhpcy5pZCksdGhpcy5hY3RpdmVQaXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKSwoYT10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8YS5zZXREYXRhKGUsZCksKHU9dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fHUucnVuKCksKGY9dGhpcy5wcm9maWxlcik9PW51bGx8fGYucG9wQ29udGV4dChjKX19YXN5bmMgcmVzaXplRm9yZWdyb3VuZChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UucmVzaXplT3V0cHV0KGUsdCksdGhpcy5iYWNrZ3JvdW5kVmlkZW8ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5yZXNpemVGb3JlZ3JvdW5kKGUsdCksKG49dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy52aXJ0dWFsQkdJbWFnZSYmKHRoaXMuYmFja2dyb3VuZEltYWdlLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IHRoaXMuYmFja2dyb3VuZFJlc2l6ZXIucHJvY2Vzcyh0aGlzLnZpcnR1YWxCR0ltYWdlKSl9YXN5bmMgcHJvZmlsZShlKXtjb25zdCB0PW5ldyBScyh0aGlzLmNvbnRleHQpO3JldHVybiB0aGlzLnByb2ZpbGVyPXQsdC5zdGFydCgpLGF3YWl0IGduKGUpLHRoaXMucHJvZmlsZXI9dm9pZCAwLHQuc3RvcCgpLHQuZ2V0UmVzb2x2ZWRRdWVyaWVzKCl9Z2V0Qmx1clNpemUoZT1zdC5Mb3cpe3N3aXRjaChlKXtjYXNlIHN0LkxvdzpyZXR1cm4gNTtjYXNlIHN0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfX12YXIgZmw9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLGk7dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihsLGgpe249bCxpPWh9KTt2YXIgbz17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKG9bc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGwsaCl7dGhyb3cgaH0sZj0hMCxjPSIiO2Z1bmN0aW9uIGQobCl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUobCxjKTpjK2x9dmFyIHk7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGM9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihjPXIpLGMuaW5kZXhPZigiYmxvYjoiKSE9PTA/Yz1jLnN1YnN0cigwLGMucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpjPSIiO3ZhciBfPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksbT10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBvKW8uaGFzT3duUHJvcGVydHkocykmJih0W3NdPW9bc10pO289bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgdj10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJm1lKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIGIsQT0hMSxQPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIEMobCxoLGcpe2Zvcih2YXIgdz1oK2csTT1oO2xbTV0mJiEoTT49dyk7KSsrTTtpZihNLWg+MTYmJmwuc3ViYXJyYXkmJlApcmV0dXJuIFAuZGVjb2RlKGwuc3ViYXJyYXkoaCxNKSk7Zm9yKHZhciBVPSIiO2g8TTspe3ZhciBSPWxbaCsrXTtpZighKFImMTI4KSl7VSs9U3RyaW5nLmZyb21DaGFyQ29kZShSKTtjb250aW51ZX12YXIgaz1sW2grK10mNjM7aWYoKFImMjI0KT09MTkyKXtVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChSJjMxKTw8NnxrKTtjb250aW51ZX12YXIgZWU9bFtoKytdJjYzO2lmKChSJjI0MCk9PTIyND9SPShSJjE1KTw8MTJ8azw8NnxlZTpSPShSJjcpPDwxOHxrPDwxMnxlZTw8NnxsW2grK10mNjMsUjw2NTUzNilVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFIpO2Vsc2V7dmFyIGppPVItNjU1MzY7VSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxqaT4+MTAsNTYzMjB8amkmMTAyMyl9fXJldHVybiBVfWZ1bmN0aW9uIFcobCxoKXtyZXR1cm4gbD9DKEhlLGwsaCk6IiJ9ZnVuY3Rpb24gaWUobCxoLGcpe2Zvcih2YXIgdz0wO3c8bC5sZW5ndGg7Kyt3KUZ0W2grKz4+MF09bC5jaGFyQ29kZUF0KHcpO2d8fChGdFtoPj4wXT0wKX1mdW5jdGlvbiBYKGwsaCl7cmV0dXJuIGwlaD4wJiYobCs9aC1sJWgpLGx9dmFyIGtpLEZ0LEhlLFk7ZnVuY3Rpb24gTGkobCl7a2k9bCx0LkhFQVA4PUZ0PW5ldyBJbnQ4QXJyYXkobCksdC5IRUFQMTY9bmV3IEludDE2QXJyYXkobCksdC5IRUFQMzI9WT1uZXcgSW50MzJBcnJheShsKSx0LkhFQVBVOD1IZT1uZXcgVWludDhBcnJheShsKSx0LkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGwpLHQuSEVBUFUzMj1uZXcgVWludDMyQXJyYXkobCksdC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkobCksdC5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkobCl9dC5JTklUSUFMX01FTU9SWTt2YXIgVXIsJGk9W10sR2k9W10semk9W10sX2w9MDtmdW5jdGlvbiB4bCgpe3JldHVybiB2fHxfbD4wfWZ1bmN0aW9uIGdsKCl7aWYodC5wcmVSdW4pZm9yKHR5cGVvZiB0LnByZVJ1bj09ImZ1bmN0aW9uIiYmKHQucHJlUnVuPVt0LnByZVJ1bl0pO3QucHJlUnVuLmxlbmd0aDspRWwodC5wcmVSdW4uc2hpZnQoKSk7QnIoJGkpfWZ1bmN0aW9uIGJsKCl7QnIoR2kpfWZ1bmN0aW9uIHZsKCl7aWYodC5wb3N0UnVuKWZvcih0eXBlb2YgdC5wb3N0UnVuPT0iZnVuY3Rpb24iJiYodC5wb3N0UnVuPVt0LnBvc3RSdW5dKTt0LnBvc3RSdW4ubGVuZ3RoOylBbCh0LnBvc3RSdW4uc2hpZnQoKSk7QnIoemkpfWZ1bmN0aW9uIEVsKGwpeyRpLnVuc2hpZnQobCl9ZnVuY3Rpb24gVGwobCl7R2kudW5zaGlmdChsKX1mdW5jdGlvbiBBbChsKXt6aS51bnNoaWZ0KGwpfXZhciB2ZT0wLFZlPW51bGw7ZnVuY3Rpb24gd2wobCl7dmUrKyx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSl9ZnVuY3Rpb24gUmwobCl7aWYodmUtLSx0Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJnQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyh2ZSksdmU9PTAmJlZlKXt2YXIgaD1WZTtWZT1udWxsLGgoKX19dC5wcmVsb2FkZWRJbWFnZXM9e30sdC5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gbWUobCl7dC5vbkFib3J0JiZ0Lm9uQWJvcnQobCksbD0iQWJvcnRlZCgiK2wrIikiLG0obCksQT0hMCxsKz0iLiBCdWlsZCB3aXRoIC1zIEFTU0VSVElPTlM9MSBmb3IgbW9yZSBpbmZvLiI7dmFyIGg9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihsKTt0aHJvdyBpKGgpLGh9dmFyIFNsPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBIaShsKXtyZXR1cm4gbC5zdGFydHNXaXRoKFNsKX12YXIgUTtRPSJ0ZmxpdGUtc2ltZC53YXNtIixIaShRKXx8KFE9ZChRKSk7ZnVuY3Rpb24gVmkobCl7dHJ5e2lmKGw9PVEmJngpcmV0dXJuIG5ldyBVaW50OEFycmF5KHgpO2lmKCF5KXRocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChoKXttZShoKX19ZnVuY3Rpb24gSWwoKXtyZXR1cm4heCYmZiYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKFEse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKGwpe2lmKCFsLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIrUSsiJyI7cmV0dXJuIGwuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIFZpKFEpfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBWaShRKX0pfWZ1bmN0aW9uIEZsKCl7dmFyIGw9e2E6UWx9O2Z1bmN0aW9uIGgoUixrKXt2YXIgZWU9Ui5leHBvcnRzO3QuYXNtPWVlLGI9dC5hc20ucSxMaShiLmJ1ZmZlciksVXI9dC5hc20uRSxUbCh0LmFzbS5yKSxSbCgpfXdsKCk7ZnVuY3Rpb24gZyhSKXtoKFIuaW5zdGFuY2UpfWZ1bmN0aW9uIHcoUil7cmV0dXJuIElsKCkudGhlbihmdW5jdGlvbihrKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoayxsKX0pLnRoZW4oZnVuY3Rpb24oayl7cmV0dXJuIGt9KS50aGVuKFIsZnVuY3Rpb24oayl7bSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitrKSxtZShrKX0pfWZ1bmN0aW9uIE0oKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhSGkoUSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChRLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihSKXt2YXIgaz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhSLGwpO3JldHVybiBrLnRoZW4oZyxmdW5jdGlvbihlZSl7cmV0dXJuIG0oIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2VlKSxtKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLHcoZyl9KX0pOncoZyl9aWYodC5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBVPXQuaW5zdGFudGlhdGVXYXNtKGwsaCk7cmV0dXJuIFV9Y2F0Y2goUil7cmV0dXJuIG0oIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrUiksITF9cmV0dXJuIE0oKS5jYXRjaChpKSx7fX1mdW5jdGlvbiBCcihsKXtmb3IoO2wubGVuZ3RoPjA7KXt2YXIgaD1sLnNoaWZ0KCk7aWYodHlwZW9mIGg9PSJmdW5jdGlvbiIpe2godCk7Y29udGludWV9dmFyIGc9aC5mdW5jO3R5cGVvZiBnPT0ibnVtYmVyIj9oLmFyZz09PXZvaWQgMD9Vci5nZXQoZykoKTpVci5nZXQoZykoaC5hcmcpOmcoaC5hcmc9PT12b2lkIDA/bnVsbDpoLmFyZyl9fWZ1bmN0aW9uIFBsKGwsaCxnLHcpe21lKCJBc3NlcnRpb24gZmFpbGVkOiAiK1cobCkrIiwgYXQ6ICIrW2g/VyhoKToidW5rbm93biBmaWxlbmFtZSIsZyx3P1codyk6InVua25vd24gZnVuY3Rpb24iXSl9ZnVuY3Rpb24gRGwobCxoKXttZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gTWwobCxoKXttZSgiVG8gdXNlIGRsb3BlbiwgeW91IG5lZWQgdG8gdXNlIEVtc2NyaXB0ZW4ncyBsaW5raW5nIHN1cHBvcnQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vd2lraS9MaW5raW5nIil9ZnVuY3Rpb24gQ2woKXttZSgiIil9dmFyIFB0O1B0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTt2YXIgT2w9ITA7ZnVuY3Rpb24gTmwobCl7cmV0dXJuIFlbV2koKT4+Ml09bCxsfWZ1bmN0aW9uIFVsKGwsaCl7dmFyIGc7aWYobD09PTApZz1EYXRlLm5vdygpO2Vsc2UgaWYoKGw9PT0xfHxsPT09NCkmJk9sKWc9UHQoKTtlbHNlIHJldHVybiBObCgyOCksLTE7cmV0dXJuIFlbaD4+Ml09Zy8xZTN8MCxZW2grND4+Ml09ZyUxZTMqMWUzKjFlM3wwLDB9ZnVuY3Rpb24gQmwoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiBrbChsLGgsZyl7SGUuY29weVdpdGhpbihsLGgsaCtnKX1mdW5jdGlvbiBMbChsKXt0cnl7cmV0dXJuIGIuZ3JvdyhsLWtpLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksTGkoYi5idWZmZXIpLDF9Y2F0Y2h7fX1mdW5jdGlvbiAkbChsKXt2YXIgaD1IZS5sZW5ndGg7bD1sPj4+MDt2YXIgZz0yMTQ3NDgzNjQ4O2lmKGw+ZylyZXR1cm4hMTtmb3IodmFyIHc9MTt3PD00O3cqPTIpe3ZhciBNPWgqKDErLjIvdyk7TT1NYXRoLm1pbihNLGwrMTAwNjYzMjk2KTt2YXIgVT1NYXRoLm1pbihnLFgoTWF0aC5tYXgobCxNKSw2NTUzNikpLFI9TGwoVSk7aWYoUilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBHbChsKXtmb3IodmFyIGg9UHQoKTtQdCgpLWg8bDspO312YXIga3I9e307ZnVuY3Rpb24gemwoKXtyZXR1cm4gYXx8Ii4vdGhpcy5wcm9ncmFtIn1mdW5jdGlvbiBXZSgpe2lmKCFXZS5zdHJpbmdzKXt2YXIgbD0odHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixoPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6bCxfOnpsKCl9O2Zvcih2YXIgZyBpbiBrcilrcltnXT09PXZvaWQgMD9kZWxldGUgaFtnXTpoW2ddPWtyW2ddO3ZhciB3PVtdO2Zvcih2YXIgZyBpbiBoKXcucHVzaChnKyI9IitoW2ddKTtXZS5zdHJpbmdzPXd9cmV0dXJuIFdlLnN0cmluZ3N9dmFyIER0PXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24obCxoKXt2YXIgZz1EdC5idWZmZXJzW2xdO2g9PT0wfHxoPT09MTA/KChsPT09MT9fOm0pKEMoZywwKSksZy5sZW5ndGg9MCk6Zy5wdXNoKGgpfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtEdC52YXJhcmdzKz00O3ZhciBsPVlbRHQudmFyYXJncy00Pj4yXTtyZXR1cm4gbH0sZ2V0U3RyOmZ1bmN0aW9uKGwpe3ZhciBoPVcobCk7cmV0dXJuIGh9LGdldDY0OmZ1bmN0aW9uKGwsaCl7cmV0dXJuIGx9fTtmdW5jdGlvbiBIbChsLGgpe3ZhciBnPTA7cmV0dXJuIFdlKCkuZm9yRWFjaChmdW5jdGlvbih3LE0pe3ZhciBVPWgrZztZW2wrTSo0Pj4yXT1VLGllKHcsVSksZys9dy5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24gVmwobCxoKXt2YXIgZz1XZSgpO1lbbD4+Ml09Zy5sZW5ndGg7dmFyIHc9MDtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKE0pe3crPU0ubGVuZ3RoKzF9KSxZW2g+PjJdPXcsMH1mdW5jdGlvbiBXbChsKXtKbChsKX1mdW5jdGlvbiBqbChsKXtyZXR1cm4gMH1mdW5jdGlvbiBxbChsLGgsZyx3LE0pe31mdW5jdGlvbiBYbChsLGgsZyx3KXtmb3IodmFyIE09MCxVPTA7VTxnO1UrKyl7Zm9yKHZhciBSPVlbaCtVKjg+PjJdLGs9WVtoKyhVKjgrNCk+PjJdLGVlPTA7ZWU8aztlZSsrKUR0LnByaW50Q2hhcihsLEhlW1IrZWVdKTtNKz1rfXJldHVybiBZW3c+PjJdPU0sMH1mdW5jdGlvbiBZbCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobCksbFswXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXttZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uIE10KGwsaCl7TXQucmFuZG9tRGV2aWNlfHwoTXQucmFuZG9tRGV2aWNlPVlsKCkpO2Zvcih2YXIgZz0wO2c8aDtnKyspRnRbbCtnPj4wXT1NdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgUWw9e2E6UGwsZTpEbCxkOk1sLGI6Q2wsbjpVbCxoOkJsLGw6a2wsbTokbCxwOkdsLGY6SGwsZzpWbCxqOldsLGk6amwsazpxbCxjOlhsLG86TXR9O0ZsKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9pc0dQVUVuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5faXNHUFVFbmFibGVkPXQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIFdpPXQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oV2k9dC5fX19lcnJub19sb2NhdGlvbj10LmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN0O2Z1bmN0aW9uIEtsKGwpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrbCsiKSIsdGhpcy5zdGF0dXM9bH1WZT1mdW5jdGlvbiBsKCl7Q3R8fExyKCksQ3R8fChWZT1sKX07ZnVuY3Rpb24gTHIobCl7aWYodmU+MHx8KGdsKCksdmU+MCkpcmV0dXJuO2Z1bmN0aW9uIGgoKXtDdHx8KEN0PSEwLHQuY2FsbGVkUnVuPSEwLCFBJiYoYmwoKSxuKHQpLHQub25SdW50aW1lSW5pdGlhbGl6ZWQmJnQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSx2bCgpKSl9dC5zZXRTdGF0dXM/KHQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNldFN0YXR1cygiIil9LDEpLGgoKX0sMSkpOmgoKX10LnJ1bj1McjtmdW5jdGlvbiBKbChsLGgpe1psKGwpfWZ1bmN0aW9uIFpsKGwpe3hsKCl8fCh0Lm9uRXhpdCYmdC5vbkV4aXQobCksQT0hMCksdShsLG5ldyBLbChsKSl9aWYodC5wcmVJbml0KWZvcih0eXBlb2YgdC5wcmVJbml0PT0iZnVuY3Rpb24iJiYodC5wcmVJbml0PVt0LnByZUluaXRdKTt0LnByZUluaXQubGVuZ3RoPjA7KXQucHJlSW5pdC5wb3AoKSgpO3JldHVybiBMcigpLGUucmVhZHl9fSgpO2NsYXNzIGxse2NvbnN0cnVjdG9yKCl7cCh0aGlzLCJzZWxlY3RlZFRGTGl0ZSIpO3AodGhpcywiaXNTSU1EU3VwcG9ydGVkIiwhMSk7cCh0aGlzLCJpc1RocmVhZHNTdXBwb3J0ZWQiLCExKTtwKHRoaXMsImlucHV0V2lkdGgiLDApO3AodGhpcywiaW5wdXRIZWlnaHQiLDApO3AodGhpcywiaW5wdXRDaGFubmVsQ291bnQiLDApO3AodGhpcywiaW5wdXRNZW1vcnlPZmZzZXQiLDApO3AodGhpcywib3V0cHV0V2lkdGgiLDApO3AodGhpcywib3V0cHV0SGVpZ2h0IiwwKTtwKHRoaXMsIm91dHB1dENoYW5uZWxDb3VudCIsMCk7cCh0aGlzLCJvdXRwdXRNZW1vcnlPZmZzZXQiLDApfX1jb25zdCBkbD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC92b25hZ2UtdGVuc29yZmxvdy13YXNtL3RmbGl0ZS1zaW1kLXdhc20vMS4xLjMvIixtbD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gaGwocj1kbCxlPW1sKXtsZXQgdD1uZXcgbGw7dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIGZsKHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixjKT0+e2NvbnN0IGQ9dTtpZih0eXBlb2YgZD4idSIpcmV0dXJuIGMoIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IHk9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6Iix5KTtsZXQgXz1lK2Ake3l9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIitfKTt0cnl7Y29uc3QgeD1hd2FpdChhd2FpdCBmZXRjaChfKSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6Iix4LmJ5dGVMZW5ndGgpO2NvbnN0IHY9ZC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6Iix2KSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxkLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoeCksdik7Y29uc3QgYj1kLl9sb2FkTW9kZWwoeC5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6IixiKSxiIT09MCl7YygiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPWQuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PWQuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1kLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9ZC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PWQuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9ZC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1kLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1kLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1kfWNhdGNoKG0pe2MobSk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e2kodCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksbygibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksbygibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyBwbHtjb25zdHJ1Y3Rvcigpe3AodGhpcywiY2FudmFzIixuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkpO3AodGhpcywiY29udGV4dCIsdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSk7cCh0aGlzLCJwaXhlbENvdW50IiwwKTtwKHRoaXMsImlucHV0T2Zmc2V0IiwwKTtwKHRoaXMsIm91dHB1dE9mZnNldCIsMCk7cCh0aGlzLCJpbmZvcyIpO3AodGhpcywibWFzayIpfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmluaXRXYXNtKGUsdCksdGhpcy5pbmZvcyYmKHRoaXMuY2FudmFzLndpZHRoPXRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLnBpeGVsQ291bnQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoKnRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5tYXNrPW5ldyBJbWFnZURhdGEodGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuaW5mb3MuaW5wdXRIZWlnaHQpLHRoaXMuaW5wdXRPZmZzZXQ9dGhpcy5pbmZvcy5pbnB1dE1lbW9yeU9mZnNldC80LHRoaXMub3V0cHV0T2Zmc2V0PXRoaXMuaW5mb3Mub3V0cHV0TWVtb3J5T2Zmc2V0LzQpfWFzeW5jIGluaXRXYXNtKGUsdCl7dGhpcy5pbmZvcz1hd2FpdCBobChlLHQpfWdldE91dHB1dERpbWVuc2lvbnMoKXt2YXIgZSx0LG4saTtyZXR1cm57d2lkdGg6KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUub3V0cHV0V2lkdGgpIT1udWxsP3Q6MCxoZWlnaHQ6KGk9KG49dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOm4ub3V0cHV0SGVpZ2h0KSE9bnVsbD9pOjB9fWFzeW5jIHByb2Nlc3MoZSl7aWYoIXRoaXMubWFza3x8IXRoaXMuaW5mb3MpcmV0dXJuO2NvbnN0IHQ9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLG49dGhpcy5pbmZvcy5pbnB1dEhlaWdodDt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLHQsbik7Y29uc3QgaT10aGlzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCx0LG4pLG89dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmlucHV0T2Zmc2V0K3MqMztvW2FdPWkuZGF0YVtzKjRdLzI1NSxvW2ErMV09aS5kYXRhW3MqNCsxXS8yNTUsb1thKzJdPWkuZGF0YVtzKjQrMl0vMjU1fXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuX3J1bkluZmVyZW5jZSgpO2ZvcihsZXQgcz0wO3M8dGhpcy5waXhlbENvdW50O3MrKyl7Y29uc3QgYT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzJbdGhpcy5vdXRwdXRPZmZzZXQrc107dGhpcy5tYXNrLmRhdGFbcyo0XT10aGlzLm1hc2suZGF0YVtzKjQrM109MjU1KmF9cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKHRoaXMubWFzayl9aXNHcHVTdXBwb3J0ZWQoKXt2YXIgZSx0LG47cmV0dXJuKG49KHQ9KGU9dGhpcy5pbmZvcyk9PW51bGw/dm9pZCAwOmUuc2VsZWN0ZWRURkxpdGUpPT1udWxsP3ZvaWQgMDp0Ll9pc0dQVUVuYWJsZWQoKSkhPW51bGw/bjohMX19Y2xhc3MgeWx7Y29uc3RydWN0b3IoKXtwKHRoaXMsInNlbGZpZVNlZ21lbnRhdGlvbiIsbmV3IHBsKTtwKHRoaXMsImJhY2tncm91bmRGaWx0ZXIiKTtwKHRoaXMsInByZXZpb3VzRGltZW5zaW9ucyIse3dpZHRoOjAsaGVpZ2h0OjB9KX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpO2NvbnN0e3dpZHRoOm4saGVpZ2h0Oml9PXRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmdldE91dHB1dERpbWVuc2lvbnMoKTt0aGlzLmJhY2tncm91bmRGaWx0ZXI9bmV3IGNsKGUse2ZvcmVncm91bmRXaWR0aDoxLGZvcmVncm91bmRIZWlnaHQ6MSxtYXNrV2lkdGg6bixtYXNrSGVpZ2h0Oml9KX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgcyxhLHUsZjtjb25zdCBuPShzPWUudGltZXN0YW1wKSE9bnVsbD9zOjAsaT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChlKSxvPWF3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLnByb2Nlc3MoaSk7bz8oKGkud2lkdGghPT10aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aHx8aS5oZWlnaHQhPT10aGlzLnByZXZpb3VzRGltZW5zaW9ucy5oZWlnaHQpJiYodGhpcy5wcmV2aW91c0RpbWVuc2lvbnMud2lkdGg9aS53aWR0aCx0aGlzLnByZXZpb3VzRGltZW5zaW9ucy5oZWlnaHQ9aS5oZWlnaHQsYXdhaXQoKGE9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6YS5yZXNpemVGb3JlZ3JvdW5kKGkud2lkdGgsaS5oZWlnaHQpKSksYXdhaXQoKHU9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dS5wcm9jZXNzKGksbykpLGUuY2xvc2UoKSx0LmVucXVldWUobmV3IFZpZGVvRnJhbWUoKGY9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6Zi5jYW52YXMse3RpbWVzdGFtcDpuLGFscGhhOiJkaXNjYXJkIn0pKSk6dC5lbnF1ZXVlKGUpfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfWFzeW5jIHNldFZpZGVvQkdSZWFkYWJsZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpZGVvQkdSZWFkYWJsZShlKSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaXJ0dWFsQkdJbWFnZShlKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKX1hc3luYyBwcm9maWxlKGUpe3ZhciB0LG47cmV0dXJuKG49KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlKGUpKSE9bnVsbD9uOltdfX1jb25zdCBOcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3AodGhpcywiYmFja2dyb3VuZFRyYW5zZm9ybWVyIixuZXcgeWwpO3AodGhpcywibWVkaWFQcm9jZXNzb3IiLG5ldyB3cyk7cCh0aGlzLCJyYXRlIiwzMCk7cCh0aGlzLCJyZXNvbHZlT25NZWRpYVByb2Nlc3NvciIpO3AodGhpcywiZXZlbnRzUXVldWUiLFtdKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuaW5pdChlLHQpLGF3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhbnNmb3JtZXJzKFt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcl0pLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy5yYXRlKSx0aGlzLm1lZGlhUHJvY2Vzc29yLm9uQW55KChuLGkpPT57dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj8odGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcih7bmFtZTpuLGRhdGE6aX0pLHRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9dm9pZCAwKTp0aGlzLmV2ZW50c1F1ZXVlLnB1c2goe25hbWU6bixkYXRhOml9KX0pfWFzeW5jIG9uTWVkaWFQcm9jZXNzb3JFdmVudCgpe3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZShlPT57dGhpcy5ldmVudHNRdWV1ZS5sZW5ndGg+MD9lKHRoaXMuZXZlbnRzUXVldWUuc2hpZnQoKSk6dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj1lfSl9YXN5bmMgc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy5yYXRlPWUsdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZShlKX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt0aGlzLm1lZGlhUHJvY2Vzc29yLnRyYW5zZm9ybShlLHQpfWFzeW5jIHNldEJhY2tncm91bmRPcHRpb25zKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpZGVvQkdSZWFkYWJsZShlKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaXJ0dWFsQkdJbWFnZShlKX1hc3luYyB0ZXJtaW5hdGUoKXthd2FpdCB0aGlzLm1lZGlhUHJvY2Vzc29yLmRlc3Ryb3koKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKX1zZXRWb25hZ2VNZXRhZGF0YShlKXtmcyhlKX1hc3luYyBwcm9maWxlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5wcm9maWxlKGUpKX19O2xldCBCaT1OcjsoKCk9PntYaSgiUHJvY2Vzc29yV29ya2VyIixOcil9KSgpfSkoKTsK",bu=typeof window<"u"&&window.Blob&&new Blob([atob(pu)],{type:"text/javascript;charset=utf-8"});function O3(){const o=bu&&(window.URL||window.webkitURL).createObjectURL(bu);try{return o?new Worker(o):new Worker("data:application/javascript;base64,"+pu)}finally{o&&(window.URL||window.webkitURL).revokeObjectURL(o)}}const is=class extends As{constructor(){super(...arguments);Rt(this,"rate",30);Rt(this,"worker")}async init(r){this.worker=await i2(es,O3),await this.worker.init(`worker_${is.initCount++}`,r),await this.worker.setVonageMetadata(Ts()),await this.setBackgroundOptions(r),this.listenWorker()}async setTrackExpectedRate(r){var m;await((m=this.worker)==null?void 0:m.setTrackExpectedRate(r))}async setBackgroundOptions(r){var y,I,F;const{transformerType:m}=r;switch(m){case"VideoBackground":await((y=this.worker)==null?void 0:y.setVideoBGReadable(await Ps.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((I=this.worker)==null?void 0:I.setVirtualBGImage(await Ps.createImageCanvas(r.backgroundAssetUri)));break}await((F=this.worker)==null?void 0:F.setBackgroundOptions(r))}async transform(r,m){var y;await((y=this.worker)==null?void 0:y.transform(r,m))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate())}async setFlickeringOptions(r){var m;await((m=this.worker)==null?void 0:m.setFlickeringOptions(r))}async profile(r){var y;const m=await((y=this.worker)==null?void 0:y.profile(r));return JSON.parse(m!=null?m:"[]")}async listenWorker(){var r,m,y;for(;(r=this.worker)!=null&&r.worker;){const{name:I,data:F}=await((m=this.worker)==null?void 0:m.onMediaProcessorEvent());switch(I){case"error":case"warn":this.emit(I,F);break;case"pipelineInfo":switch(this.emit(I,F),F){case"pipeline_ended":case"pipeline_ended_with_error":await((y=this.worker)==null?void 0:y.terminate());return}break}}}};let Pi=is;Rt(Pi,"initCount",0);class P3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},m=[];let y=0;for(const F of this.queries){const Y=[];for(const k of F)r[k.name]===void 0&&(r[k.name]=n.length,n.push({name:k.name})),Y.push({type:k.action==Qs.PUSH?"O":"C",frame:r[k.name],at:k.timestamp}),y=Math.max(y,k.timestamp+k.duration);m.push({events:Y,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:y})}const I={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:m};return JSON.stringify(I,null,2)}}class ns extends As{constructor(){super();Rt(this,"worker",new Pi);Rt(this,"connector",new jc(this.worker))}async init(r){await this.worker.init(r),this.worker.onAny((m,y)=>this.emit(m,y))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const m=await Promise.all(this.instances.map(y=>y.profile(r)));return new P3(m)}static async create(r){const m=new this;return await m.init(r),this.instances.push(m),m}}Rt(ns,"instances",[]);function _3(){return mi}function Q3(){return pi}function D3(){return bi}function $3(){return yi}function q3(){return gi}function td(){return Zi}function ed(){return vi}var yu=(o=>(o.FAST="FAST",o.PRECISE="PRECISE",o))(yu||{});async function nd(o){return await ns.create(o)}ze.BackgroundTransformer=mu,ze.BlurRadius=Mr,ze.ErrorFunction=Js,ze.MediapipeHelper=Gi,ze.PipelineInfoData=fi,ze.SelfieSegmentationType=yu,ze.VonageMediaProcessor=ns,ze.WarningType=Ns,ze.createVonageMediaProcessor=nd,ze.getSupportedBrowserFeatures=Es,ze.getVonageFaceDetection=$3,ze.getVonageFaceMash=q3,ze.getVonageHands=Q3,ze.getVonageHolistic=D3,ze.getVonageObjectron=td,ze.getVonagePose=ed,ze.getVonageSelfieSegmentation=_3,ze.isSupported=$c,Object.defineProperties(ze,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|