long-screen 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/worker.js ADDED
@@ -0,0 +1,108 @@
1
+ var Ih=Object.create;var Ja=Object.defineProperty;var Fh=Object.getOwnPropertyDescriptor;var Bh=Object.getOwnPropertyNames;var Dh=Object.getPrototypeOf,Oh=Object.prototype.hasOwnProperty;var Mh=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var Nh=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Bh(e))!Oh.call(r,n)&&n!==t&&Ja(r,n,{get:()=>e[n],enumerable:!(i=Fh(e,n))||i.enumerable});return r};var Uh=(r,e,t)=>(t=r!=null?Ih(Dh(r)):{},Nh(1 ?Ja(t,"default",{value:r,enumerable:!0}):t,r));var _d=Mh((Kw,vd)=>{vd.exports={}});var gi={analysisSize:640,memoryMB:128,tileSize:512,regions:[],temporalPolicy:"stable",decoder:"precise",compatibilityFPS:60,framing:"context",compute:"auto"};var Xn=r=>typeof r=="object"&&r!==null&&Object.getPrototypeOf(r)===Object.prototype,Yn=r=>Xn(r)&&r.__longScreenBlob===!0;async function eo(r){return{__longScreenBlob:!0,type:r.type,bytes:await r.arrayBuffer()}}async function Lh(r){if(r instanceof Blob)return await eo(r);if(!Xn(r)||!Object.values(r).some(t=>t instanceof Blob))return r;let e={};for(let[t,i]of Object.entries(r))e[t]=i instanceof Blob?await eo(i):i;return e}function to(r){if(Yn(r))return new Blob([r.bytes],{type:r.type});if(!Xn(r)||!Object.values(r).some(Yn))return r;let e={};for(let[t,i]of Object.entries(r))e[t]=Yn(i)?new Blob([i.bytes],{type:i.type}):i;return e}function zh(r){return new Promise(e=>{try{let t=r.transaction("records","readwrite"),i=t.objectStore("records").put({key:"\0blob-probe",value:new Blob([new Uint8Array(1)])});i.onsuccess=()=>{e(!0),t.abort()},i.onerror=n=>{n.preventDefault(),e(!1),t.abort()},t.onerror=n=>n.preventDefault()}catch{e(!1)}})}var Qn=(r,e,t)=>r.target?.error??e.error??new Error(t),_r=class r{db;storesBlobs;constructor(e,t){this.db=e,this.storesBlobs=t}static async open(e="long-screen-local"){let t=indexedDB.open(e,1);t.onupgradeneeded=()=>t.result.createObjectStore("records",{keyPath:"key"});let i=await new Promise((n,s)=>{t.onsuccess=()=>n(t.result),t.onerror=()=>s(t.error),t.onblocked=()=>s(new Error("Local database upgrade is blocked by another Long Screen tab. Close that tab and retry."))});return i.onversionchange=()=>i.close(),new r(i,await zh(i))}async get(e){let t=this.db.transaction("records","readonly"),i=t.objectStore("records").get(e);return new Promise((n,s)=>{i.onsuccess=()=>n(this.storesBlobs?i.result?.value:to(i.result?.value)),i.onerror=()=>s(i.error)})}async put(e,t){await this.putMany([{key:e,value:t}])}async putMany(e){if(!e.length)return;this.storesBlobs||(e=await Promise.all(e.map(async s=>({key:s.key,value:await Lh(s.value)}))));let t=this.db.transaction("records","readwrite"),i=t.objectStore("records"),n=new Promise((s,a)=>{t.oncomplete=()=>s(),t.onerror=o=>a(Qn(o,t,"Local storage transaction failed.")),t.onabort=()=>a(t.error||new Error("Local storage transaction aborted."))});for(let s of e)i.put(s);await n}async delete(e){await this.deleteMany([e])}async deleteMany(e){if(!e.length)return;let t=this.db.transaction("records","readwrite"),i=t.objectStore("records"),n=new Promise((s,a)=>{t.oncomplete=()=>s(),t.onabort=()=>a(t.error||new Error("Local storage transaction aborted.")),t.onerror=o=>a(Qn(o,t,"Local storage transaction failed."))});for(let s of e)i.delete(s);await n}async deletePrefix(e){let t=this.db.transaction("records","readwrite"),i=new Promise((n,s)=>{t.oncomplete=()=>n(),t.onabort=()=>s(t.error||new Error("Local storage transaction aborted.")),t.onerror=a=>s(Qn(a,t,"Local storage transaction failed."))});t.objectStore("records").delete(IDBKeyRange.bound(e,e+"\uFFFF")),await i}async scan(e,t={}){let{after:i,limit:n=16,reverse:s=!1}=t,a=s?IDBKeyRange.bound(e,i||e+"\uFFFF",!1,!!i):IDBKeyRange.bound(i||e,e+"\uFFFF",!!i,!1),o=this.db.transaction("records","readonly"),c=o.objectStore("records").openCursor(a,s?"prev":"next");return new Promise((l,h)=>{let d=[];c.onerror=()=>h(c.error),c.onsuccess=()=>{let u=c.result;if(!u||d.length>=n){l(d);return}let f=u.value;d.push(this.storesBlobs?f:{key:f.key,value:to(f.value)}),d.length>=n?l(d):u.continue()}})}close(){this.db.close()}},Wt=class{base;prefix;constructor(e,t){this.base=e,this.prefix=t}get(e){return this.base.get(this.prefix+e)}put(e,t){return this.base.put(this.prefix+e,t)}putMany(e){return this.base.putMany(e.map(t=>({key:this.prefix+t.key,value:t.value})))}delete(e){return this.base.delete(this.prefix+e)}deleteMany(e){return this.base.deleteMany(e.map(t=>this.prefix+t))}deletePrefix(e){return Ue(this.base,this.prefix+e)}async scan(e,t={}){return(await this.base.scan(this.prefix+e,{...t,after:t.after?this.prefix+t.after:void 0})).map(n=>({key:n.key.slice(this.prefix.length),value:n.value}))}};async function*X(r,e,t=!1,i=16){let n;for(;;){let s=await r.scan(e,{after:n,limit:i,reverse:t});if(!s.length)return;for(let a of s)yield a;n=s[s.length-1].key}}async function Ue(r,e){if(r.deletePrefix)return await r.deletePrefix(e);for(;;){let t=await r.scan(e,{limit:256});if(!t.length)return;await r.deleteMany(t.map(i=>i.key))}}var Pt=r=>`project/${r}`,Vh=(r,e)=>`project-index/${r}/${e}`,ro=r=>`run/${r}/`,pt=(r,e)=>new Wt(r,ro(e));async function io(r,e){let t=e.held??new Set,i=e.now??Date.now(),n;for await(let{value:a}of X(r,"project/",!1,64))!t.has(a.id)&&(!n||a.updated>n.updated)&&(n=a);let s=n&&i-Date.parse(n.updated)<e.maxAgeMs?n:void 0;return await yi(r,s?[...t,s.id]:t),s}async function yi(r,e=[]){let t=new Set(e);for(let n of["run/","project/"]){let s;for(;;){let[a]=await r.scan(n,{after:s,limit:1});if(!a)break;let o=a.key.slice(n.length).split("/")[0];t.has(o)||await Hh(r,o),s=`${n}${o}/\uFFFF`}}let i=[];for await(let n of X(r,"project-index/",!1,256))t.has(n.value)||i.push(n.key);await r.deleteMany(i)}async function Hh(r,e){let t=await r.get(Pt(e));await Ue(r,ro(e)),await r.delete(Pt(e)),t&&await r.delete(Vh(t.created,e))}var W=r=>typeof r=="string",Cr=()=>{let r,e,t=new Promise((i,n)=>{r=i,e=n});return t.resolve=r,t.reject=e,t},Zn=r=>r==null?"":String(r),Wh=(r,e,t)=>{r.forEach(i=>{e[i]&&(t[i]=e[i])})},Gh=/###/g,no=r=>r&&r.includes("###")?r.replace(Gh,"."):r,so=r=>!r||W(r),Rr=(r,e,t)=>{let i=W(e)?e.split("."):e,n=0;for(;n<i.length-1;){if(so(r))return{};let s=no(i[n]);!r[s]&&t&&(r[s]=new t),Object.prototype.hasOwnProperty.call(r,s)?r=r[s]:r={},++n}return so(r)?{}:{obj:r,k:no(i[n])}},ao=(r,e,t)=>{let{obj:i,k:n}=Rr(r,e,Object);if(i!==void 0||e.length===1){i[n]=t;return}let s=e[e.length-1],a=e.slice(0,e.length-1),o=Rr(r,a,Object);for(;o.obj===void 0&&a.length;)s=`${a[a.length-1]}.${s}`,a=a.slice(0,a.length-1),o=Rr(r,a,Object),o?.obj&&typeof o.obj[`${o.k}.${s}`]<"u"&&(o.obj=void 0);o.obj[`${o.k}.${s}`]=t},$h=(r,e,t,i)=>{let{obj:n,k:s}=Rr(r,e,Object);n[s]=n[s]||[],n[s].push(t)},bi=(r,e)=>{let{obj:t,k:i}=Rr(r,e);if(t&&Object.prototype.hasOwnProperty.call(t,i))return t[i]},qh=(r,e,t)=>{let i=bi(r,t);return i!==void 0?i:bi(e,t)},po=(r,e,t)=>{for(let i in e)i!=="__proto__"&&i!=="constructor"&&(Object.prototype.hasOwnProperty.call(r,i)?W(r[i])||r[i]instanceof String||W(e[i])||e[i]instanceof String?t&&(r[i]=e[i]):po(r[i],e[i],t):r[i]=e[i]);return r},et=r=>r.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),jh={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},Kh=r=>W(r)?r.replace(/[&<>"'\/]/g,e=>jh[e]):r,ts=class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){let t=this.regExpMap.get(e);if(t!==void 0)return t;let i=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,i),this.regExpQueue.push(e),i}},Yh=[" ",",","?","!",";"],Qh=new ts(20),Xh=(r,e,t)=>{e=e||"",t=t||"";let i=Yh.filter(a=>!e.includes(a)&&!t.includes(a));if(i.length===0)return!0;let n=Qh.getRegExp(`(${i.map(a=>a==="?"?"\\?":a).join("|")})`),s=!n.test(r);if(!s){let a=r.indexOf(t);a>0&&!n.test(r.substring(0,a))&&(s=!0)}return s},rs=(r,e,t=".")=>{if(!r)return;if(r[e])return Object.prototype.hasOwnProperty.call(r,e)?r[e]:void 0;let i=e.split(t),n=r;for(let s=0;s<i.length;){if(!n||typeof n!="object")return;let a,o="";for(let c=s;c<i.length;++c)if(c!==s&&(o+=t),o+=i[c],a=n[o],a!==void 0){if(["string","number","boolean"].includes(typeof a)&&c<i.length-1)continue;s+=c-s+1;break}n=a}return n},Pr=r=>r?.replace(/_/g,"-"),Zh={type:"logger",log(r){this.output("log",r)},warn(r){this.output("warn",r)},error(r){this.output("error",r)},output(r,e){console?.[r]?.apply?.(console,e)}},is=class r{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||"i18next:",this.logger=e||Zh,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,"log","",!0)}warn(...e){return this.forward(e,"warn","",!0)}error(...e){return this.forward(e,"error","")}deprecate(...e){return this.forward(e,"warn","WARNING DEPRECATED: ",!0)}forward(e,t,i,n){return n&&!this.debug?null:(e=e.map(s=>W(s)?s.replace(/[\r\n\x00-\x1F\x7F]/g," "):s),W(e[0])&&(e[0]=`${i}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new r(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new r(this.logger,e)}},Ge=new is,$t=class{constructor(){this.observers={}}on(e,t){return e.split(" ").forEach(i=>{this.observers[i]||(this.observers[i]=new Map);let n=this.observers[i].get(t)||0;this.observers[i].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}once(e,t){let i=(...n)=>{t(...n),this.off(e,i)};return this.on(e,i),this}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([n,s])=>{for(let a=0;a<s;a++)n(...t)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([n,s])=>{for(let a=0;a<s;a++)n(e,...t)})}},xi=class extends $t{constructor(e,t={ns:["translation"],defaultNS:"translation"}){super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.includes(e)||this.options.ns.push(e)}removeNamespaces(e){let t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,i,n={}){let s=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,a=n.ignoreJSONStructure!==void 0?n.ignoreJSONStructure:this.options.ignoreJSONStructure,o;e.includes(".")?o=e.split("."):(o=[e,t],i&&(Array.isArray(i)?o.push(...i):W(i)&&s?o.push(...i.split(s)):o.push(i)));let c=bi(this.data,o);return!c&&!t&&!i&&e.includes(".")&&(e=o[0],t=o[1],i=o.slice(2).join(".")),c||!a||!W(i)?c:rs(this.data?.[e]?.[t],i,s)}addResource(e,t,i,n,s={silent:!1}){let a=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator,o=[e,t];i&&(o=o.concat(a?i.split(a):i)),e.includes(".")&&(o=e.split("."),n=t,t=o[1]),this.addNamespaces(t),ao(this.data,o,n),s.silent||this.emit("added",e,t,i,n)}addResources(e,t,i,n={silent:!1}){for(let s in i)(W(i[s])||Array.isArray(i[s]))&&this.addResource(e,t,s,i[s],{silent:!0});n.silent||this.emit("added",e,t,i)}addResourceBundle(e,t,i,n,s,a={silent:!1,skipCopy:!1}){let o=[e,t];e.includes(".")&&(o=e.split("."),n=i,i=t,t=o[1]),this.addNamespaces(t);let c=bi(this.data,o)||{};a.skipCopy||(i=JSON.parse(JSON.stringify(i))),n?po(c,i,s):c={...c,...i},ao(this.data,o,c),a.silent||this.emit("added",e,t,i)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||(t=this.options.defaultNS),this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(n=>t[n]&&Object.keys(t[n]).length>0)}toJSON(){return this.data}},mo={processors:{},addPostProcessor(r){this.processors[r.name]=r},handle(r,e,t,i,n){return r.forEach(s=>{e=this.processors[s]?.process(e,t,i,n)??e}),e}},go=Symbol("i18next/PATH_KEY");function Jh(){let r=[],e=Object.create(null),t;return e.get=(i,n)=>(t?.revoke?.(),n===go?r:(r.push(n),t=Proxy.revocable(i,e),t.proxy)),Proxy.revocable(Object.create(null),e).proxy}function Gt(r,e){let{[go]:t}=r(Jh()),i=e?.keySeparator??".",n=e?.nsSeparator??":",s=e?.enableSelector==="strict";if(t.length>1&&n){let a=e?.ns,o=s?Array.isArray(a)?a:a?[a]:null:Array.isArray(a)?a:null;if(o&&(s?o:o.length>1?o.slice(1):[]).includes(t[0]))return`${t[0]}${n}${t.slice(1).join(i)}`}return t.join(i)}var Jn=r=>!W(r)&&typeof r!="boolean"&&typeof r!="number",Ai=class r extends $t{constructor(e,t={}){super(),Wh(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Ge.create("translator"),this.checkedLoadedFor={}}changeLanguage(e){e&&(this.language=e)}exists(e,t={interpolation:{}}){let i={...t};if(e==null)return!1;let n=this.resolve(e,i);if(n?.res===void 0)return!1;let s=Jn(n.res);return!(i.returnObjects===!1&&s)}extractFromKey(e,t){let i=t.nsSeparator!==void 0?t.nsSeparator:this.options.nsSeparator;i===void 0&&(i=":");let n=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator,s=t.ns||this.options.defaultNS||[],a=i&&e.includes(i),o=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!Xh(e,i,n);if(a&&!o){let c=e.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:e,namespaces:W(s)?[s]:s};let l=e.split(i);(i!==n||i===n&&this.options.ns.includes(l[0]))&&(s=l.shift()),e=l.join(n)}return{key:e,namespaces:W(s)?[s]:s}}translate(e,t,i){let n=typeof t=="object"?{...t}:t;if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),e==null)return"";typeof e=="function"&&(e=Gt(e,{...this.options,...n})),Array.isArray(e)||(e=[String(e)]),e=e.map(L=>typeof L=="function"?Gt(L,{...this.options,...n}):String(L));let s=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,a=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:o,namespaces:c}=this.extractFromKey(e[e.length-1],n),l=c[c.length-1],h=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;h===void 0&&(h=":");let d=n.lng||this.language,u=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(d?.toLowerCase()==="cimode")return u?s?{res:`${l}${h}${o}`,usedKey:o,exactUsedKey:o,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:`${l}${h}${o}`:s?{res:o,usedKey:o,exactUsedKey:o,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:o;let f=this.resolve(e,n),p=f?.res,g=f?.usedKey||o,y=f?.exactUsedKey||o,w=["[object Number]","[object Function]","[object RegExp]"],m=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,b=!this.i18nFormat||this.i18nFormat.handleAsObject,A=n.count!==void 0&&!W(n.count),T=r.hasDefaultValue(n),S=A?this.pluralResolver.getSuffix(d,n.count,n):"",x=n.ordinal&&A?this.pluralResolver.getSuffix(d,n.count,{ordinal:!1}):"",k=A&&!n.ordinal&&n.count===0,E=k&&n[`defaultValue${this.options.pluralSeparator}zero`]||n[`defaultValue${S}`]||n[`defaultValue${x}`]||n.defaultValue,_=p;b&&!p&&T&&(_=E);let N=Jn(_),F=Object.prototype.toString.apply(_);if(b&&_&&N&&!w.includes(F)&&!(W(m)&&Array.isArray(_))){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");let L=this.options.returnedObjectHandler?this.options.returnedObjectHandler(g,_,{...n,ns:c}):`key '${o} (${this.language})' returned an object instead of string.`;return s?(f.res=L,f.usedParams=this.getUsedParamsDetails(n),f):L}if(a){let L=Array.isArray(_),B=L?[]:{},I=L?y:g;for(let v in _)if(Object.prototype.hasOwnProperty.call(_,v)){let M=`${I}${a}${v}`;T&&!p?B[v]=this.translate(M,{...n,defaultValue:Jn(E)?E[v]:void 0,joinArrays:!1,ns:c}):B[v]=this.translate(M,{...n,joinArrays:!1,ns:c}),B[v]===M&&(B[v]=_[v])}p=B}}else if(b&&W(m)&&Array.isArray(p))p=p.join(m),p&&(p=this.extendTranslation(p,e,n,i));else{let L=!1,B=!1;!this.isValidLookup(p)&&T&&(L=!0,p=E),this.isValidLookup(p)||(B=!0,p=o);let v=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&B?void 0:p,M=T&&E!==p&&this.options.updateMissing;if(B||L||M){if(this.logger.log(M?"updateKey":"missingKey",d,l,A&&!M?`${o}${this.pluralResolver.getSuffix(d,n.count,n)}`:o,M?E:p),a){let $=this.resolve(o,{...n,keySeparator:!1});$&&$.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let z=[],U=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&U&&U[0])for(let $=0;$<U.length;$++)z.push(U[$]);else this.options.saveMissingTo==="all"?z=this.languageUtils.toResolveHierarchy(n.lng||this.language):z.push(n.lng||this.language);let j=($,Z,J)=>{let We=T&&J!==p?J:v;this.options.missingKeyHandler?this.options.missingKeyHandler($,l,Z,We,M,n):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing($,l,Z,We,M,n),this.emit("missingKey",$,l,Z,p)};this.options.saveMissing&&(this.options.saveMissingPlurals&&A?z.forEach($=>{let Z=this.pluralResolver.getSuffixes($,n);k&&n[`defaultValue${this.options.pluralSeparator}zero`]&&!Z.includes(`${this.options.pluralSeparator}zero`)&&Z.push(`${this.options.pluralSeparator}zero`),Z.forEach(J=>{j([$],o+J,n[`defaultValue${J}`]||E)})}):j(z,o,E))}p=this.extendTranslation(p,e,n,f,i),B&&p===o&&this.options.appendNamespaceToMissingKey&&(p=`${l}${h}${o}`),(B||L)&&this.options.parseMissingKeyHandler&&(p=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}${h}${o}`:o,L?p:void 0,n))}return s?(f.res=p,f.usedParams=this.getUsedParamsDetails(n),f):p}extendTranslation(e,t,i,n,s){if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...i},i.lng||this.language||n.usedLng,n.usedNS,n.usedKey,{resolved:n});else if(!i.skipInterpolation){i.interpolation&&this.interpolator.init({...i,interpolation:{...this.options.interpolation,...i.interpolation}});let c=W(e)&&(i?.interpolation?.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables),l;if(c){let d=e.match(this.interpolator.nestingRegexp);l=d&&d.length}let h=i.replace&&!W(i.replace)?i.replace:i;if(this.options.interpolation.defaultVariables&&(h={...this.options.interpolation.defaultVariables,...h}),e=this.interpolator.interpolate(e,h,i.lng||this.language||n.usedLng,i),c){let d=e.match(this.interpolator.nestingRegexp),u=d&&d.length;l<u&&(i.nest=!1)}!i.lng&&n&&n.res&&(i.lng=this.language||n.usedLng),i.nest!==!1&&(e=this.interpolator.nest(e,(...d)=>s?.[0]===d[0]&&!i.context?(this.logger.warn(`It seems you are nesting recursively key: ${d[0]} in key: ${t[0]}`),null):this.translate(...d,t),i)),i.interpolation&&this.interpolator.reset()}let a=i.postProcess||this.options.postProcess,o=W(a)?[a]:a;return e!=null&&o?.length&&i.applyPostProcessor!==!1&&(e=mo.handle(o,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...n,usedParams:this.getUsedParamsDetails(i)},...i}:i,this)),e}resolve(e,t={}){let i,n,s,a,o;return W(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(c=>typeof c=="function"?Gt(c,{...this.options,...t}):c)),e.forEach(c=>{if(this.isValidLookup(i))return;let l=this.extractFromKey(c,t),h=l.key;n=h;let d=l.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));let u=t.count!==void 0&&!W(t.count),f=u&&!t.ordinal&&t.count===0,p=t.context!==void 0&&(W(t.context)||typeof t.context=="number")&&t.context!=="",g=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);d.forEach(y=>{this.isValidLookup(i)||(o=y,!this.checkedLoadedFor[`${g[0]}-${y}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(o)&&(this.checkedLoadedFor[`${g[0]}-${y}`]=!0,this.logger.warn(`key "${n}" for languages "${g.join(", ")}" won't get resolved as namespace "${o}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),g.forEach(w=>{if(this.isValidLookup(i))return;a=w;let m=[h];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(m,h,w,y,t);else{let A;u&&(A=this.pluralResolver.getSuffix(w,t.count,t));let T=`${this.options.pluralSeparator}zero`,S=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(u&&(t.ordinal&&A.startsWith(S)&&m.push(h+A.replace(S,this.options.pluralSeparator)),m.push(h+A),f&&m.push(h+T)),p){let x=`${h}${this.options.contextSeparator||"_"}${t.context}`;m.push(x),u&&(t.ordinal&&A.startsWith(S)&&m.push(x+A.replace(S,this.options.pluralSeparator)),m.push(x+A),f&&m.push(x+T))}}let b;for(;b=m.pop();)this.isValidLookup(i)||(s=b,i=this.getResource(w,y,b,t))}))})}),{res:i,usedKey:n,exactUsedKey:s,usedLng:a,usedNS:o}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,t,i,n={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,t,i,n):this.resourceStore.getResource(e,t,i,n)}getUsedParamsDetails(e={}){let t=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],i=e.replace&&!W(e.replace),n=i?e.replace:e;if(i&&typeof e.count<"u"&&(n={...n,count:e.count}),this.options.interpolation.defaultVariables&&(n={...this.options.interpolation.defaultVariables,...n}),!i){n={...n};for(let s of t)delete n[s]}return n}static hasDefaultValue(e){let t="defaultValue";for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)&&i.startsWith(t)&&e[i]!==void 0)return!0;return!1}},ki=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Ge.create("languageUtils"),this.resolveHierarchyCache={}}clearCache(){this.resolveHierarchyCache={}}getScriptPartFromCode(e){if(e=Pr(e),!e||!e.includes("-"))return null;let t=e.split("-");return t.length===2||(t.pop(),t[t.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(t.join("-"))}getLanguagePartFromCode(e){if(e=Pr(e),!e||!e.includes("-"))return e;let t=e.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(W(e)&&e.includes("-")){let t;try{t=Intl.getCanonicalLocales(e)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(e)}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(i=>{if(t)return;let n=this.formatLanguageCode(i);(!this.options.supportedLngs||this.isSupportedCode(n))&&(t=n)}),!t&&this.options.supportedLngs&&e.forEach(i=>{if(t)return;let n=this.getScriptPartFromCode(i);if(this.isSupportedCode(n))return t=n;let s=this.getLanguagePartFromCode(i);if(this.isSupportedCode(s))return t=s;t=this.options.supportedLngs.find(a=>a===s?!0:!a.includes("-")&&!s.includes("-")?!1:!!(a.includes("-")&&!s.includes("-")&&a.slice(0,a.indexOf("-"))===s||a.startsWith(s)&&s.length>1))}),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(e,t){if(!e)return[];if(typeof e=="function"&&(e=e(t)),W(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let i=e[t];return i||(i=e[this.getScriptPartFromCode(t)]),i||(i=e[this.formatLanguageCode(t)]),i||(i=e[this.getLanguagePartFromCode(t)]),i||(i=e.default),i||[]}toResolveHierarchy(e,t){let i=this.options.fallbackLng,n=Array.isArray(i)?i.join("|"):i;n!==this._cachedFallbackLng&&(this.resolveHierarchyCache={},this._cachedFallbackLng=n);let s=t===void 0||t===!1||W(t),a=t===void 0&&typeof this.options.fallbackLng=="function",o=W(e)&&s&&!a,c=null;if(o){let u;t===void 0?u="undefined":t===!1?u="boolean:false":u=`string:${t}`,c=`${e.length}:${e}|${u}`}if(c!==null){let u=this.resolveHierarchyCache[c];if(u!==void 0)return u.slice()}let l=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],e),h=[],d=u=>{u&&(this.isSupportedCode(u)?h.push(u):this.logger.warn(`rejecting language code not found in supportedLngs: ${u}`))};return W(e)&&(e.includes("-")||e.includes("_"))?(this.options.load!=="languageOnly"&&d(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&d(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&d(this.getLanguagePartFromCode(e))):W(e)&&d(this.formatLanguageCode(e)),l.forEach(u=>{h.includes(u)||d(this.formatLanguageCode(u))}),c!==null?(this.resolveHierarchyCache[c]=h,h.slice()):h}},oo={zero:0,one:1,two:2,few:3,many:4,other:5},co={select:r=>r===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})},ns=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=Ge.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let i=Pr(e==="dev"?"en":e),n=t.ordinal?"ordinal":"cardinal",s=JSON.stringify({cleanedCode:i,type:n});if(s in this.pluralRulesCache)return this.pluralRulesCache[s];let a;try{a=new Intl.PluralRules(i,{type:n})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),co;if(!e.match(/-|_/))return co;let c=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(c,t)}return this.pluralRulesCache[s]=a,a}needsPlural(e,t={}){let i=this.getRule(e,t);return i||(i=this.getRule("dev",t)),i?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,t,i={}){return this.getSuffixes(e,i).map(n=>`${t}${n}`)}getSuffixes(e,t={}){let i=this.getRule(e,t);return i||(i=this.getRule("dev",t)),i?i.resolvedOptions().pluralCategories.sort((n,s)=>oo[n]-oo[s]).map(n=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${n}`):[]}getSuffix(e,t,i={}){let n=this.getRule(e,i);return n?`${this.options.prepend}${i.ordinal?`ordinal${this.options.prepend}`:""}${n.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix("dev",t,i))}},lo=(r,e,t,i=".",n=!0)=>{let s=qh(r,e,t);return!s&&n&&W(t)&&(s=rs(r,t,i),s===void 0&&(s=rs(e,t,i))),s},ho=r=>r.replace(/\$/g,"$$$$"),Si=class{constructor(e={}){this.logger=Ge.create("interpolator"),this.options=e,this.format=e?.interpolation?.format||(t=>t),this.init(e)}init(e={}){e.interpolation||(e.interpolation={escapeValue:!0});let{escape:t,escapeValue:i,useRawValueToEscape:n,prefix:s,prefixEscaped:a,suffix:o,suffixEscaped:c,formatSeparator:l,unescapeSuffix:h,unescapePrefix:d,nestingPrefix:u,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:g,nestingOptionsSeparator:y,maxReplaces:w,alwaysFormat:m}=e.interpolation;this.escape=t!==void 0?t:Kh,this.escapeValue=i!==void 0?i:!0,this.useRawValueToEscape=n!==void 0?n:!1,this.prefix=s?et(s):a||"{{",this.suffix=o?et(o):c||"}}",this.formatSeparator=l||",",this.unescapePrefix=h?"":d?et(d):"-",this.unescapeSuffix=this.unescapePrefix?"":h?et(h):"",this.nestingPrefix=u?et(u):f||et("$t("),this.nestingSuffix=p?et(p):g||et(")"),this.nestingOptionsSeparator=y||",",this.maxReplaces=w||1e3,this.alwaysFormat=m!==void 0?m:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(t,i)=>t?.source===i?(t.lastIndex=0,t):new RegExp(i,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,t,i,n){let s,a,o,c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},l=f=>{if(!f.includes(this.formatSeparator)){let w=lo(t,c,f,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(w,void 0,i,{...n,...t,interpolationkey:f}):w}let p=f.split(this.formatSeparator),g=p.shift().trim(),y=p.join(this.formatSeparator).trim();return this.format(lo(t,c,g,this.options.keySeparator,this.options.ignoreJSONStructure),y,i,{...n,...t,interpolationkey:g})};this.resetRegExp(),!this.escapeValue&&typeof e=="string"&&/\$t\([^)]*\{[^}]*\{\{/.test(e)&&this.logger.warn("nesting options string contains interpolated variables with escapeValue: false \u2014 if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.");let h=n?.missingInterpolationHandler||this.options.missingInterpolationHandler,d=n?.interpolation?.skipOnVariables!==void 0?n.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:f=>f},{regex:this.regexp,safeValue:f=>this.escapeValue?this.escape(f):f}].forEach(f=>{for(o=0;s=f.regex.exec(e);){let p=s[1].trim();if(a=l(p),a===void 0)if(typeof h=="function"){let y=h(e,s,n);a=W(y)?y:""}else if(n&&Object.prototype.hasOwnProperty.call(n,p))a="";else if(d){a=s[0];continue}else this.logger.warn(`missed to pass in variable ${p} for interpolating ${e}`),a="";else!W(a)&&!this.useRawValueToEscape&&(a=Zn(a));let g=f.safeValue(a);if(e=e.replace(s[0],ho(g)),d?(f.regex.lastIndex+=g.length,f.regex.lastIndex-=s[0].length):f.regex.lastIndex=0,o++,o>=this.maxReplaces)break}}),e}nest(e,t,i={}){let n,s,a,o=(c,l)=>{let h=this.nestingOptionsSeparator;if(!c.includes(h))return c;let d=c.split(new RegExp(`${et(h)}[ ]*{`)),u=`{${d[1]}`;c=d[0],u=this.interpolate(u,a);let f=u.match(/'/g),p=u.match(/"/g);((f?.length??0)%2===0&&!p||(p?.length??0)%2!==0)&&(u=u.replace(/'/g,'"'));try{a=JSON.parse(u),l&&(a={...l,...a})}catch(g){return this.logger.warn(`failed parsing options string in nesting for key ${c}`,g),`${c}${h}${u}`}return a.defaultValue&&a.defaultValue.includes(this.prefix)&&delete a.defaultValue,c};for(;n=this.nestingRegexp.exec(e);){let c=[];a={...i},a=a.replace&&!W(a.replace)?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let l=/{.*}/s.test(n[1])?n[1].lastIndexOf("}")+1:n[1].indexOf(this.formatSeparator);if(l!==-1&&(c=n[1].slice(l).split(this.formatSeparator).map(h=>h.trim()).filter(Boolean),n[1]=n[1].slice(0,l)),s=t(o.call(this,n[1].trim(),a),a),s&&n[0]===e&&!W(s))return s;W(s)||(s=Zn(s)),s||(this.logger.warn(`missed to resolve ${n[1]} for nesting ${e}`),s=""),c.length&&(s=c.reduce((h,d)=>this.format(h,d,i.lng,{...i,interpolationkey:n[1].trim()}),s.trim())),e=e.replace(n[0],ho(Zn(s))),this.regexp.lastIndex=0}return e}},eu=r=>{let e=r.toLowerCase().trim(),t={};if(r.includes("(")){let i=r.split("(");e=i[0].toLowerCase().trim();let n=i[1].slice(0,-1);e==="currency"&&!n.includes(":")?t.currency||(t.currency=n.trim()):e==="relativetime"&&!n.includes(":")?t.range||(t.range=n.trim()):n.split(";").forEach(a=>{if(a){let[o,...c]=a.split(":"),l=c.join(":").trim().replace(/^'+|'+$/g,""),h=o.trim();t[h]||(t[h]=l),l==="false"&&(t[h]=!1),l==="true"&&(t[h]=!0),isNaN(l)||(t[h]=parseInt(l,10))}})}return{formatName:e,formatOptions:t}},uo=r=>{let e={};return(t,i,n)=>{let s=n;n&&n.interpolationkey&&n.formatParams&&n.formatParams[n.interpolationkey]&&n[n.interpolationkey]&&(s={...s,[n.interpolationkey]:void 0});let a=i+JSON.stringify(s),o=e[a];return o||(o=r(Pr(i),n),e[a]=o),o(t)}},tu=r=>(e,t,i)=>r(Pr(t),i)(e),ss=class{constructor(e={}){this.logger=Ge.create("formatter"),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||",";let i=t.cacheInBuiltFormats?uo:tu;this.formats={number:i((n,s)=>{let a=new Intl.NumberFormat(n,{...s});return o=>a.format(o)}),currency:i((n,s)=>{let a=new Intl.NumberFormat(n,{...s,style:"currency"});return o=>a.format(o)}),datetime:i((n,s)=>{let a=new Intl.DateTimeFormat(n,{...s});return o=>a.format(o)}),relativetime:i((n,s)=>{let a=new Intl.RelativeTimeFormat(n,{...s});return o=>a.format(o,s.range||"day")}),list:i((n,s)=>{let a=new Intl.ListFormat(n,{...s});return o=>a.format(o)})}}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=uo(t)}format(e,t,i,n={}){if(!t||e==null)return e;let s=t.split(this.formatSeparator),a=[];for(let c=0;c<s.length;c++){let l=s[c];for(;l.indexOf("(")>-1&&!l.includes(")")&&c+1<s.length;)l=`${l}${this.formatSeparator}${s[++c]}`;a.push(l)}return a.reduce((c,l)=>{let{formatName:h,formatOptions:d}=eu(l);if(this.formats[h]){let u=c;try{let f=n?.formatParams?.[n.interpolationkey]||{},p=f.locale||f.lng||n.locale||n.lng||i;u=this.formats[h](c,p,{...d,...n,...f})}catch(f){this.logger.warn(f)}return u}else this.logger.warn(`there was no format function for ${h}`);return c},e)}},ru=(r,e)=>{r.pending[e]!==void 0&&(delete r.pending[e],r.pendingCount--)},as=class extends $t{constructor(e,t,i,n={}){super(),this.backend=e,this.store=t,this.services=i,this.languageUtils=i.languageUtils,this.options=n,this.logger=Ge.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=n.maxParallelReads||10,this.readingCalls=0,this.maxRetries=n.maxRetries>=0?n.maxRetries:5,this.retryTimeout=n.retryTimeout>=1?n.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(i,n.backend,n)}queueLoad(e,t,i,n){let s={},a={},o={},c={};return e.forEach(l=>{let h=!0;t.forEach(d=>{let u=`${l}|${d}`;!i.reload&&this.store.hasResourceBundle(l,d)?this.state[u]=2:this.state[u]<0||(this.state[u]===1?a[u]===void 0&&(a[u]=!0):(this.state[u]=1,h=!1,a[u]===void 0&&(a[u]=!0),s[u]===void 0&&(s[u]=!0),c[d]===void 0&&(c[d]=!0)))}),h||(o[l]=!0)}),(Object.keys(s).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:n}),{toLoad:Object.keys(s),pending:Object.keys(a),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(c)}}loaded(e,t,i){let n=e.split("|"),s=n[0],a=n[1];t&&this.emit("failedLoading",s,a,t),!t&&i&&this.store.addResourceBundle(s,a,i,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&i&&(this.state[e]=0);let o={};this.queue.forEach(c=>{$h(c.loaded,[s],a),ru(c,e),t&&c.errors.push(t),c.pendingCount===0&&!c.done&&(Object.keys(c.loaded).forEach(l=>{o[l]||(o[l]={});let h=c.loaded[l];h.length&&h.forEach(d=>{o[l][d]===void 0&&(o[l][d]=!0)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",o),this.queue=this.queue.filter(c=>!c.done)}read(e,t,i,n=0,s=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:i,tried:n,wait:s,callback:a});return}this.readingCalls++;let o=(l,h)=>{if(this.readingCalls--,this.waitingReads.length>0){let d=this.waitingReads.shift();this.read(d.lng,d.ns,d.fcName,d.tried,d.wait,d.callback)}if(l&&h&&n<this.maxRetries){setTimeout(()=>{this.read(e,t,i,n+1,s*2,a)},s);return}a(l,h)},c=this.backend[i].bind(this.backend);if(c.length===2){try{let l=c(e,t);l&&typeof l.then=="function"?l.then(h=>o(null,h)).catch(o):o(null,l)}catch(l){o(l)}return}return c(e,t,o)}prepareLoading(e,t,i={},n){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),n&&n();W(e)&&(e=this.languageUtils.toResolveHierarchy(e)),W(t)&&(t=[t]);let s=this.queueLoad(e,t,i,n);if(!s.toLoad.length)return s.pending.length||n(),null;s.toLoad.forEach(a=>{this.loadOne(a)})}load(e,t,i){this.prepareLoading(e,t,{},i)}reload(e,t,i){this.prepareLoading(e,t,{reload:!0},i)}loadOne(e,t=""){let i=e.split("|"),n=i[0],s=i[1];this.read(n,s,"read",void 0,void 0,(a,o)=>{a&&this.logger.warn(`${t}loading namespace ${s} for language ${n} failed`,a),!a&&o&&this.logger.log(`${t}loaded namespace ${s} for language ${n}`,o),this.loaded(e,a,o)})}saveMissing(e,t,i,n,s,a={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${i}" as the namespace "${t}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(i==null||i==="")){if(this.backend?.create){let c={...a,isUpdate:s},l=this.backend.create.bind(this.backend);if(l.length<6)try{let h;l.length===5?h=l(e,t,i,n,c):h=l(e,t,i,n),h&&typeof h.then=="function"?h.then(d=>o(null,d)).catch(o):o(null,h)}catch(h){o(h)}else l(e,t,i,n,o,c)}!e||!e[0]||this.store.addResource(e[0],t,i,n)}}},es=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:r=>{let e={};if(typeof r[1]=="object"&&(e=r[1]),W(r[1])&&(e.defaultValue=r[1]),W(r[2])&&(e.tDescription=r[2]),typeof r[2]=="object"||typeof r[3]=="object"){let t=r[3]||r[2];Object.keys(t).forEach(i=>{e[i]=t[i]})}return e},interpolation:{escapeValue:!0,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),fo=r=>(W(r.ns)&&(r.ns=[r.ns]),W(r.fallbackLng)&&(r.fallbackLng=[r.fallbackLng]),W(r.fallbackNS)&&(r.fallbackNS=[r.fallbackNS]),r.supportedLngs&&!r.supportedLngs.includes("cimode")&&(r.supportedLngs=r.supportedLngs.concat(["cimode"])),r),wi=()=>{},iu=r=>{Object.getOwnPropertyNames(Object.getPrototypeOf(r)).forEach(t=>{typeof r[t]=="function"&&(r[t]=r[t].bind(r))})},os=class r extends $t{constructor(e={},t){if(super(),this.options=fo(e),this.services={},this.logger=Ge,this.modules={external:[]},iu(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(e={},t){this.isInitializing=!0,typeof e=="function"&&(t=e,e={}),e.defaultNS==null&&e.ns&&(W(e.ns)?e.defaultNS=e.ns:e.ns.includes("translation")||(e.defaultNS=e.ns[0]));let i=es();this.options={...i,...this.options,...fo(e)},this.options.interpolation={...i.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=i.overloadTranslationOptionHandler);let n=l=>l?typeof l=="function"?new l:l:null;if(!this.options.isClone){this.modules.logger?Ge.init(n(this.modules.logger),this.options):Ge.init(null,this.options);let l;this.modules.formatter?l=this.modules.formatter:l=ss;let h=new ki(this.options);this.store=new xi(this.options.resources,this.options);let d=this.services;d.logger=Ge,d.resourceStore=this.store,d.languageUtils=h,d.pluralResolver=new ns(h,{prepend:this.options.pluralSeparator}),l&&(d.formatter=n(l),d.formatter.init&&d.formatter.init(d,this.options),this.options.interpolation.format=d.formatter.format.bind(d.formatter)),d.interpolator=new Si(this.options),d.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},d.backendConnector=new as(n(this.modules.backend),d.resourceStore,d,this.options),d.backendConnector.on("*",(u,...f)=>{this.emit(u,...f)}),this.modules.languageDetector&&(d.languageDetector=n(this.modules.languageDetector),d.languageDetector.init&&d.languageDetector.init(d,this.options.detection,this.options)),this.modules.i18nFormat&&(d.i18nFormat=n(this.modules.i18nFormat),d.i18nFormat.init&&d.i18nFormat.init(this)),this.translator=new Ai(this.services,this.options),this.translator.on("*",(u,...f)=>{this.emit(u,...f)}),this.modules.external.forEach(u=>{u.init&&u.init(this)})}if(this.format=this.options.interpolation.format,t||(t=wi),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let l=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);l.length>0&&l[0]!=="dev"&&(this.options.lng=l[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(l=>{this[l]=(...h)=>this.store[l](...h)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(l=>{this[l]=(...h)=>(this.store[l](...h),this)});let o=Cr(),c=()=>{let l=(h,d)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),o.resolve(d),t(h,d)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return l(null,this.t.bind(this));this.changeLanguage(this.options.lng,l)};return this.options.resources||!this.options.initAsync?c():setTimeout(c,0),o}loadResources(e,t=wi){let i=t,n=W(e)?e:this.language;if(typeof e=="function"&&(i=e),!this.options.resources||this.options.partialBundledLanguages){if(n?.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return i();let s=[],a=o=>{if(!o||o==="cimode")return;this.services.languageUtils.toResolveHierarchy(o).forEach(l=>{l!=="cimode"&&(s.includes(l)||s.push(l))})};n?a(n):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(c=>a(c)),this.options.preload?.forEach?.(o=>a(o)),this.services.backendConnector.load(s,this.options.ns,o=>{!o&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),i(o)})}else i(null)}reloadResources(e,t,i){let n=Cr();return typeof e=="function"&&(i=e,e=void 0),typeof t=="function"&&(i=t,t=void 0),e||(e=this.languages),t||(t=this.options.ns),i||(i=wi),this.services.backendConnector.reload(e,t,s=>{n.resolve(),i(s)}),n}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&mo.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!["cimode","dev"].includes(e)){for(let t=0;t<this.languages.length;t++){let i=this.languages[t];if(!["cimode","dev"].includes(i)&&this.store.hasLanguageSomeTranslations(i)){this.resolvedLanguage=i;break}}!this.resolvedLanguage&&!this.languages.includes(e)&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,t){this.isLanguageChangingTo=e;let i=Cr();this.emit("languageChanging",e);let n=o=>{this.language=o,this.languages=this.services.languageUtils.toResolveHierarchy(o),this.resolvedLanguage=void 0,this.setResolvedLanguage(o)},s=(o,c)=>{c?this.isLanguageChangingTo===e&&(n(c),this.translator.changeLanguage(c),this.isLanguageChangingTo=void 0,this.emit("languageChanged",c),this.logger.log("languageChanged",c)):this.isLanguageChangingTo=void 0,i.resolve((...l)=>this.t(...l)),t&&t(o,(...l)=>this.t(...l))},a=o=>{!e&&!o&&this.services.languageDetector&&(o=[]);let c=W(o)?o:o&&o[0],l=this.store.hasLanguageSomeTranslations(c)?c:this.services.languageUtils.getBestMatchFromCodes(W(o)?[o]:o);l&&(this.language||n(l),this.translator.language||this.translator.changeLanguage(l),this.services.languageDetector?.cacheUserLanguage?.(l)),this.loadResources(l,h=>{s(h,l)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(e),i}getFixedT(e,t,i,n){let s=n?.scopeNs,a=(o,c,...l)=>{let h;typeof c!="object"?h=this.options.overloadTranslationOptionHandler([o,c].concat(l)):h={...c},h.lng=h.lng||a.lng,h.lngs=h.lngs||a.lngs;let d=h.ns!==void 0&&h.ns!==null;h.ns=h.ns||a.ns,h.keyPrefix!==""&&(h.keyPrefix=h.keyPrefix||i||a.keyPrefix);let u={...this.options,...h};Array.isArray(s)&&!d&&(u.ns=s),typeof h.keyPrefix=="function"&&(h.keyPrefix=Gt(h.keyPrefix,u));let f=this.options.keySeparator||".",p;return h.keyPrefix&&Array.isArray(o)?p=o.map(g=>(typeof g=="function"&&(g=Gt(g,u)),`${h.keyPrefix}${f}${g}`)):(typeof o=="function"&&(o=Gt(o,u)),p=h.keyPrefix?`${h.keyPrefix}${f}${o}`:o),this.t(p,h)};return W(e)?a.lng=e:a.lngs=e,a.ns=t,a.keyPrefix=i,a}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;let i=t.lng||this.resolvedLanguage||this.languages[0],n=this.options?this.options.fallbackLng:!1,s=this.languages[this.languages.length-1];if(i.toLowerCase()==="cimode")return!0;let a=(o,c)=>{let l=this.services.backendConnector.state[`${o}|${c}`];return l===-1||l===0||l===2};if(t.precheck){let o=t.precheck(this,a);if(o!==void 0)return o}return!!(this.hasResourceBundle(i,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(i,e)&&(!n||a(s,e)))}loadNamespaces(e,t){let i=Cr();return this.options.ns?(W(e)&&(e=[e]),e.forEach(n=>{this.options.ns.includes(n)||this.options.ns.push(n)}),this.loadResources(n=>{i.resolve(),t&&t(n)}),i):(t&&t(),Promise.resolve())}loadLanguages(e,t){let i=Cr();W(e)&&(e=[e]);let n=this.options.preload||[],s=e.filter(a=>!n.includes(a)&&this.services.languageUtils.isSupportedCode(a));return s.length?(this.options.preload=n.concat(s),this.loadResources(a=>{i.resolve(),t&&t(a)}),i):(t&&t(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language)),!e)return"rtl";try{let n=new Intl.Locale(e);if(n&&n.getTextInfo){let s=n.getTextInfo();if(s&&s.direction)return s.direction}}catch{}let t=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],i=this.services?.languageUtils||new ki(es());return e.toLowerCase().indexOf("-latn")>1?"ltr":t.includes(i.getLanguagePartFromCode(e))||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(e={},t){let i=new r(e,t);return i.createInstance=r.createInstance,i}cloneInstance(e={},t=wi){let i=e.forkResourceStore;i&&delete e.forkResourceStore;let n={...this.options,...e,isClone:!0},s=new r(n);if((e.debug!==void 0||e.prefix!==void 0)&&(s.logger=s.logger.clone(e)),["store","services","language"].forEach(o=>{s[o]=this[o]}),s.services={...this.services},s.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},i){let o=Object.keys(this.store.data).reduce((c,l)=>(c[l]={...this.store.data[l]},c[l]=Object.keys(c[l]).reduce((h,d)=>(h[d]={...c[l][d]},h),c[l]),c),{});s.store=new xi(o,n),s.services.resourceStore=s.store}if(e.interpolation){let c={...es().interpolation,...this.options.interpolation,...e.interpolation},l={...n,interpolation:c};s.services.interpolator=new Si(l)}return s.translator=new Ai(s.services,n),s.translator.on("*",(o,...c)=>{s.emit(o,...c)}),s.init(n,t),s.translator.options=n,s.translator.backendConnector.services.utils={hasLoadedNamespace:s.hasLoadedNamespace.bind(s)},s}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}},xe=os.createInstance(),Rm=xe.createInstance,Pm=xe.dir,Im=xe.init,Fm=xe.loadResources,Bm=xe.reloadResources,Dm=xe.use,Om=xe.changeLanguage,Mm=xe.getFixedT,Nm=xe.t,Um=xe.exists,Lm=xe.setDefaultNamespace,zm=xe.hasLoadedNamespace,Vm=xe.loadNamespaces,Hm=xe.loadLanguages;var yo={language:{label:"\u754C\u9762\u8BED\u8A00",saveFailed:"\u65E0\u6CD5\u4FDD\u5B58\u8BED\u8A00\u8BBE\u7F6E\uFF1A\u6D4F\u89C8\u5668\u7981\u6B62\u4E86\u672C\u5730\u5B58\u50A8\u3002"},page:{title:"Long Screen \u2014 \u628A\u5F55\u5C4F\u62FC\u6210\u4E00\u6574\u5F20\u5927\u622A\u56FE",description:"\u628A\u4E00\u6BB5\u5F55\u5C4F\u62FC\u6210\u4E00\u6574\u5F20\u539F\u5C3A\u5BF8\u5927\u622A\u56FE\uFF1A\u6EDA\u52A8\u3001\u5E73\u79FB\u3001\u659C\u7740\u8D70\u3001\u505C\u987F\u3001\u7ED5\u56DE\u53BB\u90FD\u884C\uFF0C\u4E0D\u53EA\u662F\u4E0A\u4E0B\u6EDA\u52A8\u3002\u56FA\u5B9A\u7684\u7A97\u53E3\u8FB9\u6846\u548C\u72B6\u6001\u680F\u4E5F\u4F1A\u8FD8\u539F\u3002\u5168\u7A0B\u5728\u6D4F\u89C8\u5668\u672C\u5730\u5B8C\u6210\uFF0C\u4E0D\u4E0A\u4F20\u3002",closeLabel:"\u5173\u95ED",header:{brandLabel:"Long Screen \u9996\u9875",slogan:"\u4EFB\u610F\u8DEF\u5F84 \xB7 \u4E00\u6574\u5F20\u5927\u622A\u56FE",privacy:"\u672C\u5730\u5904\u7406\uFF0C\u4E0D\u4E0A\u4F20",helpLabel:"\u5E2E\u52A9\u4E0E\u80FD\u529B\u8BF4\u660E",star:"\u5728 GitHub \u70B9\u661F",starLabel:"\u5728 GitHub \u70B9\u661F\uFF08\u65B0\u6807\u7B7E\u9875\u6253\u5F00\uFF09",install:"\u5B89\u88C5\u5230\u672C\u5730",installTitle:"\u628A Long Screen \u88C5\u5230\u8FD9\u53F0\u8BBE\u5907\u4E0A\uFF08PWA\uFF09\uFF1A\u50CF App \u4E00\u6837\u6253\u5F00\uFF0C\u65AD\u7F51\u4E5F\u80FD\u7528"},install:{title:"\u5B89\u88C5\u5230\u672C\u5730",intro:"Long Screen \u53EF\u4EE5\u88C5\u6210 PWA\uFF08\u7F51\u9875\u5E94\u7528\uFF09\uFF1A\u4ECE\u4E3B\u5C4F\u5E55\u6216\u7A0B\u5E8F\u575E\u6253\u5F00\uFF0C\u6709\u81EA\u5DF1\u7684\u7A97\u53E3\uFF0C\u6CA1\u7F51\u4E5F\u80FD\u7528\u3002\u5F55\u5C4F\u7167\u6837\u53EA\u5728\u8FD9\u53F0\u8BBE\u5907\u4E0A\u5904\u7406\u3002",iosShare:"\u70B9\u6D4F\u89C8\u5668\u7684\u5206\u4EAB\u6309\u94AE\u3002Safari \u7684\u5728\u5E95\u90E8\u5DE5\u5177\u680F\uFF0C\u6216\u6536\u5728\u300C\u22EF\u300D\u91CC\u3002",iosAdd:"\u5F80\u4E0B\u627E\u5230\u300C\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u300D\u3002",iosConfirm:"\u70B9\u300C\u6DFB\u52A0\u300D\u3002",iosInApp:"\u5982\u679C\u7F51\u9875\u662F\u5728\u5FAE\u4FE1\u3001LINE \u8FD9\u7C7B App \u91CC\u6253\u5F00\u7684\uFF0C\u5148\u6362\u5230 Safari \u518D\u88C5\u3002",macFile:"\u5728\u5C4F\u5E55\u9876\u90E8\u7684\u83DC\u5355\u680F\u9009\u300C\u6587\u4EF6\u300D\u2192\u300C\u6DFB\u52A0\u5230\u7A0B\u5E8F\u575E\u300D\u3002",macConfirm:"\u70B9\u300C\u6DFB\u52A0\u300D\u3002",offline:"\u88C5\u597D\u540E\u5148\u8054\u7F51\u6253\u5F00\u4E00\u6B21\uFF0C\u4E4B\u540E\u65AD\u7F51\u4E5F\u80FD\u7528\u3002"},hero:{heading:'\u628A\u4E00\u6BB5\u5F55\u5C4F\uFF0C<br>\u62FC\u6210<span class="hl">\u4E00\u6574\u5F20\u5927\u622A\u56FE</span>\u3002',intro:"\u5BF9\u7740\u7F51\u9875\u3001App\u3001\u5730\u56FE\u6216\u8BBE\u8BA1\u7A3F\u5F55\u5C4F\uFF0C\u6EDA\u52A8\u3001\u5E73\u79FB\u3001\u659C\u7740\u8D70\u3001\u7ED5\u56DE\u53BB\u90FD\u884C\u3002\u5F55\u5C4F\u91CC\u51FA\u73B0\u8FC7\u7684\u753B\u9762\u4F1A\u88AB\u62FC\u56DE\u539F\u4F4D\uFF0C\u5F97\u5230\u4E00\u5F20\u539F\u5C3A\u5BF8 PNG\uFF0C\u56FA\u5B9A\u7684\u7A97\u53E3\u8FB9\u6846\u548C\u72B6\u6001\u680F\u4E5F\u4F1A\u8FD8\u539F\u3002\u5168\u7A0B\u5728\u6D4F\u89C8\u5668\u672C\u5730\u5B8C\u6210\uFF0C\u4E0D\u4E0A\u4F20\u3002",demoLead:"\u60F3\u5148\u770B\u770B\u6548\u679C\uFF1F",demoChip:"\u653E\u4E00\u6BB5\u793A\u4F8B\u5F55\u5C4F"},steps:{ariaLabel:"\u600E\u4E48\u7528",recordTitle:"\u5F55\u4E00\u6BB5",recordBody:"\u5728\u7F51\u9875\u3001App \u6216\u5730\u56FE\u4E0A\u5F55\u5C4F\uFF0C\u968F\u4FBF\u600E\u4E48\u79FB\u52A8\u90FD\u884C\u3002",feedTitle:"\u5582\u8FDB\u53BB",feedBody:"\u628A\u89C6\u9891\u62D6\u5230\u6253\u5370\u673A\u7684\u5C4F\u5E55\u4E0A\uFF0C\u6309\u300C\u8FD0\u884C\u300D\u3002",takeTitle:"\u62FF\u6574\u5F20",takeBody:"\u62FF\u8D70\u4E00\u6574\u5F20\u539F\u5C3A\u5BF8\u5927\u622A\u56FE\uFF1B\u6CA1\u62CD\u5230\u7684\u5730\u65B9\u7559\u7A7A\u3002"},press:{ariaLabel:"\u6253\u5370\u673A",build:"\u7248\u672C"},screen:{dropTitle:"\u628A\u5F55\u5C4F\u62D6\u5230\u8FD9\u91CC",dropHint:"\u6216\u70B9\u4E00\u4E0B\u9009\u62E9\u6587\u4EF6 \xB7 MP4 \xB7 MOV \xB7 WebM"},observe:{dropTitle:"\u8FD8\u6CA1\u653E\u5F55\u5C4F",dropSubtitle:"MP4 \xB7 MOV \xB7 WebM \xB7 \u53EA\u5728\u672C\u673A\u5904\u7406"},controls:{print:"\u8FD0\u884C",progress:"\u8FDB\u5EA6",knobs:"\u8BBE\u7F6E",clear:"\u6E05\u7A7A",clearTitle:"\u6E05\u7A7A\u6253\u5370\u673A\uFF1A\u53D6\u51FA\u5F55\u5C4F\uFF0C\u6E05\u6389\u8FD9\u6B21\u7684\u7ED3\u679C\u548C\u8BB0\u5F55"},tray:{ariaLabel:"\u5927\u622A\u56FE\u9884\u89C8",idleTitle:"\u4F60\u7684\u5927\u622A\u56FE\u4F1A\u4ECE\u8FD9\u91CC\u51FA\u6765",story1:"\u5F55\u5C4F\u5728\u9875\u9762\u4E0A\u968F\u4FBF\u901B\u2026",story2:"\u770B\u8FC7\u7684\u6BCF\u4E00\u5757\u90FD\u88AB\u62FC\u56DE\u539F\u4F4D",story3:"\u5F97\u5230\u4E00\u6574\u5F20\u5927\u622A\u56FE\uFF01",story4:"\u624B\u673A\u4E0A\u5F80\u4E0B\u6ED1\uFF0C\u5F55\u4E00\u6BB5\u2026",story5:"\u4E00\u5C4F\u4E00\u5C4F\u63A5\u8D77\u6765\uFF0C\u72B6\u6001\u680F\u53EA\u7559\u4E00\u4EFD",story6:"\u7ECF\u5178\u957F\u622A\u56FE\uFF0C\u5F53\u7136\u4E5F\u884C\uFF01"},reconstruct:{heading:"\u8FD0\u884C\u8BBE\u7F6E",sub:"\u9ED8\u8BA4\u5C31\u5F88\u597D\uFF1B\u60F3\u7EC6\u8C03\u65F6\u518D\u6765\u62E7\u3002",policyLabel:"\u9875\u9762\u524D\u540E\u4E0D\u4E00\u6837\u65F6",policyStable:"\u4FDD\u7559\u8F83\u7A33\u5B9A\u7684\u753B\u9762",policyLatest:"\u7528\u8F83\u65B0\u7684\u753B\u9762",framingLabel:"\u7A97\u53E3\u5916\u6846",framingContext:"\u4FDD\u7559\u5916\u6846\u548C\u56FA\u5B9A\u754C\u9762",framingRegion:"\u53EA\u8981\u5185\u5BB9\u533A\u57DF\uFF08\u542B\u7559\u767D\uFF09",regionsLabel:"\u5355\u72EC\u6EDA\u52A8\u7684\u533A\u57DF",regionsAuto:"\u81EA\u52A8\u8BC6\u522B \u2197",advancedSummary:"\u66F4\u591A\u65CB\u94AE <span>\uFF0B</span>",analysisSizeLabel:"\u5206\u6790\u7528\u7684\u957F\u8FB9",memoryLabel:"\u74E6\u7247\u7F13\u5B58\u4E0A\u9650",computeLabel:"\u5206\u6790\u52A0\u901F",computeAuto:"\u81EA\u52A8 \xB7 \u5B9E\u6D4B\u540E\u9009 WebGPU \u6216 CPU",computeWebgpu:"WebGPU \u5206\u6790 \xB7 CPU \u914D\u51C6",computeCpu:"\u4EC5 CPU",computeHint:"GPU \u8D1F\u8D23\u628A\u89E3\u7801\u51FA\u7684\u6BCF\u4E00\u5E27\u8F6C\u6210\u50CF\u7D20\u3001\u7F29\u51FA\u5206\u6790\u5C0F\u56FE\uFF1B\u5339\u914D\u548C\u62FC\u63A5\u4ECD\u5728 CPU \u4E0A\u3002\u81EA\u52A8\u6A21\u5F0F\u4F1A\u5148\u5B9E\u6D4B\uFF0CGPU \u4E0D\u66F4\u5FEB\u5C31\u4E0D\u7528\u5B83\u3002",decoderLabel:"\u89E3\u7801\u65B9\u5F0F",decoderPrecise:"\u9010\u5E27 \xB7 WebCodecs",decoderCompatibility:"\u8FD1\u4F3C \xB7 \u539F\u751F seek",decoderHint:"\u5206\u6790\u7F29\u56FE\u4E0D\u6539\u53D8\u8F93\u51FA\u50CF\u7D20\u3002\u74E6\u7247\u7F13\u5B58\u53EA\u653E\u62FC\u597D\u7684\u56FE\u5757\uFF0C\u653E\u4E0D\u4E0B\u4E00\u5E27\u8981\u753B\u7684\u56FE\u5757\u65F6\u4F1A\u81EA\u5DF1\u52A0\u5927\uFF0C\u6240\u4EE5\u51E0\u4E4E\u4E0D\u5F71\u54CD\u901F\u5EA6\uFF1B\u6D4F\u89C8\u5668\u3001\u89E3\u7801\u5668\u3001GPU \u548C\u8BA1\u7B97\u6838\u5FC3\u7528\u7684\u5185\u5B58\u4E0D\u7B97\u5728\u91CC\u9762\u3002\u517C\u5BB9 seek \u6A21\u5F0F\u53EF\u80FD\u6F0F\u6389\u77ED\u6682\u5185\u5BB9\u3002",pauseBtn:"\u6682\u505C",stopBtn:"\u505C\u6B62\u5E76\u4FDD\u5B58",footerNote:"\u4E0D\u4E0A\u4F20 \xB7 \u65E0\u4E91\u7AEF\u63A8\u7406 \xB7 \u65E0\u5916\u90E8\u6A21\u578B"},canvas:{ariaLabel:"\u5927\u622A\u56FE",selectAriaLabel:"\u9009\u62E9\u753B\u5E03",waitingOption:"\u8FD8\u6CA1\u6709\u7ED3\u679C",qualityMask:"\u663E\u793A\u62FC\u63A5\u8D28\u91CF",fitTitle:"\u7F29\u653E\u5230\u80FD\u770B\u5230\u6574\u5F20\u56FE",fitBtn:"\u770B\u5168\u56FE",nativeTitle:"\u539F\u5C3A\u5BF8",viewerAriaLabel:"\u5927\u622A\u56FE\uFF0C\u53EF\u4EE5\u62D6\u52A8\u548C\u7F29\u653E",zoomOutLabel:"\u7F29\u5C0F",zoomInLabel:"\u653E\u5927",expandLabel:"\u653E\u5927\u67E5\u770B",emptyTitle:"\u6B63\u5728\u62FC\u2026",emptyBody:"\u6BCF\u4E00\u5E27\u90FD\u5728\u627E\u81EA\u5DF1\u5728\u6574\u5F20\u56FE\u91CC\u7684\u4F4D\u7F6E\u3002",statusReady:"\u51C6\u5907\u597D\u4E86",progressMessageDefault:"\u653E\u5F55\u5C4F \u2192 \u6309\u8FD0\u884C \u2192 \u62FF\u6574\u5F20",lodLabel:"\u68CB\u76D8\u683C = \u6CA1\u770B\u5230\u7684\u5730\u65B9"},understand:{noteBtn:"\u65E5\u5FD7",heading:"\u8FD0\u884C\u65E5\u5FD7",desc:"\u6253\u5370\u673A\u6BCF\u4E00\u6B65\u600E\u4E48\u5224\u65AD\u7684\u3001\u770B\u5230\u4E86\u4EC0\u4E48\u53D8\u5316\u3001\u9047\u5230\u4E86\u4EC0\u4E48\u95EE\u9898\uFF0C\u90FD\u8BB0\u5728\u8FD9\u91CC\u3002",framesLabel:"\u5DF2\u5408\u6210\u5E27",canvasesLabel:"\u72EC\u7ACB\u753B\u5E03",coverageBody:"\u900F\u660E \u2260 \u767D\u8272\u9875\u9762<br><small>\u900F\u660E\u7684\u5730\u65B9\u662F\u5F55\u5C4F\u6CA1\u62CD\u5230\u7684\uFF0C\u4E0D\u4F1A\u51ED\u7A7A\u8865\u5185\u5BB9\u3002</small>",diagnosticsHeading:"\u8BCA\u65AD\u8BB0\u5F55",filterAriaLabel:"\u8BCA\u65AD\u8FC7\u6EE4",filterAll:"\u5168\u90E8",filterIssues:"\u8B66\u544A / \u9519\u8BEF",diagnosticsAriaLabel:"\u5904\u7406\u8BCA\u65AD",diagnosticsEmpty:"\u6BCF\u4E00\u5E27\u653E\u5728\u54EA\u513F\u3001\u9875\u9762\u6709\u4EC0\u4E48\u53D8\u5316\u3001<br>\u5904\u7406\u65F6\u9047\u5230\u7684\u95EE\u9898\uFF0C\u90FD\u4F1A\u8BB0\u5728\u8FD9\u91CC\u3002",moreDiagnostics:"\u52A0\u8F7D\u66F4\u591A\u8BCA\u65AD",reportLead:"\u7ED3\u679C\u4E0D\u5BF9\uFF0C\u6216\u8005\u51FA\u9519\u4E86\uFF1F",reportBtn:"\u53BB GitHub \u62A5\u544A\u95EE\u9898",reportNote:"\u4F1A\u9884\u586B\u6D4F\u89C8\u5668\u4FE1\u606F\u548C\u8FD9\u91CC\u7684\u8B66\u544A\u4EE3\u7801\uFF0C\u4E0D\u542B\u5F55\u5C4F\u3001\u753B\u9762\u548C\u6587\u4EF6\u540D\uFF1B\u63D0\u4EA4\u524D\u4F60\u53EF\u4EE5\u5148\u770B\u3001\u5148\u6539\u3002"},export:{downloadPng:"\u4E0B\u8F7D\u5927\u622A\u56FE \xB7 PNG <span>\u2193</span>",copyPng:"\u590D\u5236\u5927\u622A\u56FE",pngNote:"\u4E00\u6574\u5F20\u539F\u5C3A\u5BF8 PNG\uFF0C\u4E0D\u7F29\u5C0F\u3001\u4E0D\u5206\u9875\u3002",advancedSummary:"\u66F4\u591A\u5BFC\u51FA\u65B9\u5F0F",exportProject:"\u5BFC\u51FA\u5B8C\u6574\u9879\u76EE \xB7 ZIP",projectNote:"\u539F\u5C3A\u5BF8\u74E6\u7247 + \u79BB\u7EBF\u67E5\u770B\u5668 + \u8986\u76D6/\u8D28\u91CF\u6570\u636E + \u5B8C\u6574\u8BCA\u65AD\uFF0C\u4F9B\u5B58\u6863\u6216\u6392\u67E5\u3002",exportSheets:"\u5206\u9875\u5BFC\u51FA \xB7 \u591A\u5F20 PNG\uFF08ZIP\uFF09",sheetsNote:"\u8D85\u957F\u753B\u5E03\u6309\u517C\u5BB9\u5C3A\u5BF8\u62C6\u6210\u591A\u5F20\u539F\u5C3A\u5BF8 PNG\uFF0C\u9875\u95F4\u91CD\u53E0 32px\uFF0C\u9644\u4E16\u754C\u5750\u6807\u6E05\u5355\uFF1B\u4E0D\u7F29\u5C0F\u3002",starNudge:"\u597D\u7528\u7684\u8BDD\uFF0C\u53BB GitHub \u7ED9\u6211\u4EEC\u70B9\u4E2A\u661F"},help:{title:"\u4F7F\u7528\u8BF4\u660E",pixelsHeading:"\u54EA\u4E9B\u50CF\u7D20\u88AB\u4FDD\u7559\uFF1F",pixelsBody:"\u7CBE\u786E\u6A21\u5F0F\u9010\u5E27\u89E3\u7801\u3002\u6240\u6709\u5B8C\u6210\u5904\u7406\u7684\u89C2\u5BDF\u90FD\u6709\u65F6\u95F4\u6233\u548C\u5408\u6210\u8BB0\u5F55\u3002\u5206\u6790\u53EF\u4EE5\u7F29\u56FE\uFF0C\u6700\u7EC8\u5408\u6210\u4E0E\u5BFC\u51FA\u4FDD\u6301\u539F\u59CB\u50CF\u7D20\u5C3A\u5EA6\u3002",frameHeading:"\u5916\u6846\u4E0E\u81EA\u7136\u7559\u767D",frameBody:"\u9ED8\u8BA4\u4FDD\u7559\u6574\u4E2A\u6372\u52A8\u533A\u57DF\u7684\u80CC\u666F\u3001\u8FB9\u8DDD\u548C\u7559\u767D\uFF0C\u4E0D\u88C1\u5230\u6587\u5B57\u8FB9\u754C\u3002\u5E26\u5916\u6846\u89C6\u56FE\u989D\u5916\u4FDD\u7559\u4E00\u5E27\u53C2\u8003\u754C\u9762\uFF1A\u4FA7\u680F\u6587\u5B57\u3001\u5DE5\u5177\u56FE\u793A\u4EE5\u539F\u5C3A\u5BF8\u51FA\u73B0\u4E00\u6B21\uFF0C\u6269\u5C55\u5904\u4EC5\u7EED\u63A5\u88C5\u9970\u80CC\u666F\uFF0C\u4E0D\u5C5E\u4E8E\u91CD\u5EFA\u8BC1\u636E\u3002\u539F\u59CB\u5185\u5BB9\u5C42\u59CB\u7EC8\u5355\u72EC\u4FDD\u7559\u3002\u5176\u4ED6\u72EC\u7ACB pane \u4E0D\u4F1A\u88AB\u5047\u88C5\u62FC\u6210\u540C\u4E00\u8F68\u8FF9\u3002",scopeHeading:"\u8FD9\u91CC\u4E0D\u662F\u201C\u4E07\u80FD\u9875\u9762\u7406\u89E3\u201D",scopeBody:"\u8FD0\u52A8\u5206\u5C42\u3001\u91CD\u590D\u7EB9\u7406\u6D88\u6B67\u548C\u52A8\u6001\u533A\u57DF\u5F52\u5C5E\u90FD\u662F\u89C6\u89C9\u63A8\u65AD\u3002\u6BD4\u4F8B\u53D8\u5316\u3001\u65E0\u91CD\u53E0\u6216\u4E0D\u80FD\u5171\u5B58\u7684\u5E03\u5C40\u53EF\u80FD\u6210\u4E3A\u72EC\u7ACB\u7247\u6BB5\uFF1B\u8FD9\u4E9B\u7247\u6BB5\u4E4B\u95F4\u4E0D\u88AB\u5BA3\u79F0\u5DF2\u7ECF\u5BF9\u9F50\u3002\u7F6E\u4FE1\u5EA6\u4E0D\u662F\u7ECF\u8FC7\u6821\u51C6\u7684\u6B63\u786E\u6982\u7387\u3002",storageHeading:"\u957F\u5F55\u5C4F\u4E0E\u5B58\u50A8",storageBody:"\u91C7\u7528\u4E09\u6B21\u89E3\u7801\u626B\u63CF\uFF0C\u4EE5\u78C1\u76D8\u7A7A\u95F4\u548C\u8BA1\u7B97\u65F6\u95F4\u6362\u53D6\u6709\u9650\u5185\u5B58\u3002\u6D4F\u89C8\u5668\u53EA\u66FF\u4F60\u4FDD\u7559\u6700\u8FD1\u4E00\u6B21\u7684\u7ED3\u679C\uFF0C\u6700\u591A 24 \u5C0F\u65F6\uFF1A\u5237\u65B0\u6216\u4E0D\u5C0F\u5FC3\u5173\u6389\u9875\u9762\u540E\u518D\u6253\u5F00\uFF0C\u5B83\u4F1A\u81EA\u52A8\u56DE\u6765\uFF1B\u8DD1\u5230\u4E00\u534A\u88AB\u4E2D\u65AD\u7684\uFF0C\u4F1A\u56DE\u6765\u5DF2\u4FDD\u5B58\u7684\u90E8\u5206\uFF08\u4E0D\u80FD\u4ECE\u4E2D\u65AD\u5904\u7EED\u8DD1\uFF09\u3002\u518D\u8FD0\u884C\u4E00\u6B21\u6216\u6309\u300C\u6E05\u7A7A\u300D\u4F1A\u5220\u6389\u5B83\uFF1B\u8D85\u8FC7 24 \u5C0F\u65F6\u7684\uFF0C\u4F1A\u5728\u4E0B\u6B21\u6253\u5F00\u9875\u9762\u65F6\u5220\u6389\u3002\u60F3\u957F\u671F\u4FDD\u7559\u8BF7\u4E0B\u8F7D\u3002",browserHeading:"\u6D4F\u89C8\u5668\u4E0E\u683C\u5F0F",browserBody:"\u9700\u8981 IndexedDB\u3001OffscreenCanvas\u3001CompressionStream\u3002\u672C\u673A\u5F00\u53D1\u53EF\u76F4\u63A5\u7528 HTTP localhost\uFF0C\u65E0\u9700\u8BC1\u4E66\uFF1B\u624B\u673A\u8BBF\u95EE\u5C40\u57DF\u7F51 HTTP \u65F6\u53EF\u9009\u62E9\u8FD1\u4F3C seek \u6D4B\u8BD5\uFF0C\u4F46\u53EF\u80FD\u6F0F\u5E27\u3002\u6D4F\u89C8\u5668\u901A\u5E38\u53EA\u5728 localhost \u6216 HTTPS \u5F00\u653E WebCodecs \u7CBE\u786E\u89E3\u7801\u4E0E\u78C1\u76D8\u5BFC\u51FA\u63A5\u53E3\uFF0C\u8FD9\u4E0E\u4E0A\u4F20\u65E0\u5173\u3002\u7CBE\u786E\u89E3\u7801\u8FD8\u9700\u8981\u8BBE\u5907\u652F\u6301\u76F8\u5E94 codec\uFF1BMP4/MOV/WebM \u5BB9\u5668\u4E0D\u7B49\u4E8E\u8BBE\u5907\u80FD\u89E3\u7801\u5176\u6240\u6709\u7F16\u7801\u3002",tipsHeading:"\u600E\u4E48\u5F97\u5230\u66F4\u597D\u7684\u7ED3\u679C\uFF1F",tipsBody:"\u4FDD\u7559\u8DB3\u591F\u91CD\u53E0\uFF1B\u9047\u5230\u4F4E\u7EB9\u7406\u533A\u57DF\u7A0D\u6162\u79FB\u52A8\u3002\u591A\u4E2A pane \u6216\u60AC\u6D6E\u5C42\u8BC6\u522B\u4E0D\u51C6\u65F6\uFF0C\u7528\u201C\u5355\u72EC\u6EDA\u52A8\u7684\u533A\u57DF\u201D\u624B\u52A8\u753B\u51FA\u6765\u518D\u5904\u7406\u3002\u6240\u6709\u8BCA\u65AD\u53EF\u4ECE\u5B8C\u6574\u9879\u76EE\u5BFC\u51FA\u3002",feedbackHeading:"\u53CD\u9988\u4E0E\u6E90\u7801",feedbackBody:'Long Screen \u662F MIT \u534F\u8BAE\u7684\u5F00\u6E90\u9879\u76EE\uFF0C\u6E90\u7801\u5728 <a href="https://github.com/t41372/long-screen" target="_blank" rel="noopener">GitHub</a>\u3002\u9047\u5230 bug \u6216\u7ED3\u679C\u4E0D\u5BF9\uFF0C\u6B22\u8FCE<a class="report-link" href="https://github.com/t41372/long-screen/issues/new" target="_blank" rel="noopener">\u63D0\u4E00\u4E2A issue</a>\uFF0C\u4F1A\u9884\u586B\u6D4F\u89C8\u5668\u4FE1\u606F\u548C\u65E5\u5FD7\u91CC\u7684\u8B66\u544A\u4EE3\u7801\u3002\u89C9\u5F97\u597D\u7528\u7684\u8BDD\uFF0C\u7ED9\u9879\u76EE\u70B9\u4E2A\u661F\u5BF9\u6211\u4EEC\u5E2E\u52A9\u5F88\u5927\u3002',toolsHeading:"\u7F51\u9875\u4E4B\u5916",toolsBody:'\u8FD9\u4E2A\u7F51\u9875\u80CC\u540E\u7684\u5F15\u64CE\u4E5F\u80FD\u5355\u72EC\u62FF\u6765\u7528\uFF1A\u6709<a href="https://github.com/t41372/long-screen#command-line" target="_blank" rel="noopener">\u547D\u4EE4\u884C\u5DE5\u5177</a>\u3001<a href="https://github.com/t41372/long-screen#rust-library" target="_blank" rel="noopener">Rust \u5E93</a>\u548C <a href="https://github.com/t41372/long-screen#python-package" target="_blank" rel="noopener">Python \u5305</a>\uFF0C\u4E5F\u6709\u7ED9\u5176\u4ED6\u7F51\u9875\u8C03\u7528\u7684 <a href="https://github.com/t41372/long-screen#typescript-package" target="_blank" rel="noopener">TypeScript \u5305</a>\uFF0C\u540C\u6837\u53EA\u5728\u672C\u673A\u5904\u7406\u5F55\u5C4F\u3002\u5B89\u88C5\u548C\u7528\u6CD5\u89C1 README\u3002',licenseHeading:"\u5F00\u6E90\u6388\u6743",licenseBody:'Long Screen \u81EA\u8EAB\u7684\u4EE3\u7801\u7528 MIT \u534F\u8BAE\uFF1A\u53EF\u4EE5\u514D\u8D39\u4F7F\u7528\u3001\u590D\u5236\u3001\u4FEE\u6539\u3001\u518D\u53D1\u5E03\uFF0C\u4E5F\u53EF\u4EE5\u5546\u7528\u6216\u653E\u8FDB\u95ED\u6E90\u4EA7\u54C1\uFF0C\u53EA\u8981\u5728\u526F\u672C\u91CC\u4FDD\u7559\u7248\u6743\u58F0\u660E\u548C<a href="https://github.com/t41372/long-screen/blob/main/LICENSE" target="_blank" rel="noopener">\u534F\u8BAE\u539F\u6587</a>\uFF1B\u8F6F\u4EF6\u6309\u73B0\u72B6\u63D0\u4F9B\uFF0C\u4E0D\u9644\u5E26\u4EFB\u4F55\u62C5\u4FDD\u3002Wasm \u6838\u5FC3\u4E0E\u524D\u7AEF\u8D44\u6E90\u4E2D\u6253\u5305\u7684\u7B2C\u4E09\u65B9\u4F9D\u8D56\u53CA\u5176\u8BB8\u53EF\uFF0C\u4EE5\u53CA\u9875\u9762\u4E0A Rust\u3001WebAssembly\u3001GitHub \u6807\u5FD7\u7684\u51FA\u5904\u4E0E\u6388\u6743\uFF0C\u89C1 <a href="./THIRD_PARTY_NOTICES.txt" target="_blank" rel="noopener">\u5F00\u6E90\u6388\u6743\u8BF4\u660E</a>\uFF08\u6784\u5EFA\u65F6\u751F\u6210\uFF09\u3002'},regions:{title:"\u6307\u5B9A\u5355\u72EC\u6EDA\u52A8\u7684\u533A\u57DF",hint:"\u5728\u753B\u9762\u4E0A\u62D6\u51FA\u77E9\u5F62\u3002\u6BCF\u4E2A\u201C\u5185\u5BB9\u201D\u533A\u57DF\u72EC\u7ACB\u91CD\u5EFA\u3002\u672A\u6846\u9009\u533A\u57DF\u4F1A\u660E\u786E\u4FDD\u7559\u4E3A\u5355\u72EC\u7684\u4F4E\u7F6E\u4FE1\u89C2\u5BDF\u5C42\uFF1B\u201C\u5FFD\u7565\u201D\u533A\u57DF\u662F\u4E3B\u52A8\u6392\u9664\u3002",kindMoving:"\u5185\u5BB9 \xB7 \u72EC\u7ACB\u6EDA\u52A8",kindFixed:"\u56FA\u5B9A\u754C\u9762",kindIgnore:"\u5FFD\u7565 \xB7 \u4E3B\u52A8\u6392\u9664",clearBtn:"\u6062\u590D\u81EA\u52A8\u8BC6\u522B",saveBtn:"\u4F7F\u7528\u8FD9\u4E9B\u533A\u57DF"},source:{title:"\u5F55\u5C4F\u539F\u753B\u9762"},crop:{button:"\u88C1\u5207",groupLabel:"\u88C1\u5207\u8303\u56F4",left:"\u8DDD\u5DE6",top:"\u8DDD\u4E0A",width:"\u5BBD",height:"\u9AD8",full:"\u6574\u5F20",cancel:"\u53D6\u6D88",apply:"\u88C1\u597D\u4E86"},footer:{stackLead:"\u6838\u5FC3\u7528",stackMid:"\u5199\u6210\uFF0C\u7F16\u8BD1\u6210",stackTail:"\u5728\u4F60\u7684\u6D4F\u89C8\u5668\u91CC\u8FD0\u884C\u3002",stackMore:"\u754C\u9762 TypeScript \xB7 \u6784\u5EFA\u4E0E\u6D4B\u8BD5 Deno",linksLabel:"\u9879\u76EE\u94FE\u63A5",source:"GitHub \u6E90\u7801",report:"\u62A5\u544A\u95EE\u9898",notices:"\u5F00\u6E90\u6388\u6743\u8BF4\u660E",trademarks:"Rust\u3001WebAssembly\u3001TypeScript\u3001Deno \u548C GitHub \u7684\u540D\u79F0\u4E0E\u6807\u5FD7\u5F52\u5404\u81EA\u6240\u6709\u8005\uFF1B\u8FD9\u91CC\u53EA\u8BF4\u660E\u672C\u9879\u76EE\u7528\u5230\u4E86\u5B83\u4EEC\uFF0C\u4E0D\u4EE3\u8868\u5B83\u4EEC\u8BA4\u53EF\u672C\u9879\u76EE\u3002"}},deviceCheck:{title:"\u8BBE\u5907\u68C0\u67E5",intro:`\u6D4B\u91CF\u672C\u673A\u6D4F\u89C8\u5668\u63D0\u4F9B\u7684\u80FD\u529B\uFF08\u8DE8\u6E90\u9694\u79BB / \u7EBF\u7A0B\u3001WebGPU \u9002\u914D\u5668\uFF09\u548C GPU \u8DEF\u5F84\u7684\u5B9E\u9645\u5F00\u9500\uFF1A\u4E00\u5E27\u539F\u751F RGBA \u7684\u4E0A\u4F20\u4E0E\u8BFB\u56DE\u3001
2
+ \u5206\u6790\u964D\u91C7\u6837\u5728 GPU \u4E0E Rust \u6838\u5FC3\u4E0A\u7684\u8017\u65F6\u53CA\u9010\u5B57\u8282\u4E00\u81F4\u6027\u3002\u53EF\u9009\uFF1A\u9009\u4E00\u6BB5\u5F55\u5C4F\uFF0C\u5206\u522B\u4EE5 CPU \u4E0E\u5F3A\u5236 WebGPU \u8DD1\u5B8C\u6574\u6D41\u7A0B\u5E76\u6BD4\u8F83\u74E6\u7247\u6307\u7EB9\u3002
3
+ \u6240\u6709\u5904\u7406\u90FD\u5728\u672C\u673A\u5B8C\u6210\uFF0C\u4E0D\u4E0A\u4F20\u4EFB\u4F55\u5185\u5BB9\uFF1B\u5F55\u5C4F\u7684\u8FD0\u884C\u6570\u636E\u5728\u6BD4\u8F83\u540E\u5220\u9664\u3002WebGPU \u53EA\u5728\u5B89\u5168\u4E0A\u4E0B\u6587\uFF08localhost \u6216 HTTPS\uFF09\u4E2D\u53EF\u7528\u3002`,recordingLabel:"\u5F55\u5C4F\uFF08\u53EF\u9009\uFF09\uFF1A",runBtn:"\u5F00\u59CB\u68C0\u67E5",loadingReport:"\u52A0\u8F7D\u6838\u5FC3\u2026"}};var wo={ui:{phase:{scanning:"\u9010\u5E27\u770B\u5F55\u5C4F",solving:"\u7ED9\u6BCF\u4E00\u5E27\u627E\u4F4D\u7F6E",optimizing:"\u6821\u6B63\u7D2F\u79EF\u8BEF\u5DEE",rendering:"\u6309\u539F\u5C3A\u5BF8\u62FC\u56FE",revealing:"\u53BB\u6389\u6D6E\u5728\u9875\u9762\u4E0A\u7684\u4E1C\u897F",framing:"\u8FD8\u539F\u7A97\u53E3\u5916\u6846",pyramid:"\u751F\u6210\u9884\u89C8",complete:"\u62FC\u597D\u4E86",partial:"\u90E8\u5206\u7ED3\u679C\u5DF2\u4FDD\u5B58",error:"\u51FA\u9519\u4E86"},count:{frames_one:"{{frames}} \u5E27",frames_other:"{{frames}} \u5E27",framesUnknown:"? \u5E27",regions_one:"{{count}} \u4E2A\u6307\u5B9A\u533A\u57DF \u2197",regions_other:"{{count}} \u4E2A\u6307\u5B9A\u533A\u57DF \u2197"},dom:{noCompressionStream:"\u5F53\u524D\u6D4F\u89C8\u5668\u7F3A\u5C11 CompressionStream\uFF1B\u6BCF\u5F20\u539F\u5C3A\u5BF8\u74E6\u7247\u90FD\u9760\u5B83\u7F16\u7801\u4E3A PNG\uFF0C\u65E0\u6CD5\u5F00\u59CB\u91CD\u5EFA\u3002"},canvases:{badgePresentation:"\u5E26\u5916\u6846 \xB7 \u5EF6\u4F38\u51FA\u6765\u7684\u80CC\u666F\u4E0D\u662F\u5F55\u5230\u7684",badgeFixed:"\u56FA\u5B9A\u754C\u9762",badgeMoving:"\u5185\u5BB9",badge_one:"{{kind}} \xB7 {{count}} \u5757\u539F\u5C3A\u5BF8\u74E6\u7247{{fragment}}",badge_other:"{{kind}} \xB7 {{count}} \u5757\u539F\u5C3A\u5BF8\u74E6\u7247{{fragment}}",fragmentNote:" \xB7 \u51E0\u4E2A\u7247\u6BB5\u4E4B\u95F4\u4E0D\u4FDD\u8BC1\u5BF9\u9F50"},diagnostics:{occurrenceSuffix:"\uFF08\u672C\u7C7B\u4E8B\u4EF6\u7D2F\u8BA1 {{count}} \u6B21\uFF09",locateAction:"\u5B9A\u4F4D\u53D7\u5F71\u54CD\u533A\u57DF / \u67E5\u770B\u6765\u6E90 \u2197",viewSourceAction:"\u67E5\u770B\u539F\u59CB\u65F6\u523B \u2197",emptyFiltered:"\u5F53\u524D\u8FC7\u6EE4\u6761\u4EF6\u4E0B\u6CA1\u6709\u8BB0\u5F55\u3002",emptyDefault:"\u6BCF\u4E00\u5E27\u653E\u5728\u54EA\u513F\u3001\u9875\u9762\u6709\u4EC0\u4E48\u53D8\u5316\u3001\u5904\u7406\u65F6\u9047\u5230\u7684\u95EE\u9898\uFF0C\u90FD\u4F1A\u8BB0\u5728\u8FD9\u91CC\u3002",noOriginalVideo:"\u539F\u59CB\u89C6\u9891\u672A\u5305\u542B\u5728\u9879\u76EE\u4E2D\u3002\u8BF7\u91CD\u65B0\u9009\u62E9\u5BF9\u5E94\u5F55\u5C4F\uFF0C\u518D\u901A\u8FC7\u65F6\u95F4\u6233\u67E5\u770B\uFF1B\u5408\u6210\u7ED3\u679C\u4ECD\u4FDD\u5B58\u5728\u672C\u5730\u3002",hashMismatch:"\u6240\u9009\u6587\u4EF6\u540D\u79F0\u4E0E\u5927\u5C0F\u76F8\u7B26\uFF0C\u4F46\u5185\u5BB9\u54C8\u5E0C\u4E0E\u672C\u9879\u76EE\u6700\u521D\u5904\u7406\u7684\u5F55\u5C4F\u4E0D\u4E00\u81F4\uFF0C\u62D2\u7EDD\u4F5C\u4E3A\u6E90\u65F6\u523B\u8BC1\u636E\u663E\u793A\u3002\u8BF7\u91CD\u65B0\u9009\u62E9\u6B63\u786E\u7684\u5F55\u5C4F\u6587\u4EF6\u3002",sourceCaption:"\u6E90\u5E27 {{frame}} \xB7 {{time}} \u79D2 \xB7 {{message}}"},export:{imageSuffix:"-\u5927\u622A\u56FE",savePickerFallback:"\u76F4\u63A5\u4FDD\u5B58\u4E0D\u53EF\u7528\uFF0C\u6539\u7528\u6D4F\u89C8\u5668\u4E0B\u8F7D\uFF1A{{error}}",saveRowLabel:"\u4FDD\u5B58 {{name}} \xB7 {{size}}",shareLabel:"\u5206\u4EAB / \u5B58\u5230\u7167\u7247",shareFailed:"\u5206\u4EAB\u5931\u8D25\uFF1A{{error}}",cleanupLabel:"\u4FDD\u5B58\u540E\u6E05\u7406\u4E34\u65F6\u526F\u672C",exportErrorAction:"\u6CA1\u6709\u628A\u672A\u5B8C\u6210\u7684\u5BFC\u51FA\u6807\u8BB0\u4E3A\u6210\u529F\u3002\u5DF2\u63D0\u4EA4\u7684\u9879\u76EE\u74E6\u7247\u4ECD\u5728\u672C\u673A\u3002",clipboardUnsupported:"\u8FD9\u4E2A\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u590D\u5236\u56FE\u7247\uFF0C\u8BF7\u7528\u201C\u4E0B\u8F7D\u5927\u622A\u56FE\u201D\u3002",copyNoImage:"\u6CA1\u6709\u751F\u6210\u56FE\u7247",copyFailedCtor:"\u590D\u5236\u5931\u8D25\uFF1A{{error}}\u3002\u8BF7\u6539\u7528\u201C\u4E0B\u8F7D\u5927\u622A\u56FE\u201D\u3002",copySuccess:"\u5DF2\u590D\u5236 {{width}} \xD7 {{height}} \u7684\u5927\u622A\u56FE\uFF0C\u53EF\u4EE5\u76F4\u63A5\u7C98\u8D34\u3002",copyFailed:"\u590D\u5236\u5931\u8D25\uFF1A{{error}}\u3002\u56FE\u7247\u53EF\u80FD\u8D85\u51FA\u7CFB\u7EDF\u526A\u8D34\u677F\u7684\u9650\u5236\uFF0C\u8BF7\u6539\u7528\u201C\u4E0B\u8F7D\u5927\u622A\u56FE\u201D\u3002"},crop:{buttonCropped:"\u88C1\u5207 \xB7 {{width}} \xD7 {{height}}",applied:"\u597D\u4E86\uFF0C\u4E4B\u540E\u4E0B\u8F7D\u3001\u590D\u5236\u548C\u5206\u9875\u5BFC\u51FA\u90FD\u53EA\u53D6\u8FD9\u4E00\u5757\uFF08{{width}} \xD7 {{height}}\uFF09\u3002\u5B8C\u6574\u9879\u76EE ZIP \u4E0D\u53D7\u5F71\u54CD\u3002",removed:"\u5DF2\u53D6\u6D88\u88C1\u5207\uFF0C\u5BFC\u51FA\u53C8\u662F\u6574\u5F20\u3002"},main:{offscreenMissing:"\u5F53\u524D\u6D4F\u89C8\u5668\u7F3A\u5C11 OffscreenCanvas\uFF1B\u65E0\u6CD5\u8FD0\u884C\u6E32\u67D3 Worker\u3002",webcodecsMissingToast:"\u5F53\u524D\u6D4F\u89C8\u5668\u6CA1\u6709 WebCodecs\u3002\u9700\u8981\u660E\u786E\u9009\u62E9\u53EF\u80FD\u6F0F\u5E27\u7684\u517C\u5BB9 seek \u6A21\u5F0F\u3002",privateStorageToast:"\u9690\u79C1\u6D4F\u89C8\uFF1A\u9879\u76EE\u53EA\u4FDD\u5B58\u5728\u8FD9\u4E2A\u7A97\u53E3\u7684\u5185\u5B58\u91CC\uFF0C\u5173\u95ED\u7A97\u53E3\u540E\u5373\u6D88\u5931\uFF1B\u9700\u8981\u4FDD\u7559\u8BF7\u5728\u5173\u95ED\u524D\u5BFC\u51FA\u3002",noOpfsNoPicker:"\u5F53\u524D\u6D4F\u89C8\u5668\u65E2\u6CA1\u6709 OPFS \u4E5F\u6CA1\u6709\u6587\u4EF6\u4FDD\u5B58\u5BF9\u8BDD\u6846\uFF1B\u5BFC\u51FA\u4F1A\u5728\u5185\u5B58\u4E2D\u751F\u6210\uFF08\u4E0A\u9650 {{mb}} MB\uFF09\u3002",dbOpenFailed:"\u65E0\u6CD5\u6253\u5F00\u672C\u5730\u6570\u636E\u5E93\uFF1A{{error}}",workerErrorToast:"Worker \u9519\u8BEF\uFF1A{{message}}",workerMessageUndecodable:"Worker \u6D88\u606F\u65E0\u6CD5\u89E3\u7801\u3002\u8BF7\u4FDD\u7559\u73B0\u6709\u7ED3\u679C\u5E76\u91CD\u65B0\u52A0\u8F7D\u3002",interruptedPhaseWhere:"\u300C{{phase}}\u300D\u7B2C {{frames}} \u5E27",interruptedStartPhase:"\u5F00\u59CB\u9636\u6BB5",interruptedHiddenSome:"\u9875\u9762\u5728\u540E\u53F0\u7EA6 {{seconds}} \u79D2{{stillHidden}}",interruptedStillHidden:"\uFF08\u4E2D\u65AD\u65F6\u4ECD\u5728\u540E\u53F0\uFF09",interruptedHiddenNone:"\u9875\u9762\u4E00\u76F4\u5728\u524D\u53F0",interruptedDiagnosticMessage:"\u4E0A\u4E00\u6B21\u91CD\u5EFA\u5728{{where}}\u4E2D\u65AD\uFF0C\u9875\u9762\u6CA1\u6709\u6536\u5230\u7ED3\u675F\u4FE1\u53F7\uFF08\u6D4F\u89C8\u5668\u56DE\u6536\u6216\u5D29\u6E83\u4E86\u8FD9\u4E2A\u9875\u9762\uFF09\u3002\u5DF2\u8FD0\u884C {{elapsed}} \u79D2\uFF0C\u6838\u5FC3\u5185\u5B58 {{memory}} MB\uFF0C{{hidden}}\uFF0C\u5E27\u8F6C\u6362\uFF1A{{conversion}}\uFF0C{{cores}} \u6838{{isolation}}\u3002",interruptedDiagnosticAction:"Safari \u4F1A\u5728\u9875\u9762\u8F6C\u5165\u540E\u53F0\u65F6\u4EE5\u4F4E\u5F97\u591A\u7684\u5185\u5B58\u4E0A\u9650\u56DE\u6536\u5B83\uFF1A\u957F\u65F6\u95F4\u5904\u7406\u8BF7\u4FDD\u6301\u8BE5\u6807\u7B7E\u9875\u5728\u524D\u53F0\u3002\u5B8C\u6574\u8BB0\u5F55\u5DF2\u5199\u5165\u6D4F\u89C8\u5668\u63A7\u5236\u53F0\u3002",interruptedNotIsolated:"\uFF08\u672A\u8DE8\u6E90\u9694\u79BB\uFF0C\u5355\u7EBF\u7A0B\uFF09",interruptedToast:"\u4E0A\u4E00\u6B21\u91CD\u5EFA\u5728{{where}}\u4E2D\u65AD\uFF08{{hidden}}\uFF09\u3002\u8BE6\u60C5\u89C1\u8BCA\u65AD\u3002",unknownValue:"\u672A\u77E5"},run:{pausedStatus:"\u5DF2\u6682\u505C \xB7 \u53EF\u4EE5\u7EE7\u7EED",resumedStatus:"\u7EE7\u7EED\u5904\u7406",pauseLabel:"\u6682\u505C",resumeLabel:"\u7EE7\u7EED",stopToast:"\u6B63\u5728\u7ED3\u675F\u5F53\u524D\u9636\u6BB5\uFF0C\u5E76\u5C3D\u53EF\u80FD\u5408\u6210\u3001\u4FDD\u5B58\u5DF2\u5904\u7406\u7684\u89C2\u5BDF\u3002",preparingStatus:"\u51C6\u5907\u8BFB\u53D6\u5F55\u5C4F",preparingMessage:"\u6B63\u5728\u8BFB\u53D6\u89C6\u9891\u4FE1\u606F\uFF0C\u68C0\u67E5\u6D4F\u89C8\u5668\u80FD\u4E0D\u80FD\u89E3\u7801\u3001\u672C\u5730\u7A7A\u95F4\u591F\u4E0D\u591F\u3002",compatibilityNeedsNative:"\u517C\u5BB9\u6A21\u5F0F\u9700\u8981\u6D4F\u89C8\u5668\u539F\u751F\u64AD\u653E\u5668\u80FD\u591F\u8BFB\u53D6\u8FD9\u6BB5\u89C6\u9891\u3002",webcodecsHttpBlocked:"\u6D4F\u89C8\u5668\u5728\u5F53\u524D HTTP \u5730\u5740\u672A\u5F00\u653E WebCodecs\u3002\u53EF\u9009\u62E9\u201C\u8FD1\u4F3C \xB7 \u539F\u751F seek\u201D\u7EE7\u7EED\u672C\u5730\u6D4B\u8BD5\uFF1B\u7CBE\u786E\u9010\u5E27\u89E3\u7801\u9700\u8981 localhost \u6216 HTTPS\u3002\u89C6\u9891\u4E0D\u4F1A\u4E0A\u4F20\u3002",webcodecsMissing:"\u5F53\u524D\u6D4F\u89C8\u5668\u6CA1\u6709 WebCodecs\u3002\u8BF7\u66F4\u65B0 Safari / iOS\uFF0C\u6216\u660E\u786E\u9009\u62E9\u53EF\u80FD\u6F0F\u5E27\u7684\u517C\u5BB9 seek \u6A21\u5F0F\u3002",startFailedStatus:"\u6CA1\u80FD\u5F00\u59CB",restoredMessage:"\u8FD9\u662F\u4E0A\u6B21\u7684\u7ED3\u679C\u3002\u8D85\u8FC7 24 \u5C0F\u65F6\u7684\uFF0C\u4E0B\u6B21\u6253\u5F00\u9875\u9762\u65F6\u4F1A\u5220\u6389\u3002",interruptedStatus:"\u4E0A\u6B21\u6CA1\u8DD1\u5B8C",interruptedMessage:"\u8FD9\u662F\u4E2D\u65AD\u524D\u5DF2\u4FDD\u5B58\u7684\u90E8\u5206\u3002\u8981\u5B8C\u6574\u7ED3\u679C\uFF0C\u8BF7\u91CD\u65B0\u653E\u5165\u5F55\u5C4F\u518D\u8FD0\u884C\u4E00\u6B21\u3002",waitingCanvasOption:"\u8FD8\u6CA1\u6709\u7ED3\u679C"},source:{busyToast:"\u8BF7\u5148\u5B8C\u6210\u6216\u4FDD\u5B58\u5F53\u524D\u5904\u7406\u90E8\u5206\u3002",subtitleReading:"{{size}} \xB7 \u4E0D\u4F1A\u4E0A\u4F20 \xB7 \u6B63\u5728\u8BFB\u53D6\u89C6\u9891",subtitleDetailed:"{{width}} \xD7 {{height}} \xB7 {{duration}} \xB7 {{frames}} \xB7 {{codec}} \xB7 {{size}}",subtitleNativeOnly:"{{width}} \xD7 {{height}} \xB7 {{duration}} \xB7 {{size}} \xB7 \u4EC5\u539F\u751F\u64AD\u653E\u5668\u53EF\u8BFB",subtitleUnavailable:"{{size}} \xB7 \u9010\u5E27\u89E3\u7801\u4E0E\u539F\u751F\u9884\u89C8\u90FD\u4E0D\u53EF\u7528",probeFailedMessage:"\u9010\u5E27\u89E3\u7801\u63A2\u6D4B\u5931\u8D25\uFF1A{{error}}",probeFailedAction:"\u5C06\u5C1D\u8BD5\u6D4F\u89C8\u5668\u539F\u751F\u64AD\u653E\u5668\u8BFB\u53D6\u5143\u6570\u636E\u3002\u82E5\u4ECD\u8981\u5904\u7406\uFF0C\u8BF7\u5728\u89E3\u7801\u65B9\u5F0F\u4E2D\u9009\u62E9\u201C\u8FD1\u4F3C \xB7 \u539F\u751F seek\u201D\u3002",rejectedVideo:"\u201C{{name}}\u201D\u662F {{kind}}\uFF0C\u6D4F\u89C8\u5668\u65E0\u6CD5\u9010\u5E27\u8BFB\u53D6\u8FD9\u79CD\u683C\u5F0F\uFF0C\u6CA1\u6709\u6253\u5F00\u3002\u8BF7\u5728\u5F55\u5C4F\u8F6F\u4EF6\u91CC\u6539\u4E3A\u8F93\u51FA MP4\uFF0C\u6216\u5148\u7528 HandBrake / ffmpeg \u8F6C\u6210 MP4\u3002",rejectedOther:"\u201C{{name}}\u201D\u4E0D\u662F\u89C6\u9891\uFF08{{kind}}\uFF09\uFF0C\u6CA1\u6709\u6253\u5F00\u3002\u8BF7\u9009\u62E9\u4E00\u6BB5\u6EDA\u52A8\u9875\u9762\u7684\u5C4F\u5E55\u5F55\u5F71\uFF1AMP4\u3001MOV\u3001WebM \u6216 MKV\u3002Windows \u53EF\u7528\u201C\u622A\u56FE\u5DE5\u5177\u201D\u7684\u5F55\u5236\u529F\u80FD\u6216 Xbox Game Bar\uFF08Win+Alt+R\uFF09\uFF0CMac \u7528 \u2318\u21E75\uFF0C\u624B\u673A\u7528\u7CFB\u7EDF\u81EA\u5E26\u7684\u5C4F\u5E55\u5F55\u5236\u3002",unreadableToast:"\u8BFB\u4E0D\u4E86\u8FD9\u6BB5\u89C6\u9891\uFF08{{reason}}\uFF09\u3002\u8BF7\u786E\u8BA4\u5F55\u5236\u5DF2\u6B63\u5E38\u7ED3\u675F\u3001\u6587\u4EF6\u590D\u5236\u6216\u4E0B\u8F7D\u5B8C\u6574\uFF1B\u4ECD\u4E0D\u884C\u65F6\u6362\u6210 H.264 \u7F16\u7801\u7684 MP4 \u518D\u8BD5\u3002\u9010\u5E27\u89E3\u7801\u5931\u8D25\u7684\u539F\u56E0\u89C1\u8BCA\u65AD\u8BB0\u5F55\u3002",kind:{empty:"\u7A7A\u6587\u4EF6",heif:"HEIC/AVIF \u56FE\u7247",avi:"AVI \u89C6\u9891",webp:"WebP \u56FE\u7247",wav:"WAV \u97F3\u9891",riff:"RIFF \u6587\u4EF6",wmv:"WMV/ASF \u89C6\u9891",flv:"FLV \u89C6\u9891",mpegps:"MPEG-PS \u89C6\u9891",ogg:"Ogg \u5A92\u4F53",gif:"GIF \u52A8\u56FE",png:"PNG \u56FE\u7247",jpeg:"JPEG \u56FE\u7247",pdf:"PDF \u6587\u6863",zip:"ZIP \u538B\u7F29\u5305\u6216 Office \u6587\u6863",mp3:"MP3 \u97F3\u9891",text:"\u6587\u672C\u6587\u4EF6",mpegts:"MPEG-TS \u89C6\u9891",unknown:"\u65E0\u6CD5\u8BC6\u522B\u7684\u6587\u4EF6"}},demo:{fileName:"\u793A\u4F8B\u5F55\u5C4F.mp4",loadFailed:"\u793A\u4F8B\u5F55\u5C4F\u6CA1\u80FD\u52A0\u8F7D\uFF1A{{error}}"},feedback:{issueBody:`**\u53D1\u751F\u4E86\u4EC0\u4E48\uFF1F**
4
+
5
+
6
+ **\u672C\u6765\u671F\u671B\u600E\u6837\uFF1F**
7
+
8
+
9
+ **\u5F55\u5C4F\u60C5\u51B5**\uFF08\u5F55\u7684\u662F\u4EC0\u4E48\u9875\u9762\u3001\u600E\u4E48\u79FB\u52A8\u3001\u5927\u6982\u591A\u957F\uFF1B\u53EF\u4EE5\u9644\u622A\u56FE\uFF0C\u6CE8\u610F\u906E\u4F4F\u9690\u79C1\uFF09
10
+
11
+
12
+ ---
13
+ \u4EE5\u4E0B\u7531 Long Screen \u81EA\u52A8\u586B\u5199\uFF0C\u53EF\u4EE5\u5220\u6539\uFF1A
14
+ - \u6D4F\u89C8\u5668\uFF1A{{browser}}
15
+ - \u6253\u5F00\u65B9\u5F0F\uFF1A{{page}}
16
+ - \u591A\u7EBF\u7A0B\u6838\u5FC3\uFF08\u8DE8\u6E90\u9694\u79BB\uFF09\uFF1A{{threads}}
17
+ - \u65E5\u5FD7\u91CC\u7684\u8B66\u544A\uFF1A{{warnings}}
18
+ `,portable:"\u4FBF\u643A\u7248\uFF08\u672C\u5730\u6587\u4EF6\uFF09",yes:"\u662F",no:"\u5426",none:"\u65E0"},viewer:{previewLevel:"\u9884\u89C8 L{{level}}\uFF08\u5BFC\u51FA\u4ECD\u662F\u539F\u5C3A\u5BF8\uFF09",nativeLevel:"\u539F\u5C3A\u5BF8 L0",qualityHint:" \xB7 \u653E\u5927\u770B\u62FC\u63A5\u8D28\u91CF",unobservedHint:" \xB7 \u84DD\u8272 = \u6CA1\u62CD\u5230",provisionalHint:" \xB7 \u7D2B\u8272 = \u4E00\u95EA\u800C\u8FC7\u7684\u6D6E\u5C42"}},names:{fixed:"\u56FA\u5B9A\u754C\u9762",divider:"\u56FA\u5B9A\u5206\u9694\u754C\u9762",contentCanvas:"\u5185\u5BB9\u753B\u5E03 {{n}}",unassigned:"\u672A\u6307\u5B9A\u533A\u57DF \xB7 \u5C4F\u5E55\u5750\u6807\u89C2\u5BDF",contentRegion:"\u5185\u5BB9\u533A\u57DF {{n}}",ignored:"\u4E3B\u52A8\u5FFD\u7565",fragment:"\u672A\u5B9A\u4F4D\u7247\u6BB5 {{n}}",framed:"\u4FDD\u7559\u5916\u6846"}};var bo={diag:{MODEL_ASSUMPTIONS:{message:"\u91CD\u5EFA\u91C7\u7528\u5206\u5C42\u5E73\u79FB\u753B\u5E03\u4E0E\u51E0\u4F55\u56DE\u73AF\u7EA6\u675F\u3002\u81EA\u52A8\u906E\u7F69\u548C\u52A8\u6001\u533A\u57DF\u5C5E\u4E8E\u542F\u53D1\u5F0F\u63A8\u65AD\uFF1B\u7F6E\u4FE1\u5206\u6570\u4E0D\u662F\u7ECF\u8FC7\u6821\u51C6\u7684\u6B63\u786E\u6982\u7387\u3002\u4E16\u754C\u4E00\u81F4\u6027\u6BD4\u8F83\u6309\u672C\u7247\u6E90\u58F0\u660E\u7684\u89E3\u7801\u566A\u58F0 \xB1{{noise}} \u7EA7\u6267\u884C{{margin}}\u3002",marginLossy:"\uFF08\u538B\u7F29\u89C6\u9891\u7684\u632F\u94C3/\u8272\u5EA6\u91CD\u5EFA\u4F59\u91CF\uFF09",marginLossless:"\uFF08\u65E0\u635F\u7247\u6E90\uFF0C\u9010\u50CF\u7D20\u7CBE\u786E\u6BD4\u8F83\uFF09",action:"\u6BD4\u4F8B\u6216\u7ED3\u6784\u65E0\u6CD5\u5171\u5B58\u65F6\u4F1A\u4FDD\u7559\u72EC\u7ACB\u7247\u6BB5\uFF0C\u4E0D\u628A\u4E0D\u76F8\u5BB9\u7684\u72B6\u6001\u5F3A\u884C\u62FC\u63A5\u3002"},APPROXIMATE_DECODER:{message:"\u5DF2\u660E\u786E\u542F\u7528 {{fps}} Hz \u539F\u751F seek \u517C\u5BB9\u6A21\u5F0F\u3002\u4E0D\u80FD\u4FDD\u8BC1\u91C7\u5230\u89C6\u9891\u7684\u6BCF\u4E00\u5E27\uFF0C\u77ED\u6682\u5185\u5BB9\u53EF\u80FD\u7F3A\u5931\u3002",action:"\u9700\u8981\u9010\u5E27\u8986\u76D6\u4FDD\u8BC1\u65F6\uFF0C\u4F7F\u7528 WebCodecs \u652F\u6301\u7684 H.264\u3001VP9 \u7B49\u8F93\u5165\u3002"},ANALYSIS_PYRAMID:{message:"\u8FD0\u52A8\u5206\u6790\u7684\u957F\u8FB9\u4E0A\u9650\u4E3A {{size}}px\uFF1B\u539F\u5206\u8FA8\u7387\u50CF\u7D20\u7528\u4E8E\u7CBE\u4FEE\u548C\u6700\u7EC8\u5408\u6210\uFF0C\u8F93\u51FA\u6CA1\u6709\u8DDF\u968F\u964D\u91C7\u6837\u3002"},FRAME_MEMORY_PRESSURE:{message:"\u5355\u5E27\u539F\u59CB\u50CF\u7D20\u53CA\u53C2\u8003\u5E27\u5360\u7528\u5DF2\u63A5\u8FD1\u6240\u9009\u7F13\u5B58\u9884\u7B97\u3002\u89E3\u7801\u5668/GPU \u81EA\u8EAB\u5185\u5B58\u4E0D\u53D7 JavaScript \u7F13\u5B58\u9884\u7B97\u63A7\u5236\u3002",action:"\u4E0D\u4F1A\u9759\u9ED8\u964D\u4F4E\u8F93\u51FA\u5206\u8FA8\u7387\uFF1B\u5185\u5B58\u4E0D\u8DB3\u65F6\u4FDD\u7559\u5DF2\u63D0\u4EA4\u6570\u636E\u5E76\u62A5\u544A\u5931\u8D25\u3002"},RUN_FAILURE:{action:"\u5DF2\u7ECF\u63D0\u4EA4\u5230\u672C\u5730\u5B58\u50A8\u7684\u74E6\u7247\u4ECD\u53EF\u67E5\u770B\u548C\u5BFC\u51FA\uFF1B\u6CA1\u6709\u628A\u5931\u8D25\u6807\u8BB0\u6210\u6210\u529F\u3002"},PERSISTENCE_ERROR:{action:"\u5B58\u50A8\u5199\u5165\u4E5F\u5931\u8D25\uFF1B\u4EC5\u5148\u524D\u6210\u529F\u63D0\u4EA4\u7684\u6570\u636E\u53EF\u6062\u590D\u3002"},MEMORY_BUDGET_RAISED:{message:"\u74E6\u7247\u7F13\u5B58\u4ECE\u9884\u7B97\u5141\u8BB8\u7684 {{from}} \u5757\u63D0\u9AD8\u5230 {{to}} \u5757\uFF08\u7EA6 {{mb}} MB\uFF09\uFF0C\u4EE5\u5BB9\u7EB3\u4E00\u5E27\u89E6\u53CA\u7684\u5168\u90E8\u74E6\u7247\u3002",action:"\u5C0F\u4E8E\u5355\u5E27\u8986\u76D6\u8303\u56F4\u7684\u7F13\u5B58\u4F1A\u8BA9\u6BCF\u4E00\u5E27\u90FD\u5B8C\u6574\u5730\u91CD\u65B0\u89E3\u7801\u4E0E\u7F16\u7801\u6240\u6709\u74E6\u7247\uFF1B\u5982\u9700\u66F4\u4F4E\u5185\u5B58\uFF0C\u8BF7\u964D\u4F4E\u5F55\u5C4F\u5206\u8FA8\u7387\u3002"},NONFINITE_POSE:{message:"\u5B9A\u4F4D\u8BA1\u7B97\u4EA7\u751F\u65E0\u6548\u6570\u503C\u3002\u5DF2\u9694\u79BB\u6B64\u89C2\u5BDF\uFF0C\u672A\u5C06\u65E0\u6548\u5750\u6807\u5199\u5165\u753B\u5E03\u3002"},MISSING_PLAN:{message:"\u6E32\u67D3\u9636\u6BB5\u7F3A\u5C11 plan/{{index}}\uFF1B\u5DF2\u505C\u6B62\u5728\u5DF2\u63D0\u4EA4\u7684\u6E32\u67D3\u524D\u7F00\u3002",action:"\u68C0\u67E5\u672C\u5730\u5B58\u50A8\u5B8C\u6574\u6027\uFF1B\u7F3A\u5931\u7684\u6C42\u89E3\u8BA1\u5212\u4E0D\u4F1A\u88AB\u9759\u9ED8\u5F53\u4F5C\u7A7A\u89C2\u5BDF\u3002"},prefixOnly:{base:{scan:"\u4EC5\u5BF9\u5DF2\u7ECF\u89E3\u7801\u7684\u524D {{frames}} \u5E27\u7EE7\u7EED\u5B9A\u4F4D\u548C\u5408\u6210",solve:"\u4EC5\u5BF9\u5DF2\u7ECF\u6C42\u89E3\u7684\u524D {{frames}} \u5E27\u7EE7\u7EED\u6E32\u67D3",render:"\u4EC5\u5BF9\u5DF2\u7ECF\u6E32\u67D3\u7684\u524D {{frames}} \u5E27\u4FDD\u7559\u7ED3\u679C"},suffixPersistence:"\uFF1B\u5B58\u50A8\u5199\u5165\u5DF2\u505C\u6B62\u3002",suffixDefault:"\u3002"},PRESENTATION_TOO_SPARSE:{action:"\u8BE5\u753B\u5E03\u7684\u5E26\u5916\u6846\u5448\u73B0\u88AB\u8DF3\u8FC7\uFF1B\u9875\u9762\u5750\u6807\u4E0B\u7684\u6838\u5FC3\u91CD\u5EFA\u4E0D\u53D7\u5F71\u54CD\u3002"},PRESENTATION_FRAME:{message:"\u5E26\u5916\u6846\u89C6\u56FE\u4E0E\u539F\u59CB\u4E8C\u7EF4\u5185\u5BB9\u5206\u522B\u4FDD\u7559\u3002\u5916\u6846\u6765\u81EA\u53C2\u8003\u5E27\uFF0C\u5EF6\u957F\u90E8\u5206\u4EC5\u4E3A\u88C5\u9970\u80CC\u666F\uFF0C\u4E0D\u7B97\u4F5C\u5DF2\u89C2\u5BDF\u5185\u5BB9\uFF1B\u4E0D\u4F1A\u62C9\u4F38\u6216\u590D\u5236\u5DE5\u5177\u680F\u56FE\u6807\u3002\u5176\u4ED6 pane \u5728\u5916\u6846\u4E2D\u53EA\u662F\u53C2\u8003\u5FEB\u7167\u3002"},PRESENTATION_STAGE_FAILED:{action:"\u5E26\u5916\u6846\u5448\u73B0\u9636\u6BB5\u5931\u8D25\uFF1B\u9875\u9762\u5750\u6807\u4E0B\u7684\u6838\u5FC3\u91CD\u5EFA\u7ED3\u679C\u548C\u72B6\u6001\u4E0D\u53D7\u5F71\u54CD\u3002"},PYRAMID_FAILED:{action:"\u9884\u89C8\u91D1\u5B57\u5854\u6784\u5EFA\u5931\u8D25\uFF1B\u539F\u5C3A\u5BF8\u74E6\u7247\u4E0D\u53D7\u5F71\u54CD\uFF0C\u4ECD\u53EF\u6B63\u5E38\u67E5\u770B\u548C\u5BFC\u51FA\u3002"},PASS_FRAME_COUNT_MISMATCH:{message:"{{pass}} \u9636\u6BB5\u53EA\u5B8C\u6210 {{actual}}/{{expected}} \u5E27\uFF1B\u7ED3\u679C\u88AB\u6807\u8BB0\u4E3A partial\u3002",action:"\u5DF2\u4FDD\u7559\u6210\u529F\u63D0\u4EA4\u7684\u524D\u7F00\uFF1B\u7F3A\u5931\u7684\u5E27\u4E0D\u4F1A\u88AB\u9759\u9ED8\u5F53\u4F5C\u5DF2\u5904\u7406\u3002"},FRAME_CONVERSION:{message:"\u89E3\u7801\u540E\u7684\u6BCF\u4E00\u5E27\u8FD9\u6837\u8F6C\u6210\u50CF\u7D20\uFF1A{{method}}\u3002"},HDR_UNCHECKED:{message:"\u8FD9\u662F {{transfer}} \u683C\u5F0F\u7684 HDR \u5F55\u5C4F\uFF0C\u4F46\u5728\u8FD9\u4E2A\u6D4F\u89C8\u5668\u91CC\u6CA1\u6CD5\u6838\u5BF9\u989C\u8272\u6362\u7B97\uFF0C\u62FC\u51FA\u6765\u7684\u56FE\u989C\u8272\u53EF\u80FD\u504F\u6697\u6216\u53D1\u7070\u3002",action:"\u7528\u6700\u65B0\u7248\u7684 Chrome \u6216 Safari \u518D\u62FC\u4E00\u6B21\u3002"},HDR_ABOVE_WHITE:{message:"\u8FD9\u6BB5 HDR \u5F55\u5C4F\u7684\u7B2C\u4E00\u5E27\u6709 {{percent}}% \u7684\u50CF\u7D20\u6BD4\u666E\u901A\u767D\u8272\u8FD8\u4EAE\uFF0C\u90FD\u6309\u767D\u8272\u5904\u7406\u4E86\u3002\u8981\u662F\u62FC\u51FA\u6765\u7684\u56FE\u770B\u7740\u8FC7\u66DD\uFF0C\u591A\u534A\u662F\u5F55\u5C4F\u8F6F\u4EF6\u628A\u666E\u901A\u5185\u5BB9\u7684\u767D\u8272\u653E\u5728\u4E86\u66F4\u9AD8\u7684\u4EAE\u5EA6\u3002",action:"\u5728\u5F55\u5C4F\u8F6F\u4EF6\u91CC\u628A SDR \u767D\u8272\u4EAE\u5EA6\u8C03\u56DE 100 \u5C3C\u7279\uFF0C\u6216\u8005\u5173\u6389 HDR \u5F55\u5236\u3002"},SLOW_CONVERSION:{message:"\u8FD9\u4E2A\u6D4F\u89C8\u5668\u628A\u8FD9\u6BB5\u5F55\u5C4F\u7684\u6BCF\u4E00\u5E27\u8F6C\u6210\u50CF\u7D20\u8981\u5927\u7EA6 {{ms}} \u6BEB\u79D2\uFF0C\u6574\u6B21\u62FC\u56FE\u5149\u662F\u8F6C\u6362\u5C31\u8981\u5927\u7EA6 {{minutes}} \u5206\u949F\u3002",action:"\u6362\u7528\u6700\u65B0\u7248\u7684 Chrome \u6216 Safari \u4F1A\u5FEB\u5F88\u591A\uFF0C\u4E5F\u53EF\u4EE5\u5148\u628A\u5F55\u5C4F\u8F6C\u6210 H.264\u3002"},REVEAL_SKIPPED:{message:"\u8FD9\u6B21\u62FC\u51FA\u7684\u753B\u5E03\u592A\u591A\u6216\u592A\u5927\uFF1A\u6E05\u7406\u6D6E\u5C42\uFF08\u5149\u6807\u3001\u60AC\u6D6E\u6309\u94AE\u3001\u6EDA\u52A8\u6761\uFF09\u8FD8\u8981\u5927\u7EA6 {{need}} MB \u5185\u5B58\uFF0C\u5DF2\u7ECF\u4E0D\u591F\u4E86\uFF0C\u6240\u4EE5\u8FD9\u4E00\u6B65\u8DF3\u8FC7\u4E86\uFF0C\u76F4\u63A5\u7528\u62FC\u51FA\u6765\u7684\u50CF\u7D20\u3002",action:"\u5176\u4F59\u7ED3\u679C\u4E0D\u53D7\u5F71\u54CD\u3002\u753B\u5E03\u8FD9\u4E48\u591A\uFF0C\u901A\u5E38\u662F\u5F55\u5C4F\u91CC\u6709\u4E9B\u6BB5\u843D\u6CA1\u80FD\u548C\u524D\u540E\u8FDE\u4E0A\uFF1B\u628A\u5F55\u5C4F\u526A\u77ED\u4E00\u4E9B\u518D\u62FC\uFF0C\u6216\u6362\u4E00\u53F0\u5185\u5B58\u5927\u7684\u7535\u8111\u3002"},COMPUTE_BACKEND:{message:"{{backend}} \u2014 {{reason}}\u3002Rust \u6838\u5FC3\uFF1A{{variant}} \u6784\u5EFA\uFF0C{{threads}} \u4E2A\u8BA1\u7B97\u7EBF\u7A0B\uFF08{{coreReason}}\uFF09\u3002"},PRESENTATION_REFERENCE_FAILED:{action:"\u5E26\u5916\u6846\u5448\u73B0\u5C06\u88AB\u8DF3\u8FC7\uFF1B\u9875\u9762\u5750\u6807\u4E0B\u7684\u6838\u5FC3\u91CD\u5EFA\u4E0D\u53D7\u5F71\u54CD\u3002"},LOW_TEXTURE_UNOBSERVABLE:{message:"\u753B\u9762\u7F3A\u4E4F\u53EF\u8FA8\u8BA4\u7EB9\u7406\u3002\u5B8C\u5168\u76F8\u540C\u7684\u7A7A\u767D\u5E27\u65E2\u53EF\u80FD\u662F\u6682\u505C\uFF0C\u4E5F\u53EF\u80FD\u662F\u5728\u7A7A\u767D\u533A\u57DF\u79FB\u52A8\uFF1B\u50CF\u7D20\u672C\u8EAB\u65E0\u6CD5\u533A\u5206\u3002",action:"\u589E\u52A0\u6709\u533A\u5206\u5EA6\u7684\u53EF\u89C1\u5185\u5BB9\u6216\u5F55\u5236\u66F4\u591A\u91CD\u53E0\u3002\u96F6\u4F4D\u79FB\u53EA\u662F best guess\u3002"},UNRESOLVED_MOTION:{message:"\u8FD9\u4E00\u89C2\u5BDF\u7F3A\u5C11\u53EF\u9760\u7684\u89C6\u89C9\u5BF9\u9F50\u4F9D\u636E\u3002\u5B9A\u4F4D\u9636\u6BB5\u5C06\u5C1D\u8BD5\u5386\u53F2\u91CD\u5B9A\u4F4D\uFF1B\u4ECD\u65E0\u6CD5\u5B9A\u4F4D\u65F6\u4FDD\u7559\u72EC\u7ACB\u7247\u6BB5\u3002"},AMBIGUOUS_PATTERN:{message:"\u68C0\u6D4B\u5230\u5177\u6709\u591A\u79CD\u5408\u7406\u5339\u914D\u7684\u91CD\u590D\u7EB9\u7406\uFF1B\u8FDE\u7EED\u6027\u53EA\u662F\u5B9A\u4F4D\u5148\u9A8C\uFF0C\u4E0D\u662F\u5DF2\u8BC1\u5B9E\u7684\u552F\u4E00\u4F4D\u7F6E\u3002"},TEMPORAL_UNDERSAMPLING:{message:"\u6B64\u5E27\u6301\u7EED\u65F6\u95F4\u8F83\u957F\uFF1B\u9AD8\u901F\u79FB\u52A8\u671F\u95F4\u53EF\u80FD\u5B58\u5728\u4ECE\u672A\u88AB\u91C7\u96C6\u5230\u7684\u533A\u57DF\u3002"},MANUAL_UNASSIGNED:{message:"\u624B\u52A8\u533A\u57DF\u672A\u8986\u76D6\u7684\u90E8\u5206\u88AB\u4FDD\u7559\u4E3A\u72EC\u7ACB\u7684\u4F4E\u7F6E\u4FE1\u5C4F\u5E55\u5750\u6807\u89C2\u5BDF\u5C42\uFF0C\u6CA1\u6709\u5BA3\u79F0\u8FD9\u4E9B\u50CF\u7D20\u5DF2\u6062\u590D\u5230\u9875\u9762\u5750\u6807\u3002"},EXPLICITLY_EXCLUDED_REGION:{message:"\u6309\u624B\u52A8\u8BBE\u7F6E\u6392\u9664\u4E86\u201C\u5FFD\u7565\u201D\u533A\u57DF\u3002\u8BE5\u533A\u57DF\u4E0D\u4F1A\u8D21\u732E\u5230\u91CD\u5EFA\u7ED3\u679C\uFF0C\u8FD9\u4E0D\u662F\u81EA\u52A8\u4E22\u5E27\u3002"},MANUAL_REGION_PRIORITY:{message:"\u624B\u52A8\u533A\u57DF\u91CD\u53E0\u65F6\uFF0C\u540E\u7ED8\u5236\u533A\u57DF\u4F18\u5148\uFF1B\u5FFD\u7565\u533A\u57DF\u59CB\u7EC8\u6392\u9664\u3002\u5176\u4F59\u50CF\u7D20\u4FDD\u7559\u5728\u672A\u6307\u5B9A\u89C2\u5BDF\u5C42\u3002"},AUTOMATIC_LAYER_MASK:{message:"\u81EA\u52A8\u5212\u5206\u51FA {{moving}} \u4E2A\u5185\u5BB9\u533A\u57DF\u548C {{fixed}} \u4E2A\u56FA\u5B9A\u754C\u9762\u533A\u57DF\u3002\u8FB9\u754C\u6765\u81EA\u50CF\u7D20\u8FD0\u52A8\u7EDF\u8BA1\uFF0C\u800C\u4E0D\u662F DOM\u3002",action:"\u82E5\u906E\u7F69\u5F52\u5C5E\u4E0D\u5408\u7406\uFF0C\u53EF\u5728\u201C\u533A\u57DF\u201D\u91CC\u753B\u51FA\u7CBE\u786E\u6EDA\u52A8\u533A\u540E\u91CD\u65B0\u5904\u7406\u3002"},MULTIPLE_SCROLL_LAYERS:{message:"\u591A\u4E2A\u72EC\u7ACB\u6EDA\u52A8\u533A\u5C06\u5206\u522B\u5EFA\u7ACB\u753B\u5E03\uFF0C\u4E0D\u5F3A\u5236\u5171\u4EAB\u4E00\u4E2A scroll offset\u3002"},TEMPORAL_OR_ALIGNMENT_CONFLICT:{message:"\u672C\u5E27\u5BF9\u9F50\u540E\u7684\u91CD\u53E0\u533A\u57DF\u5171\u6709 {{conflicts}} \u4E2A\u660E\u663E\u4E0D\u540C\u7684\u50CF\u7D20\uFF1B\u6B64\u533A\u57DF\u662F\u5176\u4E2D\u4E00\u4E2A\u51B2\u7A81\u5206\u91CF\u3002\u53EF\u80FD\u662F\u52A8\u753B\u3001\u5185\u5BB9\u66F4\u65B0\u3001\u91CD\u6392\u6216\u914D\u51C6\u6B8B\u5DEE\u3002",actionStable:"\u5DF2\u5C3D\u91CF\u51BB\u7ED3\u5355\u4E00\u65F6\u523B\u7684\u5B8C\u6574\u51B2\u7A81\u533A\u57DF\uFF1B\u67E5\u770B\u6A59\u8272\u8BCA\u65AD\u548C\u539F\u89C6\u9891\u65F6\u95F4\u70B9\u3002",actionRolling:"\u4EC5\u5728\u5B8C\u6574\u53EF\u89C1\u65F6\u7528\u540C\u4E00\u5E27\u66F4\u65B0\u6574\u5757\u51B2\u7A81\u533A\u57DF\uFF1B\u5E76\u975E\u5168\u9875\u9762\u540C\u4E00\u65F6\u523B\u3002"},INCOMPLETE_TEMPORAL_PATCH:{message:"\u8FD9\u4E2A\u53D8\u5316\u533A\u57DF\u4ECE\u672A\u5B8C\u6574\u5730\u51FA\u73B0\u5728\u4E00\u4E2A\u53EF\u7528\u89C6\u53E3\u4E2D\uFF1B\u65E0\u6CD5\u4FDD\u8BC1\u5176\u6240\u6709\u50CF\u7D20\u6765\u81EA\u540C\u4E00\u65F6\u523B\u3002",action:"\u4FDD\u7559\u5DF2\u89C2\u5BDF\u5185\u5BB9\u548C\u660E\u786E\u51B2\u7A81\u6807\u8BB0\uFF0C\u6CA1\u6709\u586B\u9020\u672A\u89C2\u5BDF\u90E8\u5206\u3002"},MISSING_SCAN_RECORD:{message:"\u6C42\u89E3\u9636\u6BB5\u7F3A\u5C11 scan/{{index}}\uFF1B\u5DF2\u505C\u6B62\u5728\u5DF2\u63D0\u4EA4\u7684\u6C42\u89E3\u524D\u7F00\u3002",action:"\u68C0\u67E5\u672C\u5730\u5B58\u50A8\u5B8C\u6574\u6027\uFF1B\u7F3A\u5931\u7684\u626B\u63CF\u8BB0\u5F55\u4E0D\u4F1A\u88AB\u5F53\u4F5C\u96F6\u4F4D\u79FB\u3002"},GRAPH_RESIDUAL:{message:"\u4F4D\u7F6E\u56FE\u6700\u5927\u6B8B\u5DEE\u4ECD\u6709 {{residual}} \u539F\u50CF\u7D20\uFF1B\u76F8\u5173\u63A5\u7F1D\u53EF\u80FD\u5B58\u5728\u51E0\u4F55\u4E0D\u4E00\u81F4\u3002",action:"\u68C0\u67E5\u56DE\u73AF\u9644\u8FD1\u7684\u6587\u5B57\u4E0E\u91CD\u590D\u7EB9\u7406\u3002\u8BE5\u6B8B\u5DEE\u6CA1\u6709\u88AB\u9690\u85CF\u3002"},PARTIAL_CONTENT_CHANGE:{message:"\u7EA6 {{percent}}% \u7684\u7EB9\u7406\u533A\u5757\u4E0E\u6574\u4F53\u4F4D\u79FB\u4E0D\u4E00\u81F4\uFF08\u52A8\u753B\u3001\u89C6\u9891\u3001\u61D2\u52A0\u8F7D\u6216\u91CD\u6392\uFF09\uFF1B\u4F4D\u79FB\u7531\u4E00\u81F4\u533A\u5757\u51B3\u5B9A\uFF0C\u51B2\u7A81\u533A\u57DF\u5728\u5408\u6210\u65F6\u5355\u72EC\u5904\u7406\u3002"},THIN_OVERLAP_STEP:{message:"\u4E24\u5E27\u4E4B\u95F4\u79FB\u52A8\u5F88\u5FEB\uFF0C\u53EA\u5269\u5F88\u5C0F\u7684\u91CD\u53E0\u53EF\u4F9B\u5BF9\u9F50\u3002\u4F4D\u79FB\u53D6\u81EA\u8FD9\u4E00\u5C0F\u5757\u8BC1\u636E\uFF1B\u5728\u5468\u671F\u6027\u6392\u7248\u4E2D\uFF0C\u76F8\u90BB\u5468\u671F\u540C\u6837\u80FD\u89E3\u91CA\u8FD9\u4E9B\u50CF\u7D20\u3002",action:"\u82E5\u4E4B\u540E\u7684\u56DE\u8BBF\u7ED9\u51FA\u66F4\u5F3A\u7684\u8BC1\u636E\uFF0C\u8FD9\u6BB5\u8F68\u8FF9\u4F1A\u88AB\u6574\u4F53\u6539\u6B63\u5E76\u8BB0\u5F55\u3002"},LOW_CONFIDENCE_PLACEMENT:{messageAmbiguous:"\u91CD\u590D\u7EB9\u7406\u4F7F\u591A\u4E2A\u4F4D\u79FB\u90FD\u80FD\u89E3\u91CA\u50CF\u7D20\uFF1B\u91C7\u7528\u4E0E\u8FD0\u52A8\u8FDE\u7EED\u6027\u6700\u4E00\u81F4\u7684\u89E3\uFF0C\u8FD9\u662F best guess \u800C\u975E\u552F\u4E00\u6B63\u786E\u5BF9\u9F50\u3002",messageLowConfidence:"\u8FD9\u4E00\u533A\u57DF\u91C7\u7528\u4E86\u4F4E\u7F6E\u4FE1\u5EA6\u7684\u4F4D\u7F6E\u63A8\u65AD\uFF1B\u76F8\u5173\u50CF\u7D20\u4F1A\u5728\u8D28\u91CF\u906E\u7F69\u4E2D\u6807\u8BB0\u3002",messageStatic:"\u4E24\u5E27\u51E0\u4E4E\u76F8\u540C\u4F46\u7F3A\u5C11\u53EF\u9A8C\u8BC1\u7684\u7279\u5F81\u5BF9\u5E94\uFF1B\u6309\u6682\u505C\uFF08\u96F6\u4F4D\u79FB\uFF09\u5904\u7406\uFF0C\u8FD9\u662F best guess\u3002",action:"\u8FDE\u7EED\u8F68\u8FF9\u548C\u5DF2\u6709\u951A\u70B9\u7528\u4E8E best guess\uFF0C\u4E0D\u4EE3\u8868\u552F\u4E00\u6B63\u786E\u5BF9\u9F50\u3002"},UNOBSERVABLE_FRAME:{message:"\u8FD9\u4E00\u5E27\u5728\u8BE5\u533A\u57DF\u6CA1\u6709\u53EF\u8FA8\u8BA4\u7EB9\u7406\uFF1A\u7A7A\u767D\u5E27\u65E2\u53EF\u80FD\u662F\u6682\u505C\uFF0C\u4E5F\u53EF\u80FD\u662F\u5728\u7A7A\u767D\u533A\u57DF\u79FB\u52A8\uFF0C\u50CF\u7D20\u672C\u8EAB\u65E0\u6CD5\u533A\u5206\u3002\u5B83\u4E0D\u4F1A\u88AB\u753B\u5230\u4EFB\u4F55\u4F4D\u7F6E\u3002",action:"\u82E5\u7A7A\u767D\u4E4B\u540E\u7684\u5185\u5BB9\u65E0\u6CD5\u4E0E\u4E4B\u524D\u7684\u89C2\u5BDF\u91CD\u53E0\uFF0C\u5C06\u4FDD\u7559\u4E3A\u72EC\u7ACB\u7247\u6BB5\uFF0C\u800C\u4E0D\u662F\u731C\u6D4B\u4E2D\u95F4\u8DDD\u79BB\u3002"},RELOCALIZED:{message:"\u901A\u8FC7\u5386\u53F2\u89C6\u89C9\u951A\u70B9\u91CD\u65B0\u5B9A\u4F4D\u5230\u5DF2\u89C2\u5BDF\u753B\u5E03\uFF0C\u672A\u628A\u56DE\u8BBF\u5185\u5BB9\u8FFD\u52A0\u6210\u957F\u56FE\u3002"},SCALE_CHANGE_FRAGMENT:{message:"\u68C0\u6D4B\u5230\u7EA6 {{scale}}\xD7 \u7684\u6BD4\u4F8B/\u5E03\u5C40\u53D8\u6362\uFF0C\u5DF2\u6309\u539F\u50CF\u7D20\u4FDD\u7559\u72EC\u7ACB\u7247\u6BB5\uFF1B\u6CA1\u6709\u5077\u5077\u7F29\u653E\u6DF7\u5408\u3002",action:"\u8DE8\u7247\u6BB5\u5173\u7CFB\u5C1A\u672A\u8BC1\u5B9E\uFF1B\u540E\u7EED\u56DE\u8BBF\u82E5\u80FD\u53EF\u9760\u5339\u914D\uFF0C\u7247\u6BB5\u4F1A\u88AB\u6574\u4F53\u63A5\u56DE\u3002\u91CD\u65B0\u5F55\u5236\u65F6\u589E\u52A0\u91CD\u53E0\uFF0C\u6216\u7528\u533A\u57DF\u8BBE\u7F6E\u9694\u79BB\u53D8\u5316\u7EC4\u4EF6\u3002"},UNPLACED_FRAGMENT:{message:"\u65E0\u6CD5\u786E\u8BA4\u4E0E\u539F\u753B\u5E03\u7684\u76F8\u5BF9\u4F4D\u7F6E\uFF0C\u5DF2\u4FDD\u7559\u72EC\u7ACB\u53EF\u5BFC\u51FA\u7247\u6BB5\u3002\u4E24\u4E2A\u7247\u6BB5\u4E4B\u95F4\u53EF\u80FD\u91CD\u53E0\uFF0C\u4E5F\u53EF\u80FD\u5B58\u5728\u771F\u5B9E\u7F3A\u53E3\u3002",action:"\u8DE8\u7247\u6BB5\u5173\u7CFB\u5C1A\u672A\u8BC1\u5B9E\uFF1B\u540E\u7EED\u56DE\u8BBF\u82E5\u80FD\u53EF\u9760\u5339\u914D\uFF0C\u7247\u6BB5\u4F1A\u88AB\u6574\u4F53\u63A5\u56DE\u3002\u91CD\u65B0\u5F55\u5236\u65F6\u589E\u52A0\u91CD\u53E0\uFF0C\u6216\u7528\u533A\u57DF\u8BBE\u7F6E\u9694\u79BB\u53D8\u5316\u7EC4\u4EF6\u3002"},STICKY_OCCLUSION:{message:"\u9876\u7AEF\u7EB9\u7406\u652F\u6301\u5C4F\u5E55\u56FA\u5B9A\u800C\u975E\u9875\u9762\u4F4D\u79FB\uFF1B\u672C\u6B21\u89C2\u5BDF\u7684\u56FA\u5B9A\u906E\u6321\u4E0D\u5199\u5165\u79FB\u52A8\u753B\u5E03\u3002\u539F\u59CB\u53C2\u8003\u754C\u9762\u4FDD\u7559\u5728\u5916\u6846\u5448\u73B0\u4E2D\u3002"},FRAGMENT_ATTACHED:{message:"\u56DE\u8BBF\u8BC1\u636E\u628A\u4E00\u4E2A\u72EC\u7ACB\u7247\u6BB5\u6574\u4F53\u63A5\u56DE\u4E86\u5DF2\u6709\u753B\u5E03\uFF1B\u7247\u6BB5\u5185\u7684\u76F8\u5BF9\u8F68\u8FF9\u4FDD\u6301\u4E0D\u53D8\u3002"},TRAJECTORY_CORRECTED:{message:"\u4E0A\u4E00\u6B65\u53EA\u6709\u5F88\u5C0F\u7684\u91CD\u53E0\uFF0C\u672C\u5E27\u4E0E\u5DF2\u89C2\u5BDF\u5185\u5BB9\u7684\u5339\u914D\u76F8\u5DEE {{discrepancy}}px \u4E14\u8BC1\u636E\u66F4\u5F3A\uFF1B\u5DF2\u6309\u8FD9\u4E00\u5339\u914D\u6539\u6B63\u5F53\u524D\u4F4D\u7F6E\u3002",action:"\u88AB\u6539\u6B63\u7684\u662F\u672C\u5E27\u53CA\u4E4B\u540E\u7684\u8F68\u8FF9\uFF1B\u6B64\u524D\u5199\u5165\u7684\u50CF\u7D20\u4FDD\u6301\u539F\u6837\uFF0C\u53EF\u80FD\u4E0E\u6539\u6B63\u540E\u7684\u5750\u6807\u5B58\u5728\u63A5\u7F1D\u3002"},LOOP_CLOSURE:{message:"\u53D1\u73B0\u53EF\u9760\u7684\u5386\u53F2\u91CD\u8BBF\uFF0C\u5DF2\u52A0\u5165\u5168\u5C40\u4F4D\u7F6E\u7EA6\u675F\uFF1B\u6700\u7EC8\u5408\u6210\u4F7F\u7528\u6821\u6B63\u540E\u7684\u8F68\u8FF9\u3002"},INCONSISTENT_LOOP_REJECTED:{message:"\u5386\u53F2\u5339\u914D\u4E0E\u8FDE\u7EED\u8F68\u8FF9\u76F8\u5DEE {{discrepancy}}px\uFF1B\u8BC1\u636E\u51B2\u7A81\uFF0C\u672A\u5F3A\u52A0\u4E3A\u56DE\u73AF\u3002"},AMBIGUOUS_LOOP:{message:"\u5386\u53F2\u68C0\u7D22\u6709\u591A\u4E2A\u63A5\u8FD1\u7684\u5408\u7406\u4F4D\u7F6E\uFF1B\u6CA1\u6709\u628A\u4E0D\u786E\u5B9A\u56DE\u73AF\u5F53\u4F5C\u786C\u7EA6\u675F\u3002"}},progress:{runPartial:"\u5DF2\u4FDD\u5B58\u62FC\u597D\u7684\u90E8\u5206\uFF0C\u7ED3\u679C\u6807\u8BB0\u4E3A\u4E0D\u5B8C\u6574\u3002",runComplete:"\u62FC\u597D\u4E86\u3002\u68CB\u76D8\u683C\u662F\u6CA1\u62CD\u5230\u7684\u5730\u65B9\uFF0C\u7EC6\u8282\u89C1\u65E5\u5FD7\u3002",render:"\u6309\u539F\u5C3A\u5BF8\u628A\u62CD\u5230\u7684\u753B\u9762\u62FC\u8D77\u6765\uFF0C\u6CA1\u62CD\u5230\u7684\u5730\u65B9\u7559\u7A7A\u3002",reveal:{learn:"\u518D\u770B\u4E00\u904D\u5F55\u5C4F\uFF0C\u627E\u51FA\u4E00\u76F4\u6D6E\u5728\u9875\u9762\u4E0A\u7684\u6309\u94AE\u3001\u8F93\u5165\u680F\u548C\u6EDA\u52A8\u6761\u3002",agree:"\u6838\u5BF9\u6BCF\u4E00\u5757\u9875\u9762\u5728\u4E0D\u540C\u65F6\u523B\u662F\u4EC0\u4E48\u6837\u5B50\uFF0C\u6CA1\u88AB\u6321\u4F4F\u7684\u90A3\u6B21\u8BF4\u4E86\u7B97\u3002",relearn:"\u7528\u6838\u5BF9\u8FC7\u7684\u9875\u9762\uFF0C\u628A\u6D6E\u5728\u4E0A\u9762\u7684\u4E1C\u897F\u518D\u8BA4\u4E00\u904D\u3002",write:"\u628A\u88AB\u6321\u4F4F\u6216\u62FC\u9519\u7684\u5730\u65B9\u6362\u6210\u5E72\u51C0\u7684\u90A3\u4E00\u5E27\u3002"},framingStart:"\u8FD8\u539F\u7A97\u53E3\u5916\u6846\uFF1A\u53EA\u5EF6\u4F38\u80CC\u666F\uFF0C\u4E0D\u62C9\u4F38\u4FA7\u680F\u6587\u5B57\uFF0C\u4E5F\u4E0D\u91CD\u590D\u56FE\u6807\u3002",pyramidBuild:"\u6B63\u5728\u751F\u6210\u9884\u89C8\uFF0C\u5BFC\u51FA\u7684\u539F\u5C3A\u5BF8\u56FE\u4E0D\u53D7\u5F71\u54CD\u3002",scanFrame:"\u4E00\u5E27\u4E00\u5E27\u770B\u5F55\u5C4F\uFF0C\u627E\u51FA\u54EA\u4E9B\u533A\u57DF\u5728\u52A8\u3002",duplicateReuse:"\u8FD9\u4E00\u5E27\u548C\u524D\u9762\u5B8C\u5168\u4E00\u6837\uFF0C\u76F4\u63A5\u6CBF\u7528\u4F4D\u7F6E\u3002",solveFrame:"\u7ED9\u6BCF\u4E00\u5E27\u627E\u51C6\u4F4D\u7F6E\uFF0C\u5E76\u548C\u770B\u8FC7\u7684\u5730\u65B9\u5BF9\u4E0A\u3002",optimizing:"\u56DE\u5934\u6821\u6B63\u6574\u4F53\u4F4D\u7F6E\uFF0C\u6D88\u9664\u7D2F\u79EF\u8BEF\u5DEE\u3002"},media:{UNSUPPORTED_CODEC:"UNSUPPORTED_CODEC: \u8FD9\u4E2A\u6D4F\u89C8\u5668\u89E3\u4E0D\u4E86\u8FD9\u6BB5\u5F55\u5C4F\u7684\u7F16\u7801\uFF08{{codec}}\uFF09\u3002{{advice}}",UNSUPPORTED_ADVICE:{hevc:"iPhone \u548C Mac \u7684\u5F55\u5C4F\u591A\u662F HEVC\uFF0C\u53EA\u6709\u90E8\u5206\u6D4F\u89C8\u5668\u80FD\u89E3\uFF1A\u8BF7\u6539\u7528 Safari\uFF0C\u6216\u8005\u5E26\u786C\u4EF6\u89E3\u7801\u7684 Chrome\u3001Edge\u3002",prores:"ProRes \u6CA1\u6709\u6D4F\u89C8\u5668\u80FD\u89E3\uFF0C\u8BF7\u5148\u5BFC\u51FA\u6210 H.264 \u6216 HEVC\u3002",h264:"\u8FD9\u79CD H.264\uFF084:4:4 \u6216 10 \u4F4D\uFF09\u53EA\u6709 Chrome \u80FD\u89E3\uFF1A\u8BF7\u6539\u7528 Chrome\uFF0C\u6216\u8005\u5BFC\u51FA\u6210\u666E\u901A\u7684 H.264\u3002",av1:"AV1 \u8981\u8F83\u65B0\u7684\u6D4F\u89C8\u5668\u6216\u786C\u4EF6\u624D\u80FD\u89E3\uFF1A\u8BF7\u6539\u7528\u6700\u65B0\u7248\u7684 Chrome\uFF0C\u6216\u8005\u5BFC\u51FA\u6210 H.264\u3002",other:"\u8BF7\u6539\u7528\u6700\u65B0\u7248\u7684 Chrome \u6216 Safari\uFF0C\u6216\u8005\u5148\u628A\u5F55\u5C4F\u8F6C\u6210 H.264\u3002"},PIXEL_ASPECT_RATIO:"\u8BE5\u5F55\u5C4F\u58F0\u660E\u50CF\u7D20\u957F\u5BBD\u6BD4\u4E3A {{num}}:{{den}}\uFF1B\u4FDD\u7559\u539F\u59CB\u5B58\u50A8\u50CF\u7D20\uFF0C\u4E0D\u505A\u7F29\u653E\uFF0C\u663E\u793A\u6BD4\u4F8B\u53EF\u80FD\u4E0D\u540C\u3002",CONTAINER_SIZE_MISMATCH:"\u5BB9\u5668\u58F0\u660E {{codedWidth}}\xD7{{codedHeight}}\uFF0C\u7801\u6D41\u5B9E\u9645\u4E3A {{bitstreamWidth}}\xD7{{bitstreamHeight}}\uFF1B\u4EE5\u7801\u6D41\u5C3A\u5BF8\u4E3A\u51C6\u3002",NON_SQUARE_PIXELS:"\u8BE5\u5F55\u5C4F\u58F0\u660E\u975E\u65B9\u5F62\u50CF\u7D20\u957F\u5BBD\u6BD4\uFF08\u663E\u793A\u5C3A\u5BF8 {{displayWidth}}\xD7{{displayHeight}}\uFF0C\u5B58\u50A8\u5C3A\u5BF8 {{bitstreamWidth}}\xD7{{bitstreamHeight}}\uFF09\uFF1B\u4FDD\u7559\u539F\u59CB\u5B58\u50A8\u50CF\u7D20\uFF0C\u4E0D\u505A\u7F29\u653E\u3002",NEGATIVE_TIMESTAMP_SKIPPED:"\u89E3\u7801\u5668\u8F93\u51FA\u4E86\u4F4D\u4E8E\u7F16\u8F91\u5217\u8868\u8D77\u70B9\u4E4B\u524D\uFF08\u8D1F\u65F6\u95F4\u6233\uFF09\u7684\u5E27\uFF1B\u6309\u5BB9\u5668\u8BED\u4E49\u4E0D\u5C55\u793A\u8FD9\u4E9B\u5E27\u3002",NONMONOTONIC_TIMESTAMP:"\u5BB9\u5668\u65F6\u95F4\u6233\u51FA\u73B0\u5012\u9000\uFF1B\u5DF2\u6309\u89E3\u7801\u5668\u7684\u5C55\u793A\u987A\u5E8F\u7EE7\u7EED\u5904\u7406\uFF0C\u672A\u4E22\u5F03\u89C2\u5BDF\u3002",NONSTANDARD_SIGNED_CTTS_V0:"NONSTANDARD_SIGNED_CTTS_V0: \u8BE5\u89C6\u9891\u8F68\u9053\u7684 ctts box \u662F version 0\uFF0C\u4F46\u5305\u542B\u8D1F\u7684\u5408\u6210\u65F6\u95F4\u504F\u79FB\uFF1BISO 14496-12 \u4EC5\u5728 version 1 \u4E2D\u5B9A\u4E49\u8D1F\u504F\u79FB\u3002\u8FD9\u4E9B\u504F\u79FB\u6309\u6709\u7B26\u53F7\u5904\u7406\uFF08QuickTime/ReplayKit \u7684\u5E38\u89C1\u5199\u6CD5\uFF09\uFF0C\u672A\u88AB\u5F53\u4F5C\u5F02\u5E38\u5927\u7684\u6B63\u504F\u79FB\u3002",TRUNCATED_RECORDING:"TRUNCATED_RECORDING: \u6587\u4EF6\u5728 {{box}} box \u4E2D\u9014\u7ED3\u675F\uFF1A\u8BE5 box \u58F0\u660E\u5230\u7B2C {{declaredEnd}} \u5B57\u8282\uFF0C\u6587\u4EF6\u53EA\u6709 {{size}} \u5B57\u8282\u3002\u5F55\u5236\u53EF\u80FD\u6CA1\u6709\u6B63\u5E38\u7ED3\u675F\uFF0C\u6216\u6587\u4EF6\u5728\u590D\u5236/\u4F20\u8F93\u4E2D\u88AB\u622A\u65AD\uFF1B\u622A\u65AD\u5904\u4E4B\u540E\u7684\u5E27\u65E0\u6CD5\u89E3\u7801\uFF0C\u626B\u63CF\u5230\u7684\u5E27\u4F1A\u5C11\u4E8E\u5143\u6570\u636E\u4E2D\u7684\u5E27\u6570\uFF0C\u7ED3\u679C\u5C06\u6807\u8BB0\u4E3A partial\u3002"},exports:{tilesProgress:"\u5BFC\u51FA\u539F\u56FE\u4E0E\u9884\u89C8\u74E6\u7247 {{n}}",zipFinalize:"\u5199\u5165 ZIP64 \u76EE\u5F55\u5E76\u63D0\u4EA4\u6587\u4EF6",projectDone:{message:"\u5DF2\u5BFC\u51FA\u539F\u5C3A\u5BF8\u74E6\u7247\u3001\u79BB\u7EBF\u67E5\u770B\u5668\u3001\u8986\u76D6\u4E0E\u8D28\u91CF\u6570\u636E\u3001\u6E90\u5E27\u8BB0\u5F55\u548C\u5B8C\u6574\u8BCA\u65AD\u3002"},encodingSingle:"\u65E0\u7F29\u653E\u7F16\u7801 {{row}} / {{total}} \u884C",canvasDone:{message:"\u5DF2\u5BFC\u51FA {{width}} \xD7 {{height}} \u539F\u5C3A\u5BF8 PNG\uFF0C\u7F3A\u53E3\u4FDD\u6301\u900F\u660E\u3002"},encodingSheet:"\u5DF2\u7F16\u7801 {{count}} \u5F20\u539F\u5C3A\u5BF8\u5206\u9875\u56FE\u7247",sheetsDone:{messagePaged:"\u5DF2\u6309\u5206\u9875\u5BFC\u51FA\u4E3A {{count}} \u5F20\u539F\u5C3A\u5BF8\u56FE\u7247\uFF1B\u76F8\u90BB\u9875\u6700\u591A\u91CD\u53E0 {{overlap}}px\uFF0C\u5750\u6807\u89C1 manifest\u3002",messageOversize:"\u753B\u5E03\u8D85\u8FC7\u5355\u5F20\u517C\u5BB9\u5C3A\u5BF8\uFF0C\u5DF2\u660E\u786E\u6539\u4E3A {{count}} \u5F20\u539F\u5C3A\u5BF8\u56FE\u7247\uFF1B\u76F8\u90BB\u9875\u6700\u591A\u91CD\u53E0 {{overlap}}px\uFF0C\u5750\u6807\u89C1 manifest\u3002"}},offline:{title:"\u79BB\u7EBF\u753B\u5E03",fit:"\u9002\u5E94",tip:"\u672C\u5730\u539F\u5C3A\u5BF8\u74E6\u7247 \xB7 \u62D6\u52A8 / \u6EDA\u8F6E\u7F29\u653E",previewLevel:"\u663E\u793A\u9884\u89C8\u5C42 {{level}}\uFF0C\u653E\u5927\u53EF\u89C1\u539F\u50CF\u7D20",nativeTiles:"\u663E\u793A\u539F\u5C3A\u5BF8\u74E6\u7247",footer:"\u68CB\u76D8\u533A\u57DF\u672A\u88AB\u89C2\u5BDF / \u65E0\u74E6\u7247\uFF1B\u7F6E\u4FE1\u5EA6\u4E0D\u662F\u6B63\u786E\u6982\u7387\u3002\u67E5\u770B diagnostics.jsonl \u4E0E observations.jsonl\u3002"}};var Ti={...yo,...wo,...bo};var xo={language:{label:"Interface language",saveFailed:"Could not save the language setting: this browser blocks local storage."},page:{title:"Long Screen \u2014 One big screenshot from a screen recording",description:"Turn a screen recording into one full-size big screenshot: scroll, pan, go diagonal, pause or circle back \u2014 not just scrolling down. Fixed window frames and status bars are restored. It all runs locally in your browser; nothing is uploaded.",closeLabel:"Close",header:{brandLabel:"Long Screen home",slogan:"ANY PATH \xB7 ONE BIG SCREENSHOT",privacy:"Pixels never leave this device",helpLabel:"Help and capabilities",star:"Star on GitHub",starLabel:"Star on GitHub (opens in a new tab)",install:"Install app",installTitle:"Install Long Screen on this device (PWA): it opens like an app and works offline"},install:{title:"Install on this device",intro:"Long Screen can be installed as a PWA (web app): it opens from your Home Screen or Dock in its own window and works without a connection. Recordings are still processed only on this device.",iosShare:"Tap the Share button in your browser. In Safari it sits in the bottom toolbar or under \u22EF.",iosAdd:"Scroll down to Add to Home Screen.",iosConfirm:"Tap Add.",iosInApp:"If this page opened inside another app, such as WeChat or LINE, switch to Safari first.",macFile:"In the menu bar at the top of the screen, choose File \u2192 Add to Dock.",macConfirm:"Click Add.",offline:"After installing, open it once while online; from then on it works offline."},hero:{heading:'Turn a screen recording<br>into <span class="hl">one big screenshot</span>.',intro:"Record your screen while you move around a web page, app, map or design \u2014 scroll, pan, go diagonal, circle back. Everything the recording showed is put back in place as one full-size PNG, with fixed window frames and status bars restored. It all runs in your browser; nothing is uploaded.",demoLead:" Want to see it first?",demoChip:"Play a sample recording"},steps:{ariaLabel:"How it works",recordTitle:"Record",recordBody:"Record the screen while you move around a page, app or map, any way you like.",feedTitle:"Feed it",feedBody:"Drop the video on the printer's screen and press Run.",takeTitle:"Take it whole",takeBody:"Take one full-size screenshot; anything never filmed stays empty."},press:{ariaLabel:"The printer",build:"Build"},screen:{dropTitle:"Drop a recording here",dropHint:"or click to choose a file \xB7 MP4 \xB7 MOV \xB7 WebM"},observe:{dropTitle:"No recording yet",dropSubtitle:"MP4 \xB7 MOV \xB7 WebM \xB7 stays on this device"},controls:{print:"Run",progress:"Progress",knobs:"Settings",clear:"Clear",clearTitle:"Clear the printer: take the recording out and clear this result and its log"},tray:{ariaLabel:"Big screenshot preview",idleTitle:"Your big screenshot comes out here",story1:"The recording wanders around the page\u2026",story2:"Every part it saw goes back in place",story3:"Out comes one big screenshot!",story4:"Scroll down on a phone and record\u2026",story5:"Stitched screen by screen, one status bar",story6:"The classic long screenshot works too!"},reconstruct:{heading:"Run settings",sub:"The defaults work; turn these only to fine-tune.",policyLabel:"Conflicts",policyStable:"Keep stable view",policyLatest:"Prefer newer view",framingLabel:"Frame",framingContext:"Keep frame \xB7 reference UI",framingRegion:"Content and margins only",regionsLabel:"Motion regions",regionsAuto:"Auto-detected \u2197",advancedSummary:"More knobs <span>\uFF0B</span>",analysisSizeLabel:"Analysis long edge",memoryLabel:"Tile cache limit",computeLabel:"Acceleration",computeAuto:"Auto \xB7 WebGPU / CPU",computeWebgpu:"WebGPU \xB7 CPU align",computeCpu:"CPU only",computeHint:"The GPU turns every decoded frame into pixels and shrinks the analysis thumbnails; matching and compositing still run on the CPU. Auto measures both ways first and only uses the GPU when it is faster.",decoderLabel:"Decoding",decoderPrecise:"Exact \xB7 WebCodecs",decoderCompatibility:"Approximate \xB7 native seek",decoderHint:"Analysis thumbnails do not change the output pixels. The tile cache only holds finished tiles and grows on its own when one frame paints more than fits, so it hardly changes the speed; memory the browser, decoder, GPU and core use is not counted in it. \u201CApproximate \xB7 native seek\u201D may miss brief content.",pauseBtn:"Pause",stopBtn:"Stop & save",footerNote:"No upload \xB7 no cloud inference \xB7 no external models"},canvas:{ariaLabel:"Reconstructed canvas",selectAriaLabel:"Choose reconstructed canvas",waitingOption:"Waiting for observation",qualityMask:"Quality mask",fitTitle:"Fit to window",fitBtn:"Fit",nativeTitle:"Native size",viewerAriaLabel:"Draggable and zoomable sparse 2D canvas",zoomOutLabel:"Zoom out",zoomInLabel:"Zoom in",expandLabel:"Spread it out",emptyTitle:"Stitching\u2026",emptyBody:"Every frame is finding its place in the whole picture.",statusReady:"Ready",progressMessageDefault:"Insert a recording \u2192 press Run \u2192 take it whole",lodLabel:"Checkerboard = never seen"},understand:{noteBtn:"Log",heading:"Run log",desc:"Why the printer placed each piece, what changed on the page and what went wrong \u2014 all recorded here.",framesLabel:"frames composited",canvasesLabel:"independent canvases",coverageBody:"Transparent \u2260 a white page <br><small>Marks space that was never observed; nothing is invented to fill it.</small>",diagnosticsHeading:"Diagnostics",filterAriaLabel:"Filter diagnostics",filterAll:"All",filterIssues:"Warnings / errors",diagnosticsAriaLabel:"Processing diagnostics",diagnosticsEmpty:"Localization evidence, page changes, <br>inferences and processing errors will appear here.",moreDiagnostics:"Load more diagnostics",reportLead:"Wrong result, or something broke?",reportBtn:"Report it on GitHub",reportNote:"The report comes pre-filled with your browser details and the warning codes from this log. It never includes the recording, its pictures or the file name, and you can read and edit it before you submit."},export:{downloadPng:"Take the screenshot \xB7 PNG <span>\u2193</span>",copyPng:"Copy screenshot",pngNote:"One full-size PNG \u2014 not scaled down, not split into pages.",advancedSummary:"Other ways to take it",exportProject:"Export full project \xB7 ZIP",projectNote:"Native-size tiles + offline viewer + coverage/quality data + full diagnostics, for archiving or troubleshooting.",exportSheets:"Paged export \xB7 multiple PNGs (ZIP)",sheetsNote:"Splits an oversized canvas into multiple native-size PNGs at a compatible size, with a 32px overlap between pages and a world-coordinate manifest; nothing is shrunk.",starNudge:"Found it useful? Star us on GitHub"},help:{title:"A canvas with a source",pixelsHeading:"Which pixels are kept?",pixelsBody:"Frame-accurate mode decodes frame by frame. Every completed observation has a timestamp and a compositing record. Analysis can be downscaled; final compositing and export keep the original pixel scale.",frameHeading:"Frame and natural margins",frameBody:"By default the whole scrollable area's background, margins and whitespace are kept, with no cropping to text bounds. The framed view additionally keeps one frame of reference UI: sidebar text and toolbar icons appear once at native size, and extended areas simply continue the decorative background \u2014 they are not reconstruction evidence. The original content layer is always kept separately. Other independent panes are never made to look like they share the same track.",scopeHeading:"This is not \u201Cuniversal page understanding\u201D",scopeBody:"Motion layering, repeated-texture disambiguation and dynamic-region attribution are all visual inference. Scale changes, non-overlapping or incompatible layouts may become independent fragments; these fragments are never claimed to be aligned with each other. Confidence is not a calibrated probability of correctness.",storageHeading:"Long recordings and storage",storageBody:"A three-pass decode scan trades disk space and compute time for limited memory. The browser keeps only your latest result, for up to 24 hours: after a reload or an accidentally closed page it comes back on its own, and a run cut off halfway comes back with what it had saved (it cannot resume from there). Running again or pressing Clear deletes it, and once it is over 24 hours old it is deleted the next time the page opens. Download what you want to keep.",browserHeading:"Browser and formats",browserBody:"Requires IndexedDB, OffscreenCanvas and CompressionStream. Local development can use HTTP localhost directly, no certificate needed; a phone opening a LAN HTTP address can test with \u201CApproximate \xB7 native seek\u201D, but it may miss frames. Browsers generally only open WebCodecs frame-accurate decoding and disk export APIs on localhost or HTTPS \u2014 this has nothing to do with uploading. Frame-accurate decoding also needs device support for the specific codec; an MP4/MOV/WebM container does not mean the device can decode everything inside it.",tipsHeading:"How do I get better results?",tipsBody:"Keep enough overlap; move a little slower over low-texture areas. When multiple panes or floating layers are not identified correctly, draw them by hand under \u201CMotion regions\u201D before processing. All diagnostics can be exported from the full project.",feedbackHeading:"Feedback and source code",feedbackBody:'Long Screen is open source under the MIT license; the code is on <a href="https://github.com/t41372/long-screen" target="_blank" rel="noopener">GitHub</a>. If you hit a bug or get a wrong result, please <a class="report-link" href="https://github.com/t41372/long-screen/issues/new" target="_blank" rel="noopener">open an issue</a>; it comes pre-filled with your browser details and the warning codes from the run log. If you find it useful, a star on the project helps us a lot.',toolsHeading:"Beyond this page",toolsBody:'The engine behind this page also works on its own: as a <a href="https://github.com/t41372/long-screen#command-line" target="_blank" rel="noopener">command line</a>, a <a href="https://github.com/t41372/long-screen#rust-library" target="_blank" rel="noopener">Rust library</a> and a <a href="https://github.com/t41372/long-screen#python-package" target="_blank" rel="noopener">Python package</a>, and as a <a href="https://github.com/t41372/long-screen#typescript-package" target="_blank" rel="noopener">TypeScript package</a> for other web pages. They too process recordings only on your own machine. The README explains how to install and use each.',licenseHeading:"Open-source licenses",licenseBody:`Long Screen's own code is under the MIT license: you may use, copy, modify and redistribute it for free, sell it or ship it inside closed-source products, as long as copies keep the copyright notice and the <a href="https://github.com/t41372/long-screen/blob/main/LICENSE" target="_blank" rel="noopener">license text</a>. It comes as is, with no warranty. The third-party dependencies bundled into the Wasm core and front-end assets and their licenses, as well as the sources and licenses of the Rust, WebAssembly and GitHub logos on this page, are listed in the <a href="./THIRD_PARTY_NOTICES.txt" target="_blank" rel="noopener">open-source notices</a> (generated at build time).`},regions:{title:"Set independent motion regions",hint:"Drag a rectangle over the frame. Each \u201Ccontent\u201D region is reconstructed independently. Regions left unmarked stay as a separate, explicitly low-confidence observation layer; \u201Cignore\u201D regions are actively excluded.",kindMoving:"Content \xB7 scrolls independently",kindFixed:"Fixed UI",kindIgnore:"Ignore \xB7 actively excluded",clearBtn:"Restore auto-detection",saveBtn:"Use these regions"},source:{title:"Original observation"},crop:{button:"Crop",groupLabel:"Crop area",left:"Left",top:"Top",width:"Width",height:"Height",full:"Whole print",cancel:"Cancel",apply:"Apply crop"},footer:{stackLead:"The core is written in",stackMid:"and compiled to",stackTail:"to run right in your browser.",stackMore:"Interface in TypeScript \xB7 built and tested with Deno",linksLabel:"Project links",source:"Source on GitHub",report:"Report a bug",notices:"Open-source notices",trademarks:"Rust, WebAssembly, TypeScript, Deno and GitHub names and logos belong to their owners. They are shown only to say what this project uses, not to suggest that any of them endorses it."}},deviceCheck:{title:"Device check",intro:`Measures what this browser and device offer (cross-origin isolation / threads, WebGPU adapter) and the real cost of the GPU path:
19
+ uploading and reading back one native RGBA frame, and the time and byte-for-byte consistency of analysis downscaling on the GPU versus the Rust core.
20
+ Optional: choose a recording to run the full pipeline on both CPU and forced WebGPU and compare tile fingerprints.
21
+ All processing happens on this device; nothing is uploaded. A chosen recording's run data is deleted after comparing. WebGPU is only available in a secure context (localhost or HTTPS).`,recordingLabel:"Recording (optional):",runBtn:"Run check",loadingReport:"Loading core\u2026"}};var Ao={ui:{phase:{scanning:"Frame-by-frame observation and motion layering",solving:"Global localization and native-pixel refinement",optimizing:"Correcting loop closure and cumulative drift",rendering:"Compositing the native-size sparse canvas",revealing:"Removing what floats over the page",framing:"Keeping the frame and original aspect ratio",pyramid:"Building a zoomable preview",complete:"Complete \xB7 check diagnostics",partial:"Partial results saved",error:"Processing hit an error"},count:{frames_one:"{{frames}} frame",frames_other:"{{frames}} frames",framesUnknown:"? frames",regions_one:"{{count}} custom region \u2197",regions_other:"{{count}} custom regions \u2197"},dom:{noCompressionStream:"This browser is missing CompressionStream, which encodes every native-size tile to PNG; reconstruction cannot start."},canvases:{badgePresentation:"Framed presentation \xB7 extended background is not observation evidence",badgeFixed:"Fixed / observation layer",badgeMoving:"2D content layer",badge_one:"{{kind}} \xB7 {{count}} native-size tile{{fragment}}",badge_other:"{{kind}} \xB7 {{count}} native-size tiles{{fragment}}",fragmentNote:" \xB7 fragments are not confirmed to align"},diagnostics:{occurrenceSuffix:" ({{count}} occurrences of this kind)",locateAction:"Locate affected area / view source \u2197",viewSourceAction:"View original moment \u2197",emptyFiltered:"No records under this filter.",emptyDefault:"Localization evidence, page changes, inferences and processing errors will appear here.",noOriginalVideo:"The original video is not included in the project. Choose the matching recording again to view by timestamp; the composited result is still saved locally.",hashMismatch:"The chosen file matches by name and size, but its content hash does not match the recording this project was built from, so it is refused as source-moment evidence. Please choose the correct recording file.",sourceCaption:"Source frame {{frame}} \xB7 {{time}}s \xB7 {{message}}"},export:{imageSuffix:"-screenshot",savePickerFallback:"Direct save is unavailable; using the browser download instead: {{error}}",saveRowLabel:"Save {{name}} \xB7 {{size}}",shareLabel:"Share / save to Photos",shareFailed:"Share failed: {{error}}",cleanupLabel:"Clean up temporary copy after saving",exportErrorAction:"An unfinished export was not marked as successful. Project tiles already committed are still on this device.",clipboardUnsupported:"This browser cannot copy images; use \u201CTake the screenshot\u201D instead.",copyNoImage:"No image was generated",copyFailedCtor:"Copy failed: {{error}}. Use \u201CTake the screenshot\u201D instead.",copySuccess:"Copied a {{width}} \xD7 {{height}} long image; paste it directly.",copyFailed:"Copy failed: {{error}}. The image may exceed the system clipboard limit; use \u201CTake the screenshot\u201D instead."},crop:{buttonCropped:"Crop \xB7 {{width}} \xD7 {{height}}",applied:"Done. Downloads, copies and paged exports now take only this part ({{width}} \xD7 {{height}}). The full project ZIP is not cropped.",removed:"Crop removed; exports take the whole print again."},main:{offscreenMissing:"This browser is missing OffscreenCanvas; the render worker cannot run.",webcodecsMissingToast:"This browser has no WebCodecs. Choose \u201CApproximate \xB7 native seek\u201D explicitly; it may miss frames.",privateStorageToast:"Private browsing: the project is only kept in this window's memory and disappears when the window closes; export before closing to keep it.",noOpfsNoPicker:"This browser has neither OPFS nor a file-save dialog; export will be generated in memory (up to {{mb}} MB).",dbOpenFailed:"Could not open the local database: {{error}}",workerErrorToast:"Worker error: {{message}}",workerMessageUndecodable:"A worker message could not be decoded. Keep the existing results and reload.",interruptedPhaseWhere:"\u201C{{phase}}\u201D, frame {{frames}}",interruptedStartPhase:"the starting phase",interruptedHiddenSome:"the page was in the background for about {{seconds}}s{{stillHidden}}",interruptedStillHidden:" (still in the background at the time of interruption)",interruptedHiddenNone:"the page stayed in the foreground the whole time",interruptedDiagnosticMessage:"The previous reconstruction was interrupted in {{where}}; the page never received a completion signal (the browser evicted or crashed the page). It had run for {{elapsed}}s, core memory {{memory}} MB, {{hidden}}, frame conversion: {{conversion}}, CPU cores: {{cores}}{{isolation}}.",interruptedDiagnosticAction:"Safari evicts a page at a much lower memory limit once it goes to the background: keep this tab in the foreground for long-running processing. The full record was written to the browser console.",interruptedNotIsolated:" (not cross-origin isolated, single-threaded)",interruptedToast:"The previous reconstruction was interrupted in {{where}} ({{hidden}}). See diagnostics for details.",unknownValue:"unknown"},run:{pausedStatus:"Paused \xB7 memory state retained",resumedStatus:"Resuming",pauseLabel:"Pause",resumeLabel:"Resume",stopToast:"Ending the current phase and compositing and saving as much of the observation as possible.",preparingStatus:"Preparing frame-accurate decoding",preparingMessage:"Reading the container and checking codec support and local storage.",compatibilityNeedsNative:"\u201CApproximate \xB7 native seek\u201D needs the browser's native player to be able to read this video.",webcodecsHttpBlocked:"The browser does not open WebCodecs on this HTTP address. You can choose \u201CApproximate \xB7 native seek\u201D to keep testing locally; frame-accurate decoding needs localhost or HTTPS. The video is not uploaded.",webcodecsMissing:"This browser has no WebCodecs. Update Safari / iOS, or explicitly choose \u201CApproximate \xB7 native seek\u201D, which may miss frames.",startFailedStatus:"Could not start reconstruction",restoredMessage:"This is your last result. Once it is over 24 hours old, it is deleted the next time the page opens.",interruptedStatus:"The last run did not finish",interruptedMessage:"This is what was saved before it stopped. For the full result, put the recording back in and run it again.",waitingCanvasOption:"Waiting for canvas to reconstruct"},source:{busyToast:"Finish or save the current run first.",subtitleReading:"{{size}} \xB7 not uploaded \xB7 reading container and first frame",subtitleDetailed:"{{width}} \xD7 {{height}} \xB7 {{duration}} \xB7 {{frames}} \xB7 {{codec}} \xB7 {{size}}",subtitleNativeOnly:"{{width}} \xD7 {{height}} \xB7 {{duration}} \xB7 {{size}} \xB7 readable by the native player only",subtitleUnavailable:"{{size}} \xB7 neither frame-accurate decoding nor native preview is available",probeFailedMessage:"Frame-accurate decode probing failed: {{error}}",probeFailedAction:"Will try the browser's native player to read metadata. To keep processing, choose \u201CApproximate \xB7 native seek\u201D for decoding.",rejectedVideo:"\u201C{{name}}\u201D is {{kind}}, a format the browser cannot read frame by frame, so it was not opened. Set your screen recorder to save MP4, or convert the file to MP4 first with HandBrake or ffmpeg.",rejectedOther:"\u201C{{name}}\u201D is not a video ({{kind}}), so it was not opened. Choose a screen recording of a scrolling page: MP4, MOV, WebM or MKV. On Windows, record with the Snipping Tool or Xbox Game Bar (Win+Alt+R); on a Mac, press \u2318\u21E75; on a phone, use its built-in screen recording.",unreadableToast:"This video cannot be read ({{reason}}). Check that the recording finished properly and that the file was copied or downloaded completely; if it still fails, try an H.264 MP4. The diagnostics say why frame-accurate decoding failed.",kind:{empty:"an empty file",heif:"a HEIC/AVIF image",avi:"an AVI video",webp:"a WebP image",wav:"a WAV audio file",riff:"a RIFF file",wmv:"a WMV/ASF video",flv:"an FLV video",mpegps:"an MPEG-PS video",ogg:"an Ogg media file",gif:"a GIF animation",png:"a PNG image",jpeg:"a JPEG image",pdf:"a PDF document",zip:"a ZIP archive or Office document",mp3:"an MP3 audio file",text:"a text file",mpegts:"an MPEG-TS video",unknown:"an unrecognised file"}},demo:{fileName:"sample-recording.mp4",loadFailed:"The sample recording could not be loaded: {{error}}"},feedback:{issueBody:`**What happened?**
22
+
23
+
24
+ **What did you expect?**
25
+
26
+
27
+ **About the recording** (what page, how you moved, roughly how long; a screenshot helps, but hide anything private)
28
+
29
+
30
+ ---
31
+ Filled in by Long Screen, edit or delete as you like:
32
+ - Browser: {{browser}}
33
+ - Opened from: {{page}}
34
+ - Multithreaded core (cross-origin isolated): {{threads}}
35
+ - Warnings in the run log: {{warnings}}
36
+ `,portable:"portable build (local file)",yes:"yes",no:"no",none:"none"},viewer:{previewLevel:"Preview L{{level}} (native size unchanged)",nativeLevel:"Native pixels L0",qualityHint:" \xB7 zoom in to see the quality mask",unobservedHint:" \xB7 blue = no observation evidence",provisionalHint:" \xB7 purple = transient / overlay content"}},names:{fixed:"Fixed UI",divider:"Fixed divider",contentCanvas:"Content canvas {{n}}",unassigned:"Unassigned area \xB7 screen-space observations",contentRegion:"Content region {{n}}",ignored:"Ignored",fragment:"unplaced fragment {{n}}",framed:"framed"}};var ko={diag:{MODEL_ASSUMPTIONS:{message:"Reconstruction uses layered panning canvases with geometric loop-closure constraints. Automatic masking and dynamic-region detection are heuristic inference; confidence scores are not calibrated correctness probabilities. World-consistency comparisons run at this source\u2019s declared decode noise of \xB1{{noise}} levels{{margin}}.",marginLossy:" (headroom for compressed-video ringing/chroma reconstruction)",marginLossless:" (lossless source, exact pixel-for-pixel comparison)",action:"When scale or structure cannot coexist, an independent fragment is kept rather than forcing incompatible states together."},APPROXIMATE_DECODER:{message:"\u201CApproximate \xB7 native seek\u201D at {{fps}} Hz was explicitly enabled. Not every frame of the video is guaranteed to be captured; brief content may be missing.",action:"When frame-by-frame coverage must be guaranteed, use a WebCodecs-supported input such as H.264 or VP9."},ANALYSIS_PYRAMID:{message:"Motion analysis caps the long edge at {{size}}px; native-resolution pixels are used for refinement and final compositing, so the output does not follow the downsample."},FRAME_MEMORY_PRESSURE:{message:"One native frame plus its reference frames are close to the selected cache budget. Codec/GPU memory itself is not controlled by the JavaScript cache budget.",action:"Output resolution is never silently reduced; on memory pressure, already-committed data is kept and the failure is reported."},RUN_FAILURE:{action:"Tiles already committed to local storage remain viewable and exportable; the failure was not marked as a success."},PERSISTENCE_ERROR:{action:"The storage write also failed; only data committed earlier can be recovered."},MEMORY_BUDGET_RAISED:{message:"The tile cache was raised from the {{from}} tiles the budget allowed to {{to}} tiles (about {{mb}} MB), to hold every tile one frame touches.",action:"A cache smaller than one frame\u2019s coverage would force every frame to fully re-decode and re-encode all its tiles; lower the recording resolution for a smaller memory footprint."},NONFINITE_POSE:{message:"Placement computation produced a non-finite value. This observation was isolated; the invalid coordinates were not written to the canvas."},MISSING_PLAN:{message:"The render stage is missing plan/{{index}}; stopped at the already-committed render prefix.",action:"Check local storage integrity; a missing solve plan is never silently treated as an empty observation."},prefixOnly:{base:{scan:"Continuing placement and compositing with only the frames decoded so far ({{frames}})",solve:"Continuing rendering with only the frames solved so far ({{frames}})",render:"Keeping results only for the frames rendered so far ({{frames}})"},suffixPersistence:"; the storage write has stopped.",suffixDefault:"."},PRESENTATION_TOO_SPARSE:{action:"This canvas\u2019s framed presentation was skipped; the core reconstruction in page coordinates is unaffected."},PRESENTATION_FRAME:{message:"The framed view and the original 2D content are kept separately. The frame comes from a reference frame; the extended portion is decorative background only and does not count as observed content \u2014 toolbar icons are never stretched or duplicated. Other panes inside the frame are reference snapshots only."},PRESENTATION_STAGE_FAILED:{action:"The framed-presentation stage failed; the core reconstruction result and status in page coordinates are unaffected."},PYRAMID_FAILED:{action:"Preview pyramid construction failed; native-size tiles are unaffected and remain viewable and exportable."},PASS_FRAME_COUNT_MISMATCH:{message:"The {{pass}} stage only completed {{actual}}/{{expected}} frames; the result was marked partial.",action:"The successfully committed prefix was kept; missing frames are never silently treated as processed."},FRAME_CONVERSION:{message:"Each decoded frame is turned into pixels by: {{method}}."},HDR_UNCHECKED:{message:"This is an HDR recording ({{transfer}}), but this browser offers no way to check the colour conversion, so the print may come out dark or washed out.",action:"Run it again in an up-to-date Chrome or Safari."},HDR_ABOVE_WHITE:{message:"In the first frame of this HDR recording, {{percent}}% of the pixels are brighter than ordinary white and were taken as white. If the print looks overexposed, the recorder most likely placed ordinary white at a higher brightness.",action:"Set the recorder\u2019s SDR white back to 100 nits, or turn HDR recording off."},SLOW_CONVERSION:{message:"This browser takes about {{ms}} ms to turn each frame of this recording into pixels, so converting alone will take about {{minutes}} min.",action:"An up-to-date Chrome or Safari is much faster; converting the recording to H.264 first also helps."},REVEAL_SKIPPED:{message:"This print has too many or too large canvases: cleaning overlays (cursor, floating buttons, scrollbars) would need about {{need}} MB more memory than is left, so that step was skipped and the stitched pixels kept.",action:"The rest of the result is unaffected. So many canvases usually means parts of the recording could not be joined to what came before; a shorter recording, or a computer with more memory, helps."},COMPUTE_BACKEND:{message:"{{backend}} \u2014 {{reason}}. Rust core: {{variant}} build, compute threads: {{threads}} ({{coreReason}})."},PRESENTATION_REFERENCE_FAILED:{action:"The framed presentation will be skipped; the core reconstruction in page coordinates is unaffected."},LOW_TEXTURE_UNOBSERVABLE:{message:"The frame lacks recognizable texture. An identical blank frame could equally be a pause or motion over a blank area; the pixels alone cannot distinguish them.",action:"Add distinguishable visible content or record more overlap. Zero displacement here is only a best guess."},UNRESOLVED_MOTION:{message:"This observation lacks a reliable visual-alignment basis. The solve stage will attempt historical relocalization; an independent fragment is kept if it still cannot be placed."},AMBIGUOUS_PATTERN:{message:"A repeating texture with several equally plausible matches was detected; continuity is only a placement prior, not a proven, unique position."},TEMPORAL_UNDERSAMPLING:{message:"This frame spans an unusually long duration; areas may exist that were never captured during fast motion."},MANUAL_UNASSIGNED:{message:"The part not covered by manual regions is kept as an independent, low-confidence screen-space observation layer; these pixels are not claimed to have been recovered into page coordinates."},EXPLICITLY_EXCLUDED_REGION:{message:"An \u201Cignore\u201D region was excluded as set manually. That region contributes nothing to the reconstruction; this is not frames being dropped automatically."},MANUAL_REGION_PRIORITY:{message:"Where manual regions overlap, the later-drawn region takes priority; ignored regions are always excluded. Remaining pixels are kept in the unassigned observation layer."},AUTOMATIC_LAYER_MASK:{message:"Automatically split into {{moving}} content region(s) and {{fixed}} fixed-UI region(s). Boundaries come from pixel-motion statistics, not the DOM.",action:"If a mask\u2019s assignment looks wrong, draw a precise scroll region under \u201CMotion regions\u201D and reprocess."},MULTIPLE_SCROLL_LAYERS:{message:"Multiple independent scroll regions will each get their own canvas; they are not forced to share one scroll offset."},TEMPORAL_OR_ALIGNMENT_CONFLICT:{message:"After aligning this frame, the overlap area has {{conflicts}} noticeably different pixels in total; this region is one conflicting component within it. Possible causes: animation, content updates, reflow, or registration residual.",actionStable:"The complete conflicting region was frozen to a single moment where possible; check the orange diagnostics and the original video timestamp.",actionRolling:"The whole conflicting region is updated with the same frame only when fully visible; it is not the same moment across the whole page."},INCOMPLETE_TEMPORAL_PATCH:{message:"This changed region never appeared complete within one usable viewport; not all of its pixels are guaranteed to come from the same moment.",action:"Observed content and explicit conflict marking are kept; unobserved parts were not invented."},MISSING_SCAN_RECORD:{message:"The solve stage is missing scan/{{index}}; stopped at the already-committed solve prefix.",action:"Check local storage integrity; a missing scan record is never treated as zero displacement."},GRAPH_RESIDUAL:{message:"The pose graph\u2019s maximum residual is still {{residual}} native pixels; nearby seams may show geometric inconsistency.",action:"Check text and repeating textures near the loop closure. This residual was not hidden."},PARTIAL_CONTENT_CHANGE:{message:"About {{percent}}% of texture blocks disagree with the overall displacement (animation, video, lazy loading, or reflow); the displacement is decided by the consistent blocks, and the conflicting region is handled separately at compositing time."},THIN_OVERLAP_STEP:{message:"The frames moved quickly against each other, leaving only a small overlap to align on. The displacement is drawn from this small piece of evidence; in a periodically repeating layout, an adjacent period could equally explain these pixels.",action:"If a later revisit provides stronger evidence, this whole trajectory segment will be corrected and recorded."},LOW_CONFIDENCE_PLACEMENT:{messageAmbiguous:"A repeating texture lets several displacements explain the pixels; the solution most consistent with motion continuity was used \u2014 a best guess, not the only correct alignment.",messageLowConfidence:"This region used a low-confidence placement estimate; the affected pixels are flagged in the quality mask.",messageStatic:"The two frames are nearly identical but lack a verifiable feature correspondence; treated as a pause (zero displacement) \u2014 a best guess.",action:"The continuous trajectory and any existing anchor were used for a best guess; this is not asserted to be the only correct alignment."},UNOBSERVABLE_FRAME:{message:"This frame has no recognizable texture in this region: a blank frame could equally be a pause or motion over a blank area, and pixels alone cannot distinguish them. It is not painted anywhere.",action:"If the content after the blank cannot overlap with the prior observation, it is kept as an independent fragment rather than guessing the distance in between."},RELOCALIZED:{message:"Relocalized onto an already-observed canvas via a historical visual anchor; the revisited content was not appended as new long-image extent."},SCALE_CHANGE_FRAGMENT:{message:"Detected an approximately {{scale}}\xD7 scale/layout transform; kept as an independent fragment at native pixels \u2014 no scaling was quietly blended in.",action:"The relationship across fragments is not yet confirmed; if a later revisit matches reliably, the fragment will be reattached as a whole. Re-record with more overlap, or isolate the changing component with a manual region."},UNPLACED_FRAGMENT:{message:"Could not confirm the position relative to the original canvas; kept as an independent, separately exportable fragment. The two fragments may overlap, or a genuine gap may exist between them.",action:"The relationship across fragments is not yet confirmed; if a later revisit matches reliably, the fragment will be reattached as a whole. Re-record with more overlap, or isolate the changing component with a manual region."},STICKY_OCCLUSION:{message:"Texture at the top of the frame indicates screen-fixed UI rather than page movement; this observation\u2019s fixed occlusion is not written into the moving canvas. The original reference UI is kept in the framed presentation."},FRAGMENT_ATTACHED:{message:"Revisit evidence reattached an independent fragment onto an existing canvas as a whole; the relative trajectory within the fragment is unchanged."},TRAJECTORY_CORRECTED:{message:"The previous step had only a small overlap; this frame\u2019s match against already-observed content differs by {{discrepancy}}px and the evidence is stronger \u2014 the current position was corrected to this match.",action:"What was corrected is this frame and the trajectory after it; pixels written earlier are unchanged and may show a seam against the corrected coordinates."},LOOP_CLOSURE:{message:"A reliable historical revisit was found and added as a global position constraint; final compositing uses the corrected trajectory."},INCONSISTENT_LOOP_REJECTED:{message:"The historical match differs from the continuous trajectory by {{discrepancy}}px; the evidence conflicts, so it was not imposed as a loop closure."},AMBIGUOUS_LOOP:{message:"Historical retrieval returned several nearly equally plausible positions; an uncertain loop closure was not imposed as a hard constraint."}},progress:{runPartial:"An explicitly marked partial reconstruction was saved.",runComplete:"Reconstruction complete; check the diagnostics and unobserved areas.",render:"Compositing native-size tiles from observed evidence; gaps stay transparent.",reveal:{learn:"Watching the recording again to find buttons, input bars and scrollbars that float over the page.",agree:"Checking how each part of the page looked over time; an unobstructed view wins.",relearn:"Finding the floating elements again against the checked page.",write:"Replacing covered or mismatched areas with the clean frame."},framingStart:"Preserving the original frame; only the background is extended, without stretching sidebar text or duplicating icons.",pyramidBuild:"Building the on-disk preview pyramid; native-size tiles are unchanged.",scanFrame:"Extracting geometric evidence frame by frame, learning independent motion regions.",duplicateReuse:"An identical observation reused the previous placement; the source frame and timestamp are retained.",solveFrame:"Native-pixel refinement, historical relocalization, and 2D loop-closure constraints.",optimizing:"Optimizing the on-disk pose graph, correcting loop-closure drift."},media:{UNSUPPORTED_CODEC:"UNSUPPORTED_CODEC: this browser cannot decode this recording\u2019s codec ({{codec}}). {{advice}}",UNSUPPORTED_ADVICE:{hevc:"iPhone and Mac recordings are usually HEVC, which only some browsers decode: use Safari, or Chrome or Edge with hardware decoding.",prores:"No browser decodes ProRes; export the recording as H.264 or HEVC first.",h264:"Only Chrome decodes this kind of H.264 (4:4:4 or 10-bit): use Chrome, or export it as ordinary H.264.",av1:"AV1 needs a recent browser or hardware: use an up-to-date Chrome, or export the recording as H.264.",other:"Use an up-to-date Chrome or Safari, or convert the recording to H.264 first."},PIXEL_ASPECT_RATIO:"The recording declares a {{num}}:{{den}} pixel aspect ratio; stored pixels are kept unscaled, so the display aspect may differ.",CONTAINER_SIZE_MISMATCH:"The container declared {{codedWidth}}\xD7{{codedHeight}}, but the bitstream is actually {{bitstreamWidth}}\xD7{{bitstreamHeight}}; the bitstream size is authoritative.",NON_SQUARE_PIXELS:"This recording declares a non-square pixel aspect ratio (display size {{displayWidth}}\xD7{{displayHeight}}, storage size {{bitstreamWidth}}\xD7{{bitstreamHeight}}); the original stored pixels are kept, unscaled.",NEGATIVE_TIMESTAMP_SKIPPED:"The decoder produced a frame before the edit list\u2019s start point (a negative timestamp); such frames are not shown, per container semantics.",NONMONOTONIC_TIMESTAMP:"A container timestamp went backwards; processing continued in the decoder\u2019s presentation order, and no observation was discarded.",NONSTANDARD_SIGNED_CTTS_V0:"NONSTANDARD_SIGNED_CTTS_V0: This video track\u2019s ctts box is version 0 but contains negative composition-time offsets; ISO 14496-12 only defines negative offsets in version 1. These offsets are treated as signed (a common QuickTime/ReplayKit convention), not as unusually large positive offsets.",TRUNCATED_RECORDING:"TRUNCATED_RECORDING: The file ends inside its {{box}} box: the box declares that it ends at byte {{declaredEnd}}, but the file has only {{size}} bytes. The recording may not have finished properly, or the file was cut off while being copied or transferred; frames after the cut cannot be decoded, so the scan finds fewer frames than the metadata lists and the result will be marked partial."},exports:{tilesProgress:"Exporting native and preview tiles {{n}}",zipFinalize:"Writing the ZIP64 directory and committing the file",projectDone:{message:"Exported native-size tiles, the offline viewer, coverage and quality data, source-frame records, and the full diagnostics."},encodingSingle:"Encoding row {{row}} / {{total}} at native scale",canvasDone:{message:"Exported a {{width}} \xD7 {{height}} native-size PNG; gaps stay transparent."},encodingSheet:"Encoded {{count}} native-size sheet image(s)",sheetsDone:{messagePaged:"Exported as {{count}} native-size sheet image(s); adjacent sheets overlap by up to {{overlap}}px, with coordinates in the manifest.",messageOversize:"The canvas exceeded the single-image compatible size, so it was explicitly exported as {{count}} native-size sheet image(s) instead; adjacent sheets overlap by up to {{overlap}}px, with coordinates in the manifest."}},offline:{title:"Offline canvas",fit:"Fit",tip:"Local native-size tiles \xB7 drag / scroll to zoom",previewLevel:"Showing preview level {{level}}; zoom in to see native pixels",nativeTiles:"Showing native-size tiles",footer:"Checkerboard areas are unobserved / have no tiles; confidence is not a correctness probability. See diagnostics.jsonl and observations.jsonl."}};var So={...xo,...Ao,...ko};var To=["zh","en"],Ir="zh",Eo={zh:"zh-CN",en:"en"},qt=xe.createInstance();qt.init({lng:Ir,fallbackLng:Ir,supportedLngs:[...To],resources:{zh:{translation:Ti},en:{translation:So}},initAsync:!1,interpolation:{escapeValue:!1}});var R=qt.t.bind(qt);var cs=r=>To.includes(r),Ei=()=>cs(qt.language)?qt.language:Ir;function vo(r){qt.changeLanguage(r)}function jt(r=globalThis.crypto){if(typeof r?.randomUUID=="function")return r.randomUUID();if(typeof r?.getRandomValues!="function")throw new Error("SECURE_RANDOM_UNAVAILABLE: This browser does not provide crypto.getRandomValues.");let e=r.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,i=>i.toString(16).padStart(2,"0")).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function _o(r,e){if(r.width<=0||r.height<=0)return{...e};let t=Math.min(r.x,e.x),i=Math.min(r.y,e.y);return{x:t,y:i,width:Math.max(r.x+r.width,e.x+e.width)-t,height:Math.max(r.y+r.height,e.y+e.height)-i}}function Co(r,e){let t=Math.max(r.x,e.x),i=Math.max(r.y,e.y);return{x:t,y:i,width:Math.max(0,Math.min(r.x+r.width,e.x+e.width)-t),height:Math.max(0,Math.min(r.y+r.height,e.y+e.height)-i)}}var ue=r=>String(r).padStart(10,"0");function mt(r=2654435769){let e=r|0;return()=>(e^=e<<13,e^=e>>>17,e^=e<<5,(e>>>0)/4294967296)}var Ro={info:0,warning:1,error:2},vi=class{db;onEvent;counts;severities;pending;sequence;lastSent;constructor(e,t){this.db=e,this.onEvent=t,this.counts={},this.severities={},this.pending=[],this.sequence=0,this.lastSent=new Map}async emit(e){this.counts[e.code]=(this.counts[e.code]||0)+1;let t=this.severities[e.code];(!t||Ro[e.severity]>Ro[t])&&(this.severities[e.code]=e.severity),this.pending.push({key:`diagnostic/${ue(this.sequence++)}`,value:e});let i=performance.now(),n=this.lastSent.get(e.code)||0;(!n||i-n>750)&&(this.onEvent({...e,occurrences:this.counts[e.code]}),this.lastSent.set(e.code,i)),this.pending.length>=24&&await this.flush()}async flush(){if(!this.pending.length)return;let e=this.pending.slice();await this.db.putMany(e),this.pending.splice(0,e.length)}};var nu=[40,48,40,32,16,24,64,32,40,24,112,88,15,104,16,24,64,56,40];function Po(r){if(typeof r.ls_layout!="function")throw new Error("CORE_LAYOUT_MISMATCH: module predates ls_layout (stale build?)");for(let[e,t]of nu.entries()){let i=r.ls_layout(e);if(i!==t)throw new Error(`CORE_LAYOUT_MISMATCH: ls_layout(${e}) = ${i}, TS expects ${t}.`)}}var su={[-1]:"CORE_BAD_ARGUMENT"},ls=-256;function Io(r,e){if(r<=ls&&r>ls-256)throw new Error(`Invalid PNG filter ${ls-r}.`);if(r<0)throw new Error(`${su[r]||"CORE_FAILURE"}: ${e} (status ${r}).`);return r}var Fr=class{exports;base;capacity;constructor(e){this.exports=e,this.base=0,this.capacity=0}plan(e){let t=e.map(s=>s+7&-8),i=t.reduce((s,a)=>s+a,0);if(i>this.capacity){let s=Math.max(i,this.capacity*2,4194304);if(this.base&&this.exports.ls_free(this.base,this.capacity),this.base=this.exports.ls_alloc(s),!this.base)throw this.capacity=0,new Error(`CORE_OUT_OF_MEMORY: the reconstruction core could not reserve ${s} bytes.`);this.capacity=s}let n=0;return t.map(s=>{let a=this.base+n;return n+=s,a})}};function It(r,e,t){let i=r.ls_alloc(e);if(!i)throw new Error(`CORE_OUT_OF_MEMORY: ${t}.`);return i}var ee=class{done=!1;once(e){this.done||(this.done=!0,e())}},ve=class{exports;ptr;length;freeGuard;constructor(e,t,i){this.exports=e,this.ptr=t,this.length=i,this.freeGuard=new ee}bytes(){return new Uint8Array(this.exports.memory.buffer).slice(this.ptr,this.ptr+this.length)}view(){return new Uint8Array(this.exports.memory.buffer,this.ptr,this.length)}write(e){if(e.byteLength!==this.length)throw new Error(`CORE_BAD_ARGUMENT: resident buffer holds ${this.length} bytes, not ${e.byteLength}.`);new Uint8Array(this.exports.memory.buffer).set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),this.ptr)}free(){this.freeGuard.once(()=>this.exports.ls_free(this.ptr,this.length))}},Q=class extends ve{width;height;constructor(e,t,i,n){super(e,t,i*n*4),this.width=i,this.height=n}},Br=class{exports;capacity;width;height;slots;tick;constructor(e,t,i,n){this.exports=e,this.capacity=t,this.width=i,this.height=n,this.slots=[],this.tick=0}get(e){return this.slots.find(t=>t.index===e)?.frame}upload(e,t){return this.fill(e,t.width,t.height,i=>i.write(t.data))}fill(e,t,i,n){if(t!==this.width||i!==this.height)throw new Error(`CORE_BAD_ARGUMENT: frame ${t}\xD7${i} does not fit a ${this.width}\xD7${this.height} ring.`);let s=this.get(e);if(s)return s;let a=this.slots.length<this.capacity?void 0:this.slots.reduce((o,c)=>o.used<c.used?o:c);if(!a){let o=It(this.exports,this.width*this.height*4,"resident frame slot");a={frame:new Q(this.exports,o,this.width,this.height),index:e,used:0},this.slots.push(a)}return a.index=e,a.used=++this.tick,n(a.frame),a.frame}free(){for(let e of this.slots.splice(0))e.frame.free()}},Fe=class extends ve{width;height;constructor(e,t,i,n){super(e,t,i*n),this.width=i,this.height=n}window(e,t,i,n){let s=new Uint8Array(this.exports.memory.buffer),a=new Uint8Array(i*n);for(let o=0;o<n;o++){let c=this.ptr+(t+o)*this.width+e;a.set(s.subarray(c,c+i),o*i)}return a}};function Dr(r,e,t){let i=new DataView(r.memory.buffer,e,32);i.setFloat64(0,t.x,!0),i.setFloat64(8,t.y,!0),i.setFloat64(16,t.width,!0),i.setFloat64(24,t.height,!0)}function $e(r,e,t,i,n,s,a){Dr(r,e+t,i.rect),(i.exclusions||[]).forEach((l,h)=>Dr(r,n+h*32,l));let o=new DataView(r.memory.buffer,e+t,64);o.setUint32(32,i.exclusions?.length?n:0,!0),o.setUint32(36,i.exclusions?.length||0,!0),i.crop&&Dr(r,s,i.crop),o.setUint32(40,i.crop?s:0,!0),o.setUint32(44,i.solid?1:0,!0);let c=!!i.mask&&!i.solid;if(c){if(!i.maskWidth||!i.maskHeight||i.mask.byteLength!==i.maskWidth*i.maskHeight)throw new Error(`CORE_BAD_ARGUMENT: region ${i.id} mask does not match its declared ${i.maskWidth}\xD7${i.maskHeight}.`);new Uint8Array(r.memory.buffer).set(i.mask,a)}o.setUint32(48,c?a:0,!0),o.setUint32(52,c?i.maskWidth:0,!0),o.setUint32(56,c?i.maskHeight:0,!0),o.setUint32(60,c&&i.factor||0,!0)}function Fo(r,e,t){return e instanceof Q?e.ptr:(new Uint8Array(r.memory.buffer).set(new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength),t),t)}function Bo(r,e,t,i){let n=t*i,[s,a]=r.scratch([n*4,n]);return r.writeBytes(s,e),r.check(r.exports.ls_grayscale(s,t,i,a),"grayscale"),{width:t,height:i,data:r.readBytes(a,n)}}function Do(r,e,t){if(t.width!==e.width||t.height!==e.height)throw new Error("CORE_BAD_ARGUMENT: luma plane does not match the frame.");return r.check(r.exports.ls_grayscale(e.ptr,e.width,e.height,t.ptr),"grayscale"),t}function Oo(r,e,t){let i=Math.max(1,Math.ceil(e.width/t)),n=Math.max(1,Math.ceil(e.height/t)),s=e instanceof Q,[a,o]=r.scratch([s?0:e.width*e.height*4,i*n]),c=r.placeFrame(e,a);return r.check(r.exports.ls_downscale_gray(c,e.width,e.height,t,o),"downscaleGray"),{width:i,height:n,data:r.readBytes(o,i*n)}}function Mo(r,e){let t=Math.max(1,e.width>>1),i=Math.max(1,e.height>>1),[n,s]=r.scratch([e.data.byteLength,t*i*4]);return r.writeBytes(n,e.data),r.check(r.exports.ls_halve_rgba(n,e.width,e.height,s),"halveRGBA"),{width:t,height:i,data:new Uint8ClampedArray(r.readBytes(s,t*i*4).buffer)}}function No(r,e,t){if(e.width!==t.width||e.height!==t.height)return 255;let[i,n]=r.scratch([e.data.byteLength,t.data.byteLength]);return r.writeBytes(i,e.data),r.writeBytes(n,t.data),r.exports.ls_mean_difference(i,n,e.data.byteLength)}function Uo(r,e,t,i,n,s,a,o,c){let[l,h,d]=r.scratch([e.byteLength,32,n*s*4]),u=zo(r,e,t,i,n,s,a,l,h,d);return c&&(c.above=u),o&&o.length===n*s*4?(o.set(new Uint8Array(r.exports.memory.buffer,d,n*s*4)),o):new Uint8ClampedArray(r.readBytes(d,n*s*4).buffer)}function Lo(r,e,t,i,n,s,a,o){let[c,l]=r.scratch([e.byteLength,32]);zo(r,e,t,i,n,s,a,c,l,o)}function zo(r,e,t,i,n,s,a,o,c,l){r.writeBytes(o,e);let h=new Uint32Array(8);return i.slice(0,4).forEach((d,u)=>h.set([d.offset,d.stride],u*2)),r.writeBytes(c,h),r.check(r.exports.ls_frame_to_rgba(o,e.byteLength,t,n,s,c,a,l),"frameToRGBA")}var ou={rgba8:0,rgb10a2:1},cu={pq:1,hlg:2};function Vo(r,e,t,i,n,s){let[a]=r.scratch([i*n*4]);r.writeBytes(a,e);let o=r.check(r.exports.ls_hdr_rgb_to_rgba(a,ou[t],i,n,cu[s]),"hdrToRGBA");return e.set(new Uint8Array(r.exports.memory.buffer,a,i*n*4)),o}var du=new TextEncoder,hu=new TextDecoder,se=class{bytes=new Uint8Array(256);view=new DataView(this.bytes.buffer);length=0;reserve(e){let t=this.length;if(t+e>this.bytes.length){let i=new Uint8Array(Math.max(t+e,this.bytes.length*2));i.set(this.bytes.subarray(0,t)),this.bytes=i,this.view=new DataView(i.buffer)}return this.length=t+e,t}u8(e){let t=this.reserve(1);return this.view.setUint8(t,e),this}bool(e){return this.u8(e?1:0)}u32(e){let t=this.reserve(4);return this.view.setUint32(t,e,!0),this}i32(e){let t=this.reserve(4);return this.view.setInt32(t,e,!0),this}blob(e){let t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);this.u32(t.length);let i=this.reserve(t.length);return this.bytes.set(t,i),this}f64(e){let t=this.reserve(8);return this.view.setFloat64(t,e,!0),this}raw(e){let t=this.reserve(e.length);return this.bytes.set(e,t),this}str(e){let t=du.encode(e);this.u32(t.length);let i=this.reserve(t.length);return this.bytes.set(t,i),this}place(e,t=[]){let[i,...n]=e.scratch([this.length,...t]);return e.writeBytes(i,this.bytes.subarray(0,this.length)),[i,this.length,...n]}},ge=class{bytes;at;view;constructor(e){this.bytes=e,this.at=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}get done(){return this.at>=this.bytes.length}u8(){return this.view.getUint8(this.at++)}bool(){return this.u8()!==0}u32(){let e=this.view.getUint32(this.at,!0);return this.at+=4,e}f64(){let e=this.view.getFloat64(this.at,!0);return this.at+=8,e}i32(){let e=this.view.getInt32(this.at,!0);return this.at+=4,e}blob(){let e=this.u32(),t=this.bytes.slice(this.at,this.at+e);return this.at+=e,t}str(){let e=this.u32(),t=hu.decode(this.bytes.subarray(this.at,this.at+e));return this.at+=e,t}take(e){let t=this.bytes.slice(this.at,this.at+e);return this.at+=e,t}};function Kt(r,e,t,i){let[n]=r.scratch([e]);return r.check(t(n,e),i),new ge(r.readBytes(n,e))}function Ho(r,e,t){let i=t*t*4,n=e.map(c=>c?i:0);n.push(i);let s=r.scratch(n),a=s[4],o=0;for(let c=0;c<4;c++){let l=e[c];l&&(r.writeBytes(s[c],l),o|=1<<c)}return r.check(r.exports.ls_assemble_pyramid_parent(s[0],s[1],s[2],s[3],o,t,a),"assemblePyramidParent"),{width:t,height:t,data:new Uint8ClampedArray(r.readBytes(a,i).buffer)}}var uu=new TextEncoder,ds=class r{core;exports;handle;size;static registry=new FinalizationRegistry(({exports:e,handle:t})=>e.ls_pyramid_free(t));freeGuard;token;constructor(e,t,i,n){this.core=e,this.exports=t,this.handle=i,this.size=n,this.freeGuard=new ee,this.token={},r.registry.register(this,{exports:t,handle:i},this.token)}queue(e,t){let[i]=this.core.scratch([8]);this.core.check(this.exports.ls_pyramid_queue(this.handle,e,t,i),"pyramid queue");let n=new DataView(this.exports.memory.buffer,i,8);return{x:n.getInt32(0,!0),y:n.getInt32(4,!0)}}provide(e){let t=this.size*this.size*4,[i,...n]=this.core.scratch([16,...e.map(a=>a?t:0)]),s=new DataView(this.exports.memory.buffer,i,16);e.forEach((a,o)=>{a&&this.core.writeBytes(n[o],a),s.setUint32(o*4,a?n[o]:0,!0)}),this.core.check(this.exports.ls_pyramid_provide(this.handle,i),"pyramid provide")}step(){let e=this.core.check(this.exports.ls_pyramid_step(this.handle),"pyramid step"),[t]=this.core.scratch([e]);this.core.check(this.exports.ls_pyramid_take(this.handle,t,e),"pyramid step result");let i=new ge(this.core.readBytes(t,e)),n=i.u8(),s=()=>i.u32()|0;if(n===0)return{kind:"index",level:i.u32()};if(n===1){let a=i.u32(),o=s(),c=s();return{kind:"children",level:a,x:o,y:c,children:[0,1,2,3].map(()=>({level:i.u32(),x:s(),y:s()}))}}if(n===2){let a=i.u32(),o=s(),c=s();return i.bool()?{kind:"parent",level:a,x:o,y:c,pixels:new Uint8ClampedArray(i.take(this.size*this.size*4).buffer)}:{kind:"parent",level:a,x:o,y:c}}return n===3?{kind:"level",level:i.u32()}:{kind:"done"}}free(){this.freeGuard.once(()=>{r.registry.unregister(this.token),this.exports.ls_pyramid_free(this.handle)})}};function Wo(r,e,t,i,n,s){let a=uu.encode(t),[o]=r.scratch([Math.max(1,a.length)]);r.writeBytes(o,a);let c=r.check(e.ls_pyramid_new(o,a.length,i,n,s),"pyramid session");return new ds(r,e,c,s)}function Go(r,e,t,i){let[n,s,a]=r.scratch([e.data.byteLength,32,t*r.featureBytes]);r.writeBytes(n,e.data),i&&r.writeRect(s,i);let o=r.check(r.exports.ls_extract_features(n,e.width,e.height,t,i?s:0,a),"extractFeatures");return pu(r,a,o)}function pu(r,e,t){let i=r.readBytes(e,t*r.featureBytes),n=new DataView(i.buffer),s=new Array(t);for(let a=0;a<t;a++){let o=a*r.featureBytes;s[a]={x:n.getInt32(o,!0),y:n.getInt32(o+4,!0),score:n.getFloat32(o+8,!0),descriptor:new Uint32Array(i.buffer.slice(o+12,o+44))}}return s}function fe(r,e,t){let i=new DataView(r.exports.memory.buffer,e,t.length*r.featureBytes);for(let n=0;n<t.length;n++){let s=t[n],a=n*r.featureBytes;i.setInt32(a,s.x,!0),i.setInt32(a+4,s.y,!0),i.setFloat32(a+8,s.score,!0);for(let o=0;o<8;o++)i.setUint32(a+12+o*4,s.descriptor[o],!0)}}function $o(r,e,t,i){if(!e.length||!t.length)return[];let[n,s,a]=r.scratch([e.length*r.featureBytes,t.length*r.featureBytes,e.length*2*r.matchBytes]);fe(r,n,e),fe(r,s,t);let o=r.check(r.exports.ls_match_features(n,e.length,s,t.length,i?1:0,a),"matchFeatures"),c=r.readBytes(a,o*r.matchBytes),l=new DataView(c.buffer),h=new Array(o);for(let d=0;d<o;d++){let u=d*r.matchBytes;h[d]={a:e[l.getUint32(u,!0)],b:t[l.getUint32(u+4,!0)],distance:l.getUint16(u+8,!0),unique:c[u+10]===1}}return h}function qo(r,e){if(!e.length)return[];let[t,i]=r.scratch([e.length*r.featureBytes,e.length*16]);fe(r,t,e);let n=r.check(r.exports.ls_feature_words(t,e.length,i),"featureWords");return[...new Uint32Array(r.readBytes(i,n*4).buffer)]}function us(r,e,t){let i=new DataView(r.exports.memory.buffer,e,t.length*40);for(let n=0;n<t.length;n++){let s=t[n],a=n*40;i.setFloat64(a,s.a.x,!0),i.setFloat64(a+8,s.a.y,!0),i.setFloat64(a+16,s.b.x,!0),i.setFloat64(a+24,s.b.y,!0),i.setUint32(a+32,s.unique?1:0,!0),i.setUint32(a+36,0,!0)}}function Ko(r,e,t){let i=new DataView(r.exports.memory.buffer,e,t*48),n=new Array(t);for(let s=0;s<t;s++){let a=s*48;n[s]={x:i.getFloat64(a,!0),y:i.getFloat64(a+8,!0),support:i.getUint32(a+16,!0),unique:i.getUint32(a+20,!0),confidence:i.getFloat64(a+24,!0),error:i.getFloat64(a+32,!0),ambiguous:i.getUint32(a+40,!0)===1}}return n}function Yo(r,e,t){let[i,n]=r.scratch([e.length*40,t*48]);us(r,i,e);let s=r.check(r.exports.ls_translation_hypotheses(i,e.length,t,n),"translationHypotheses");return Ko(r,n,s)}function Qo(r,e){let[t]=r.scratch([e.length*40]);return us(r,t,e),r.exports.ls_detect_scale(t,e.length)}function fs(r,e,t,i,n){let s=r.scratch([e.data.byteLength,t.data.byteLength,32,...n]);return r.writeBytes(s[0],e.data),r.writeBytes(s[1],t.data),i&&r.writeRect(s[2],i),{pa:s[0],pb:s[1],rect:i?s[2]:0,extra:s.slice(3)}}function Xo(r,e,t,i,n,s){let a=fs(r,e,t,s,[]),o=r.exports.ls_verify_translation(a.pa,e.width,e.height,a.pb,t.width,t.height,i,n,a.rect);if(Number.isNaN(o))throw new Error("CORE_BAD_ARGUMENT: verifyTranslation.");return o}function Zo(r,e,t,i,n,s,a){let o=fs(r,e,t,s,[64]);r.check(r.exports.ls_audit_translation(o.pa,e.width,e.height,o.pb,t.width,t.height,i,n,o.rect,a?1:0,o.extra[0]),"auditTranslation");let c=new Float64Array(r.readBytes(o.extra[0],64).buffer);return{error:c[0],mismatch:c[1],overlap:c[2],samples:c[3],blocks:c[4],agreeing:c[5],agreement:c[6],agreeingError:c[7]}}function Jo(r,e,t,i,n,s){let a=fs(r,e,t,n,[8]);r.check(r.exports.ls_refine_translation(a.pa,e.width,e.height,a.pb,t.width,t.height,i.x,i.y,a.rect,s,a.extra[0]),"refineTranslation");let o=new Int32Array(r.readBytes(a.extra[0],8).buffer);return{x:o[0],y:o[1]}}function ec(r,e,t,i,n){if(e.width!==t.width||e.height!==t.height)throw new Error("FRAME_GEOMETRY_CHANGED");let s=Math.ceil(t.width/24),a=Math.ceil(t.height/24),o=s*a,c=40+8*48+3*o,[l,h,d,u]=r.scratch([e.data.byteLength,t.data.byteLength,i.length*40,c]);r.writeBytes(l,e.data),r.writeBytes(h,t.data),us(r,d,i),r.check(r.exports.ls_estimate_motion(l,h,e.width,e.height,d,i.length,n,u),"estimateMotion");let f=r.readBytes(u,c),p=new DataView(f.buffer),g=p.getUint32(12,!0),y=40+8*48;return{cols:p.getUint32(0,!0),rows:p.getUint32(4,!0),cell:p.getUint32(8,!0),motions:Ko(r,u+40,g),difference:p.getFloat64(16,!0),featureCount:p.getUint32(24,!0),unknown:p.getUint32(28,!0)===1,zoom:p.getFloat64(32,!0),labels:f.slice(y,y+o),confidence:f.slice(y+o,y+2*o),dynamic:f.slice(y+2*o,y+3*o)}}function tc(r,e){let t=new DataView(r.readBytes(e,32).buffer);return{x:t.getInt32(0,!0),y:t.getInt32(4,!0),error:t.getFloat64(8,!0),samples:t.getUint32(16,!0),runnerUp:t.getFloat64(24,!0)}}function rc(r,e,t,i,n,s,a,o){if(e.width!==t.width||e.height!==t.height)return{x:Math.round(i.x),y:Math.round(i.y),error:1/0,samples:0,runnerUp:1/0};let c=A=>A instanceof Q?0:A.data.byteLength,l=s?.labels instanceof ve?s.labels:void 0;if(l&&l.length!==e.width*e.height)throw new Error("CORE_BAD_ARGUMENT: resident labels do not match the frame.");let[h,d,u,f,p,g]=r.scratch([c(e),c(t),32,s&&!l?s.labels.byteLength:0,o?o.g.data.byteLength:0,32]),y=r.placeFrame(e,h),w=r.placeFrame(t,d);r.writeRect(u,n);let m=0;l?m=l.ptr:s&&(r.writeBytes(f,s.labels),m=f);let b=0;return o&&(r.writeBytes(p,o.g.data),b=p),r.check(r.exports.ls_refine_native(y,w,e.width,e.height,i.x,i.y,u,m,s?.code??0,a,b,o?.g.width??0,o?.g.height??0,o?.factor??0,g),"refineNative"),tc(r,g)}function ic(r,e,t,i,n,s){let a=t instanceof Fe,o=r.scratch([a?0:t.data.byteLength,32,e.length*16,32,...e.map(p=>p.data.byteLength)]),[c,l,h,d]=o,u=c;t instanceof Fe?u=t.ptr:r.writeBytes(c,t.data),r.writeRect(l,i);let f=new DataView(r.exports.memory.buffer,h,Math.max(1,e.length*16));return e.forEach((p,g)=>{if(p.data.byteLength!==p.size*p.size)throw new Error("CORE_BAD_ARGUMENT: patch data does not match its size.");r.writeBytes(o[4+g],p.data),f.setInt32(g*16,p.x,!0),f.setInt32(g*16+4,p.y,!0),f.setUint32(g*16+8,p.size,!0),f.setUint32(g*16+12,o[4+g],!0)}),r.check(r.exports.ls_refine_patches(h,e.length,u,t.width,t.height,l,n.x,n.y,s,d),"refinePatches"),tc(r,d)}function nc(r,e,t){let i=Math.max(2,Math.round(e.width*t)),n=Math.max(2,Math.round(e.height*t)),[s,a]=r.scratch([e.data.byteLength,i*n]);return r.writeBytes(s,e.data),r.check(r.exports.ls_resample_gray(s,e.width,e.height,t,a),"resampleGray"),{width:i,height:n,data:r.readBytes(a,i*n)}}function sc(r,e,t,i,n,s=24,a=32){let o=e instanceof Fe,[c,l,h,d]=r.scratch([o?0:e.data.byteLength,32,i.length*16,s*(24+a*a)]),u=c;e instanceof Fe?u=e.ptr:r.writeBytes(c,e.data),r.writeRect(l,t);let f=new DataView(r.exports.memory.buffer,h,Math.max(1,i.length*16));i.forEach((b,A)=>{f.setFloat64(A*16,b.x,!0),f.setFloat64(A*16+8,b.y,!0)});let p=r.check(r.exports.ls_extract_patches(u,e.width,e.height,l,h,i.length,n,s,a,d),"extractPatches"),g=24+a*a,y=r.readBytes(d,p*g),w=new DataView(y.buffer),m=new Array(p);for(let b=0;b<p;b++){let A=b*g;m[b]={x:w.getFloat64(A,!0),y:w.getFloat64(A+8,!0),size:w.getUint32(A+16,!0),data:y.slice(A+24,A+24+a*a)}}return m}function ac(r,e,t,i,n,s=[1.1,1.25,1.5,2,1/1.1,1/1.25,1/1.5,1/2]){let[a,o,c,l,h,d]=r.scratch([e.data.byteLength,t.data.byteLength,i.length*r.featureBytes,32,s.length*8,16]);r.writeBytes(a,e.data),r.writeBytes(o,t.data),fe(r,c,i),n&&r.writeRect(l,n);let u=new DataView(r.exports.memory.buffer,h,s.length*8);if(s.forEach((g,y)=>u.setFloat64(y*8,g,!0)),!r.check(r.exports.ls_probe_scale(a,e.width,e.height,o,t.width,t.height,c,i.length,n?l:0,h,s.length,d),"probeScale"))return;let p=new DataView(r.readBytes(d,16).buffer);return{scale:p.getFloat64(0,!0),error:p.getFloat64(8,!0)}}function oc(r,e,t,i,n,s,a,o){let[c]=r.scratch([e instanceof Q?0:e.width*e.height*4]),l=r.placeFrame(e,c),h=r.exports.ls_stationary_boundary(l,e.width,e.height,t==="x"?0:1,i,n,s,a,o==="first"?0:1);return h<=-2&&r.check(-1,"stationaryBoundary"),h<0?void 0:h}function cc(r,e,t,i,n,s){let a=t.width*t.height*4,o=Math.max(s.length,1),[c,l,h,d,u]=r.scratch([e instanceof Q?0:a,t instanceof Q?0:a,32,s.length*32,o*32]),f=r.placeFrame(e,c),p=r.placeFrame(t,l);r.writeRect(h,i),s.forEach((w,m)=>r.writeRect(d+m*32,w));let g=r.check(r.exports.ls_sticky_occlusions(f,p,t.width,t.height,h,n.x,n.y,d,s.length,u),"stickyOcclusions"),y=new DataView(r.exports.memory.buffer,u,g*32);return Array.from({length:g},(w,m)=>({x:y.getFloat64(m*32,!0),y:y.getFloat64(m*32+8,!0),width:y.getFloat64(m*32+16,!0),height:y.getFloat64(m*32+24,!0)}))}function lc(r,e){let{width:t,height:i}=e.image,n=wu(r,e);return r.readBytes(n,t*i)}function wu(r,e,t){let{width:i,height:n}=e.image,s=i*n,a=E=>E?Math.ceil(E.w*E.h/8):0,o=e.image instanceof Q,c=e.labels instanceof ve,l=E=>E?[E.image instanceof Q?0:s*4,48,(E.occlusions?.length||0)*32,24,a(E.voting),a(E.voting)]:[0,0,0,0,0,0],h=r.scratch([o?0:s*4,c?0:s,32,24,a(e.voting),a(e.voting),...l(e.prev),...l(e.next),t?0:s]),[d,u,f,p,g,y]=h,w=t?t.ptr:h[h.length-1],m=r.placeFrame(e.image,d),b;if(e.labels instanceof ve){if(e.labels.length!==s)throw new Error("CORE_BAD_ARGUMENT: resident labels do not match the frame.");b=e.labels.ptr}else b=u,r.writeBytes(b,e.labels);r.writeRect(f,e.region);let A=(E,_,N,F)=>{if(!F)return 0;let L=a(F);if(F.bits.length<L||F.clean.length<L)throw new Error("CORE_BAD_ARGUMENT: truncated consistency vote bitset.");r.writeBytes(_,F.bits.subarray(0,L)),r.writeBytes(N,F.clean.subarray(0,L));let B=new DataView(r.exports.memory.buffer,E,24);return B.setInt32(0,F.x0,!0),B.setInt32(4,F.y0,!0),B.setInt32(8,F.w,!0),B.setInt32(12,F.h,!0),B.setUint32(16,_,!0),B.setUint32(20,N,!0),E},T=A(p,g,y,e.voting),S=(E,_)=>{if(!_)return 0;let[N,F,L,B,I,v]=h.slice(E,E+6);if(_.image.width!==i||_.image.height!==n)throw new Error("CORE_BAD_ARGUMENT: neighbour frame size differs.");let M=r.placeFrame(_.image,N);(_.occlusions||[]).forEach((U,j)=>r.writeRect(L+j*32,U));let z=new DataView(r.exports.memory.buffer,F,48);return z.setUint32(0,M,!0),z.setFloat64(8,_.x,!0),z.setFloat64(16,_.y,!0),z.setUint32(24,_.occlusions?.length?L:0,!0),z.setUint32(28,_.occlusions?.length||0,!0),z.setUint32(32,A(B,I,v,_.voting),!0),F},x=S(6,e.prev),k=S(12,e.next);return r.check(r.exports.ls_consistency_mask(m,b,i,n,f,e.code,e.pose.x,e.pose.y,x,k,T,e.factor,e.noise,w),"consistencyMask"),w}function dc(r,e,t,i){let[n,s]=r.scratch([e.byteLength,(t*4+1)*i]);return r.writeBytes(n,e),r.check(r.exports.ls_png_filter_sub(n,t,i,s),"PNG filtering"),r.readBytes(s,(t*4+1)*i)}function hc(r,e,t,i){let[n]=r.scratch([e.byteLength]);r.writeBytes(n,e);let s=r.check(r.exports.ls_png_encode(n,t,i),"PNG encode");try{let a=r.check(r.exports.ls_png_encode_len(s),"PNG encode length"),[o]=r.scratch([a]);return r.check(r.exports.ls_png_encode_read(s,o),"PNG encode read"),r.readBytes(o,a)}finally{r.exports.ls_png_encode_free(s)}}function uc(r,e,t,i){let n=t*i*4,[s,a]=r.scratch([e.byteLength,n]);return r.writeBytes(s,e),r.check(r.exports.ls_png_decode(s,e.byteLength,a,n),"PNG decode"),new Uint8ClampedArray(r.readBytes(a,n).buffer)}function fc(r,e){let[t]=r.scratch([e.byteLength]);return r.writeBytes(t,e),r.exports.ls_crc32(t,e.byteLength)>>>0}var Au=new TextEncoder,ku=new TextDecoder;function Su(r,e,t){r.set(Au.encode(t).subarray(0,10),e)}function ps(r,e){return ku.decode(r.slice(e,e+10))}function Tu(r,e,t){r.setFloat64(e,t.x,!0),r.setFloat64(e+8,t.y,!0),r.setFloat64(e+16,t.width,!0),r.setFloat64(e+24,t.height,!0)}function Eu(r,e){return{x:r.getFloat64(e,!0),y:r.getFloat64(e+8,!0),width:r.getFloat64(e+16,!0),height:r.getFloat64(e+24,!0)}}function pc(r,e,t,i,n){Su(r,t,i.id),Tu(e,t+10,i.rect),e.setUint32(t+42,i.chosenFrame,!0),e.setFloat64(t+46,i.chosenTime,!0),e.setUint32(t+54,i.complete?1:0,!0),e.setUint32(t+58,i.revisions,!0),e.setUint32(t+62,n,!0)}function mc(r,e,t){return{row:{id:ps(r,t),rect:Eu(e,t+10),chosenFrame:e.getUint32(t+42,!0),chosenTime:e.getFloat64(t+46,!0),complete:e.getUint32(t+54,!0)!==0,revisions:e.getUint32(t+58,!0)},blockCount:e.getUint32(t+62,!0)}}function gc(r,e,t){t.forEach(([i,n],s)=>{r.setInt32(e+s*8,i,!0),r.setInt32(e+s*8+4,n,!0)})}function yc(r,e,t){let i=[];for(let n=0;n<t;n++)i.push([r.getInt32(e+n*8,!0),r.getInt32(e+n*8+4,!0)]);return i}var wc=112,bc=20,xc=80,Ac=72,Ri=-11,Pi=-15;function ms(r,e){return{x:r.getFloat64(e,!0),y:r.getFloat64(e+8,!0),width:r.getFloat64(e+16,!0),height:r.getFloat64(e+24,!0)}}var kc=new TextEncoder,vu=new TextDecoder,gs=class{core;exports;handle;freeGuard;frameDesc;constructor(e,t,i){this.core=e,this.exports=t,this.handle=i,this.freeGuard=new ee,this.frameDesc=0}begin(e,t,i){let{width:n,height:s}=i.image,a=n*s,o=i.image instanceof Q?i.image:void 0,c=i.consistent instanceof ve?i.consistent:void 0;for(let[S,x]of[["labels",i.labels],["consistency mask",c]])if(x&&x.length!==a)throw new Error(`CORE_BAD_ARGUMENT: resident ${S} do not match the frame.`);let[l,h,d]=this.core.scratchFrame([bc,o?0:a*4,i.consistent&&!c?a:0]),u=o?o.ptr:h;o||this.core.writeBytes(u,i.image.data);let f=c?c.ptr:i.consistent?d:0;i.consistent&&!c&&this.core.writeBytes(d,i.consistent);let p=new DataView(this.exports.memory.buffer,l,bc);[u,n,s,i.labels.ptr,f].forEach((S,x)=>p.setUint32(x*4,S,!0)),this.frameDesc=l;let g=kc.encode(t.canvas),y=t.occlusions??[],[w,m,b]=this.core.scratch([wc,Math.max(1,g.length),y.length*32]);this.core.writeBytes(m,g),y.forEach((S,x)=>this.core.writeRect(b+x*32,S));let A=new DataView(this.exports.memory.buffer,w,wc);A.setUint32(0,m,!0),A.setUint32(4,g.length,!0),this.core.writeRect(w+8,t.region),A.setUint32(40,t.code,!0),A.setFloat64(48,t.ownedPixels,!0),A.setFloat64(56,t.x,!0),A.setFloat64(64,t.y,!0),A.setUint32(72,t.frame,!0),A.setFloat64(80,t.time,!0),A.setFloat64(88,t.confidence,!0),A.setUint32(96,t.uncertain?1:0,!0),A.setUint32(100,y.length?b:0,!0),A.setUint32(104,y.length,!0);let T=this.exports.ls_compositor_begin(this.handle,e.handle,w,l);return T===Ri?T:this.core.check(T,"compositorBegin")}cancel(){this.exports.ls_compositor_cancel(this.handle)}step(e,t){let[i]=this.core.scratch([xc]),n=this.exports.ls_compositor_step(this.handle,e.handle,this.frameDesc,t,i);if(n===Pi)return n;this.core.check(n,"compositorStep");let s=new DataView(this.exports.memory.buffer,i,xc);if(n===1)return{kind:"tile",x:s.getInt32(0,!0),y:s.getInt32(4,!0)};if(n===2)return{kind:"temporal"};let a={added:s.getFloat64(0,!0),conflicts:s.getFloat64(8,!0),uncertain:s.getFloat64(16,!0),tiles:s.getFloat64(24,!0),bounds:ms(s,40),provisionalPixels:s.getFloat64(32,!0)},o=s.getUint32(72,!0),c=[];if(o){let[l]=this.core.scratch([o]);this.core.check(this.exports.ls_compositor_diagnostics(this.handle,l),"compositorDiagnostics");let h=new DataView(this.exports.memory.buffer,l,o);for(let d=0;d<o;){let u=h.getUint32(d,!0),f=h.getUint32(d+4,!0),p=h.getFloat64(d+8,!0),g=ms(h,d+16),y=h.getUint32(d+64,!0),w=Array.from({length:y},(m,b)=>ms(h,d+Ac+b*32));c.push(u===0?{kind:"incomplete",frame:f,time:p,region:g}:{kind:"conflict",frame:f,time:p,region:g,confidence:h.getFloat64(d+48,!0),regions:w,conflicts:h.getFloat64(d+56,!0)}),d+=Ac+y*32}}return{kind:"done",stats:a,diagnostics:c}}loadTemporal(e,t){let i=kc.encode(e),n=t.reduce((d,u)=>d+u.blocks.length,0),[s,a,o]=this.core.scratch([Math.max(1,i.length),t.length*66,n*8]);this.core.writeBytes(s,i);let c=new Uint8Array(this.exports.memory.buffer),l=new DataView(this.exports.memory.buffer),h=o;t.forEach((d,u)=>{pc(c,l,a+u*66,d,d.blocks.length),gc(l,h,d.blocks),h+=d.blocks.length*8}),this.core.check(this.exports.ls_compositor_load_temporal(this.handle,s,i.length,a,o,t.length),"compositorLoadTemporal")}flush(){let e=this.core.check(this.exports.ls_compositor_flush(this.handle),"compositorFlush"),t=[];for(let i=0;i<e;i++){let[n]=this.core.scratch([16]);this.core.check(this.exports.ls_compositor_flush_sizes(this.handle,i,n),"compositorFlushSizes");let s=new DataView(this.exports.memory.buffer,n,16),[a,o,c,l]=[0,1,2,3].map(b=>s.getUint32(b*4,!0)),[h,d,u,f]=this.core.scratch([Math.max(1,a),o*10,c*66,l*8]);this.core.check(this.exports.ls_compositor_flush_take(this.handle,i,h,d,u,f),"compositorFlushTake");let p=new Uint8Array(this.exports.memory.buffer),g=new DataView(this.exports.memory.buffer),y=Array.from({length:o},(b,A)=>ps(p,d+A*10)),w=[],m=f;for(let b=0;b<c;b++){let{row:A,blockCount:T}=mc(p,g,u+b*66);w.push({...A,blocks:yc(g,m,T)}),m+=T*8}t.push({canvas:vu.decode(p.slice(h,h+a)),deleted:y,dirty:w})}return t}dispose(){this.exports.ls_compositor_dispose(this.handle)}free(){this.freeGuard.once(()=>this.exports.ls_compositor_free(this.handle))}};function Sc(r,e,t,i,n){return new gs(r,e,r.check(e.ls_compositor_new(t?1:0,i,n),"compositorNew"))}var Tc=80,Cu=64,Ru=-2,Yt=["pixels","coverage","provisional","quality","conflicts","owner","score","frozen"],Pu=new TextEncoder,ys=class{core;exports;handle;freeGuard;constructor(e,t,i){this.core=e,this.exports=t,this.handle=i,this.freeGuard=new ee}key(e,t=[]){let i=Pu.encode(e),[n,...s]=this.core.scratch([Math.max(1,i.length),...t]);return this.core.writeBytes(n,i),[n,i.length,...s]}get maxTiles(){return this.core.check(this.exports.ls_tiles_max(this.handle),"tilesMax")}set maxTiles(e){this.core.check(this.exports.ls_tiles_set_max(this.handle,e),"tilesSetMax")}stats(){let[e]=this.core.scratch([32]);this.core.check(this.exports.ls_tiles_stats(this.handle,e),"tilesStats");let t=new DataView(this.exports.memory.buffer,e,32);return{encoded:t.getFloat64(0,!0),decoded:t.getFloat64(8,!0),evictions:t.getFloat64(16,!0),peakResident:t.getFloat64(24,!0)}}touch(e,t,i,n){let[s,a]=this.key(e);return this.core.check(this.exports.ls_tiles_touch(this.handle,s,a,t,i,n),"tilesTouch")}victim(){return this.core.check(this.exports.ls_tiles_victim(this.handle),"tilesVictim")}evict(e){this.core.check(this.exports.ls_tiles_evict(this.handle,e),"tilesEvict")}release(e){this.exports.ls_tiles_release(this.handle,e)}insert(e,t,i,n,s){let a=s?Yt.map(d=>s[d]):[],[o,c,l,...h]=this.key(e,s?[Cu,...a.map(d=>d?.byteLength??0)]:[]);if(s){let d=new DataView(this.exports.memory.buffer);a.forEach((u,f)=>{u&&this.core.writeBytes(h[f],u),d.setUint32(l+f*8,u?h[f]||l:0,!0),d.setUint32(l+f*8+4,u?.byteLength??0,!0)})}return this.core.check(this.exports.ls_tiles_insert(this.handle,o,c,t,i,n,s?l:0),"tilesInsert")}planes(e){let[t]=this.core.scratch([Tc]),i=this.exports.ls_tiles_planes(this.handle,e,t);if(i===Ru)return;this.core.check(i,"tilesPlanes");let n=new DataView(this.exports.memory.buffer,t,Tc),s=n.getFloat64(72,!0);return{ptrs:Yt.map((a,o)=>n.getUint32(o*8,!0)),lens:Yt.map((a,o)=>n.getUint32(o*8+4,!0)),dirty:n.getUint32(64,!0)!==0,existed:n.getUint32(68,!0)!==0,touched:Number.isNaN(s)?void 0:s}}setDirty(e,t){this.core.check(this.exports.ls_tiles_set_dirty(this.handle,e,t?1:0),"tilesSetDirty")}setTouched(e,t){this.core.check(this.exports.ls_tiles_set_touched(this.handle,e,t??NaN),"tilesSetTouched")}dirty(e){let t=this.core.check(this.exports.ls_tiles_dirty(this.handle,e??NaN,0,0),"tilesDirty");if(!t)return[];let[i]=this.core.scratch([t*4]);return this.core.check(this.exports.ls_tiles_dirty(this.handle,e??NaN,i,t),"tilesDirty"),Array.from(new Uint32Array(this.exports.memory.buffer,i,t))}encoded(){this.exports.ls_tiles_encoded(this.handle)}saved(e){this.exports.ls_tiles_saved(this.handle,e)}observed(e){return this.core.check(this.exports.ls_tiles_observed(this.handle,e),"tilesObserved")}clear(){this.exports.ls_tiles_clear(this.handle)}free(){this.freeGuard.once(()=>this.exports.ls_tiles_free(this.handle))}};function Ec(r,e,t,i){return new ys(r,e,r.check(e.ls_tiles_new(t,i),"tilesNew"))}function _c(r,e,t,i,n,s,a,o,c,l){let h=Math.ceil(t/n),d=Math.ceil(i/n),u=h*d,f=l&&!(l instanceof Q)?l.width*l.height*4:0,p=[112,i*8,t*8,t*8,h*8,d*8,u*2*8,u*2*8,u*8,u*8,s.nativeRowChange?s.nativeRowChange.length*8:0,s.nativeColChange?s.nativeColChange.length*8:0,f,t*8],[g,y,w,m,b,A,T,S,x,k,E,_,N,F]=r.scratch(p);r.writeBytes(y,s.rowChange),r.writeBytes(w,s.colChange),r.writeBytes(F,s.colMoving),r.writeBytes(m,s.colMean),r.writeBytes(b,s.colGain),r.writeBytes(A,s.horizontalGain),r.writeBytes(T,s.split),r.writeBytes(S,s.evidence),r.writeBytes(x,s.activity),r.writeBytes(k,s.observations),s.nativeRowChange&&r.writeBytes(E,s.nativeRowChange),s.nativeColChange&&r.writeBytes(_,s.nativeColChange);let L=l?r.placeFrame(l,N):0,B=new DataView(e.memory.buffer,g,112);return B.setUint32(0,t,!0),B.setUint32(4,i,!0),B.setUint32(8,n,!0),B.setFloat64(16,s.informativeFrames,!0),B.setFloat64(24,s.nativeFrames,!0),B.setUint32(32,y,!0),B.setUint32(36,w,!0),B.setUint32(40,m,!0),B.setUint32(44,b,!0),B.setUint32(48,A,!0),B.setUint32(52,T,!0),B.setUint32(56,S,!0),B.setUint32(60,x,!0),B.setUint32(64,k,!0),B.setUint32(68,s.nativeRowChange?E:0,!0),B.setUint32(72,s.nativeColChange?_:0,!0),B.setUint32(76,L,!0),B.setUint32(80,l?l.width:0,!0),B.setUint32(84,l?l.height:0,!0),B.setFloat64(88,a,!0),B.setFloat64(96,o,!0),B.setUint32(104,c,!0),B.setUint32(108,F,!0),Cc(r,e,r.check(e.ls_regions_finish(g),"regions finish"),t,i,c)}function Cc(r,e,t,i,n,s){try{let a=r.check(e.ls_regions_count(t),"regions count"),o=r.check(e.ls_regions_cells_total(t),"regions cells total"),[c,l,h]=r.scratch([a*88,a*i*n,o*4]);r.check(e.ls_regions_read_headers(t,c),"regions read headers"),r.check(e.ls_regions_read_masks(t,l),"regions read masks"),r.check(e.ls_regions_read_cells(t,h),"regions read cells");let d=new DataView(e.memory.buffer,c,a*88),u=new Uint8Array(e.memory.buffer,l,a*i*n),f=r.readBytes(h,o*4),p=new Uint32Array(f.buffer,f.byteOffset,o),g=m=>({x:d.getFloat64(m,!0),y:d.getFloat64(m+8,!0),width:d.getFloat64(m+16,!0),height:d.getFloat64(m+24,!0)}),y=[],w=0;for(let m=0;m<a;m++){let b=m*88,A=d.getUint32(b,!0)===1?"fixed":"moving",T=d.getUint32(b+4,!0),S=d.getUint32(b+8,!0),x=d.getUint32(b+12,!0)!==0,k=d.getUint32(b+16,!0),E=g(b+20),_=g(b+52),N=d.getUint32(b+84,!0)!==0,F=u.slice(m*i*n,(m+1)*i*n),L=x?Array.from(p.subarray(w,w+k)):void 0;w+=k;let B;x?k===0?B={id:`layer-${T}`,name:"\u56FA\u5B9A\u754C\u9762",kind:"fixed",rect:E,mask:F,maskWidth:i,maskHeight:n,cells:[],factor:s}:B={id:`layer-${T}`,name:A==="fixed"?"\u56FA\u5B9A\u754C\u9762":`\u5185\u5BB9\u753B\u5E03 ${T+1}`,kind:A,cells:L,rect:E,mask:F,maskWidth:i,maskHeight:n,factor:s}:B={id:`layer-${T}`,name:"\u56FA\u5B9A\u5206\u9694\u754C\u9762",kind:"fixed",rect:E,mask:F,maskWidth:i,maskHeight:n,factor:s},S>0&&(B.bandSide=S),B.crop=_,B.solid=N,y.push(B)}return y}finally{e.ls_regions_free(t)}}var Fu="\u672A\u6307\u5B9A\u533A\u57DF \xB7 \u5C4F\u5E55\u5750\u6807\u89C2\u5BDF";function Ii(r,e,t,i,n,s,a){let o=t.u32(),c=[];for(let h=0;h<o;h++){t.u32();let d=t.u32()===1,u=[];for(let f=t.u32(),p=0;p<f;p++)u.push({x:t.f64(),y:t.f64(),width:t.f64(),height:t.f64()});c.push({unassigned:d,exclusions:u})}let l=t.u32();if(!a.length)return Cc(r,e,l,i,n,s);try{let[h]=r.scratch([o*88]);r.check(e.ls_regions_read_headers(l,h),"regions read headers");let d=new DataView(r.readBytes(h,o*88).buffer),u=a.map((f,p)=>({...f,id:`layer-${p}`,manual:!0,maskWidth:i,maskHeight:n,factor:s,exclusions:c[p].exclusions}));for(let f=a.length;f<o;f++){let p=f*88+20;u.push({id:`layer-${f}`,name:Fu,kind:"fixed",rect:{x:d.getFloat64(p,!0),y:d.getFloat64(p+8,!0),width:d.getFloat64(p+16,!0),height:d.getFloat64(p+24,!0)},manual:!0,unassigned:c[f].unassigned,maskWidth:i,maskHeight:n,factor:s,exclusions:c[f].exclusions})}return u}finally{e.ls_regions_free(l)}}function Fi(r,e,t){if(!t.length)return 0;let[i]=r.scratch([t.length*40]),n=new DataView(e.memory.buffer,i,t.length*40);return t.forEach((s,a)=>{r.writeRect(i+a*40,s.rect),n.setUint32(a*40+32,s.kind==="moving"?0:s.kind==="fixed"?1:2,!0),n.setUint32(a*40+36,0,!0)}),i}var Bu=-2;function Rc(r,e,t,i,n){if(t.length>254)throw new Error("Too many regions for the pixel atlas.");let s=r.alloc(i*n);try{let a=[t.length*64];for(let f of t)a.push((f.exclusions?.length||0)*32,f.crop?32:0,f.mask&&!f.solid?f.mask.byteLength:0);a.push((t.length+1)*4);let o=r.scratch(a),c=o[0],l=o[o.length-1];t.forEach((f,p)=>{let[g,y,w]=o.slice(1+p*3,4+p*3);$e(e,c,p*64,f,g,y,w)});let h=e.ls_regions_label_atlas(c,t.length,i,n,s.ptr,l);if(h===Bu)throw new Error("Too many regions for the pixel atlas.");r.check(h,"regions label atlas");let d=r.readBytes(l,(t.length+1)*4),u=new Uint32Array(d.buffer,d.byteOffset,t.length+1);return{resident:s,counts:u}}catch(a){throw s.free(),a}}var bs=["split","evidence","activity","observations","rowFixed","rowMoving","rowChange","colChange","colMean","colGain","horizontalGain","nativeRowChange","nativeColChange","nativeColMean","colMoving"];if(bs.length!==15)throw new Error(`CORE_LAYOUT_MISMATCH: LEARNER_ARRAYS has ${bs.length} entries, expected ${15}.`);var Bi=class{core;exports;handle;width;height;freeGuard;constructor(e,t,i,n,s){this.core=e,this.exports=t,this.handle=i,this.width=n,this.height=s,this.freeGuard=new ee}add(e,t,i,n,s){let a=this.width*this.height,o=e.cols*e.rows;if(t.data.byteLength!==a||i.data.byteLength!==a)throw new Error("CORE_BAD_ARGUMENT: analysis frame size differs from the layer learner.");let c=n&&s&&n.width===s.width&&n.height===s.height?{width:n.width,height:n.height}:void 0,l=c?c.width*c.height*4:0,[h,d,u,f,p,g,y,w,m]=this.core.scratch([40,e.motions.length*32,o,o,o,a,a,c&&!(n instanceof Q)?l:0,c&&!(s instanceof Q)?l:0]),b=new DataView(this.exports.memory.buffer);e.motions.forEach((x,k)=>{let E=d+k*32;b.setFloat64(E,x.x,!0),b.setFloat64(E+8,x.y,!0),b.setUint32(E+16,x.support,!0),b.setUint32(E+20,0,!0),b.setFloat64(E+24,x.confidence,!0)}),this.core.writeBytes(u,e.labels),this.core.writeBytes(f,e.confidence),this.core.writeBytes(p,e.dynamic),this.core.writeBytes(g,t.data),this.core.writeBytes(y,i.data);let A=(x,k)=>!c||!x?0:x instanceof Q?x.ptr:(this.core.writeBytes(k,x.data),k),T=A(n,w),S=A(s,m);return b.setUint32(h,d,!0),b.setUint32(h+4,e.motions.length,!0),b.setUint32(h+8,u,!0),b.setUint32(h+12,f,!0),b.setUint32(h+16,p,!0),b.setUint32(h+20,e.cols,!0),b.setUint32(h+24,e.rows,!0),b.setUint32(h+28,e.unknown?1:0,!0),b.setFloat64(h+32,e.difference,!0),this.core.check(this.exports.ls_learner_add(this.handle,h,g,y,T,S,c?.width??0,c?.height??0),"learner add")===1}read(){let e={},t=n=>{let s=this.core.check(this.exports.ls_learner_len(this.handle,n),"learner length"),[a]=this.core.scratch([s*8]);return this.core.check(this.exports.ls_learner_read(this.handle,n,a),"learner read"),new Float64Array(this.core.readBytes(a,s*8).buffer)};bs.forEach((n,s)=>{let a=t(s);(a.length||s<11)&&(e[n]=a)});let i=t(15);return{...e,informativeFrames:i[0],nativeFrames:i[1]}}finish(e,t,i,n){let s=Fi(this.core,this.exports,i),a=this.core.check(this.exports.ls_learner_finish(this.handle,e,t,n,s,i.length),"learner finish"),o=Kt(this.core,a,(c,l)=>this.exports.ls_learner_take(this.handle,c,l),"learner finish result");return Ii(this.core,this.exports,o,this.width,this.height,n,i)}free(){this.freeGuard.once(()=>{this.exports.ls_learner_free(this.handle),this.handle=0})}};function Ic(r,e,t,i){let n=r.check(e.ls_learner_new(t,i),"layer learner");return new Bi(r,e,n,t,i)}var Di=class{core;exports;handle;regions;canvasIds;canvasSlots;boxes;grayBytes;grayPtr;peekBytes;freeGuard;constructor(e,t,i,n,s){this.core=e,this.exports=t,this.handle=i,this.regions=n,this.canvasIds=[],this.canvasSlots=new Map,this.freeGuard=new ee,this.grayBytes=s,this.grayPtr=It(t,s,"voting ring frame buffer"),this.peekBytes=16+4*n.length,this.boxes=n.map((a,o)=>{let[c]=e.scratch([16]);e.check(t.ls_voting_box(i,o,c),"voting box");let l=new DataView(t.memory.buffer,c,16);return{x0:l.getInt32(0,!0),y0:l.getInt32(4,!0),w:l.getInt32(8,!0),h:l.getInt32(12,!0)}})}interior(e){let t=this.boxes[e],[i]=this.core.scratch([t.w*t.h]);return this.core.check(this.exports.ls_voting_interior(this.handle,e,i),"voting interior"),this.core.readBytes(i,t.w*t.h)}canvasSlot(e){let t=this.canvasSlots.get(e);return t===void 0&&(t=this.canvasIds.push(e)-1,this.canvasSlots.set(e,t)),t}observe(e,t,i,n,s){if(n.data.byteLength!==this.grayBytes)throw new Error("CORE_BAD_ARGUMENT: analysis frame size differs from the voting ring.");s||this.core.writeBytes(this.grayPtr,n.data),this.core.check(this.exports.ls_voting_observe(this.handle,e,this.canvasSlot(t),i.x,i.y,this.grayPtr),"voting observe")}pushFrame(e){return this.core.check(this.exports.ls_voting_push(this.handle,e),"voting push"),this.collect()}drain(){return this.core.check(this.exports.ls_voting_drain(this.handle),"voting drain"),this.collect()}collect(){let e=[];for(;;){let[t]=this.core.scratch([this.peekBytes]),i=this.exports.ls_voting_peek(this.handle,t);if(i===-2)break;this.core.check(i,"voting peek");let n=new DataView(this.exports.memory.buffer,t,this.peekBytes),s=n.getUint32(0,!0),a=n.getUint32(8,!0),o=n.getUint32(12,!0),c=Array.from({length:i},(h,d)=>n.getUint32(16+d*4,!0)),l;for(let h=0;h<i;h++){let d=c[h],u=this.boxes[d],f=Math.ceil(u.w*u.h/8),[p,g]=this.core.scratch([f,f]);this.core.check(this.exports.ls_voting_read(this.handle,h,p,g),"voting read"),(l??={})[this.regions[d].id]={...u,bits:this.core.readBytes(p,f),clean:this.core.readBytes(g,f)}}this.exports.ls_voting_pop(this.handle),e.push({index:s,record:l,votedLayers:a,thinLayers:o})}return e}free(){this.freeGuard.once(()=>{this.exports.ls_voting_free(this.handle),this.exports.ls_free(this.grayPtr,this.grayBytes),this.handle=0})}};function Fc(r,e,t,i){let n=[t.length*64];for(let c of t)n.push((c.exclusions?.length||0)*32,c.crop?32:0,c.mask&&!c.solid?c.mask.byteLength:0);let s=r.scratch(n),a=s[0];t.forEach((c,l)=>{let[h,d,u]=s.slice(1+l*3,4+l*3);$e(e,a,l*64,c,h,d,u)});let o=r.check(e.ls_voting_new(i.factor,i.noise,i.nativeWidth,i.nativeHeight,i.analysisWidth,i.analysisHeight,i.budgetBytes,a,t.length),"voting ring");return new Di(r,e,o,t,i.analysisWidth*i.analysisHeight)}var Ou=["info","warning","error"];function gt(r){let e=[];for(let t=r.u32(),i=0;i<t;i++)e.push(Ur(r));return e}function Ur(r){{let e=r.str(),t=Ou[r.u32()],i=r.u32(),n=r.u32(),s=r.u32(),a=r.f64(),o={};for(let l=r.u32(),h=0;h<l;h++){let d=r.str();o[d]=r.f64()}let c={code:e,severity:t,...i?{frame:n}:{},...s?{time:a}:{},params:o};return r.u32()&&(c.canvasId=r.str()),r.u32()&&(c.confidence=r.f64()),r.u32()&&(c.region={x:r.f64(),y:r.f64(),width:r.f64(),height:r.f64()}),r.u32()&&(c.detail=xs(r)),c}}function xs(r){switch(r.u8()){case 0:return r.f64();case 1:return r.u8()!==0;case 2:return r.str();case 4:return Array.from({length:r.u32()},()=>xs(r));default:{let e={};for(let t=r.u32();t>0;t--){let i=r.str();e[i]=xs(r)}return e}}}var Lr=["learn","agree","relearn","write"],Mu=-2,As=class r{core;exports;handle;static registry=new FinalizationRegistry(({exports:e,handle:t})=>e.ls_reveal_free(t));freeGuard;token;constructor(e,t,i){this.core=e,this.exports=t,this.handle=i,this.freeGuard=new ee,this.token={},r.registry.register(this,{exports:t,handle:i},this.token)}memory(e,t){this.core.check(this.exports.ls_reveal_memory(this.handle,e?1:0,t),"reveal memory")}observation(e,t){let i=new se().u32(e).u32(t.length);for(let a of t){let o=a.placement,c=o.occlusions||[];i.str(a.canvasId??"").str(o.layer??"").f64(o.x).f64(o.y).bool(!!o.skip).bool(!!a.skipped).u32(c.length);for(let l of c)i.f64(l.x).f64(l.y).f64(l.width).f64(l.height)}let[n,s]=i.place(this.core);this.core.check(this.exports.ls_reveal_observation(this.handle,n,s),"reveal observation")}frameBuffer(){let e=this.exports.ls_reveal_frame(this.handle);if(!e)throw new Error("CORE_BAD_ARGUMENT: reveal frame buffer.");return e}push(e,t){this.core.check(this.exports.ls_reveal_push(this.handle,e,t?.ptr||0,t?.length||0),"reveal frame")}end(e){this.core.check(this.exports.ls_reveal_end(this.handle,e?.ptr||0,e?.length||0),"reveal end")}step(e,t){let i=this.exports.ls_reveal_step(this.handle,e.handle,t);if(i===Mu)throw new Error("CORE_BAD_ARGUMENT: reveal stepped before the tile it asked for was brought in.");this.core.check(i,"reveal step");let[n]=this.core.scratch([i]);this.core.check(this.exports.ls_reveal_take(this.handle,n,i),"reveal step result");let s=new ge(this.core.readBytes(n,i));switch(s.u8()){case 0:return{kind:"memory",bytes:s.f64(),stage:s.u8()===0?"canvases":"fallback"};case 1:return{kind:"observations"};case 2:return{kind:"tile",canvas:s.str(),level:s.u32(),x:s.i32(),y:s.i32()};case 3:return{kind:"checkpoint"};case 4:return{kind:"decode",pass:Lr[s.u8()],wanted:s.take(s.u32())};case 5:return{kind:"nextFrame"};case 6:return{kind:"passDone",pass:Lr[s.u8()]};case 7:{let a=s.str(),o=s.i32(),c=s.i32(),l=s.u32(),h=s.u32(),d=new Int32Array(s.take(l*h*4).slice().buffer);return{kind:"provenance",canvas:a,provenance:{gx:o,gy:c,bw:l,bh:h,source:d}}}case 8:return{kind:"nothing"};case 9:return{kind:"skipped",diagnostic:Ur(s)};default:return{kind:"revealed",summary:{objects:s.u32(),components:s.u32(),coherentBlocks:s.u32(),componentBlocks:s.u32(),provisionalBlocks:s.u32(),fallbackBlocks:s.u32()}}}}free(){this.freeGuard.once(()=>{r.registry.unregister(this.token),this.exports.ls_reveal_free(this.handle)})}};function Bc(r,e,t){let i=new se().u32(t.width).u32(t.height).f64(t.noise).u32(t.tileSize).u32(t.frames).u32(t.layers.length);for(let a of t.layers)i.str(a.id).f64(a.rect.x).f64(a.rect.y).f64(a.rect.width).f64(a.rect.height).u32(a.code);i.u32(t.canvases.length);for(let a of t.canvases)i.str(a.id).f64(a.bounds.x).f64(a.bounds.y).f64(a.bounds.width).f64(a.bounds.height);let[n,s]=i.place(r);return new As(r,e,r.check(e.ls_reveal_new(n,s),"reveal session"))}function Dc(r,e){let t=r.u32(),i=r.u32(),n=r.u32(),s=r.u32(),a=r.f64(),o=r.u32(),c=r.u32()===1,l=r.f64(),h=r.take(s*48),d=new DataView(h.buffer),u=[];for(let w=0;w<s;w++){let m=w*48;u.push({x:d.getFloat64(m,!0),y:d.getFloat64(m+8,!0),support:d.getUint32(m+16,!0),unique:d.getUint32(m+20,!0),confidence:d.getFloat64(m+24,!0),error:d.getFloat64(m+32,!0),ambiguous:d.getUint32(m+40,!0)===1})}let f=t*i,p=r.take(f),g=r.take(f),y=r.take(f);return e?{motions:u,labels:p,confidence:g,dynamic:y,cols:t,rows:i,cell:n,difference:a,featureCount:o,unknown:c,zoom:l}:{cols:t,rows:i,cell:n,motions:u,difference:a,featureCount:o,unknown:c,zoom:l,labels:p,confidence:g,dynamic:y}}var ks=class{core;exports;handle;width;height;factor;freeGuard;analysisWidth;analysisHeight;constructor(e,t,i,n,s,a){this.core=e,this.exports=t,this.handle=i,this.width=n,this.height=s,this.factor=a,this.freeGuard=new ee,this.analysisWidth=Math.max(1,Math.ceil(n/a)),this.analysisHeight=Math.max(1,Math.ceil(s/a))}write(e){if(e.width!==this.width||e.height!==this.height)throw new Error(`CORE_BAD_ARGUMENT: frame ${e.width}\xD7${e.height} does not fit a ${this.width}\xD7${this.height} scan.`);let t=this.exports.ls_scan_frame(this.handle);if(!t)throw new Error("CORE_BAD_ARGUMENT: scan frame buffer.");new Uint8Array(this.exports.memory.buffer).set(new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength),t)}isDuplicate(){return this.core.check(this.exports.ls_scan_is_duplicate(this.handle),"scan duplicate")===1}push(e,t,i,n){let s=0;n&&([s]=this.core.scratch([n.data.byteLength]),this.core.writeBytes(s,n.data));let a=this.core.check(this.exports.ls_scan_push(this.handle,e,t,i,s,n?n.data.byteLength:0),"scan step"),o=this.result(a,"scan step result"),c=o.u32(),l=(c&1)!==0,h=Dc(o,(c&4)!==0),d;if(c&8){let u=o.u32();d={xy:new Int16Array(o.take(u*4).buffer),score:new Float32Array(o.take(u*4).buffer),descriptors:new Uint32Array(o.take(u*32).buffer)}}return{record:{index:e,time:t,duration:i,field:h,duplicate:l},features:d,first:(c&2)!==0,diagnostics:gt(o)}}finish(e){let t=Fi(this.core,this.exports,e),i=this.core.check(this.exports.ls_scan_finish(this.handle,t,e.length),"scan finish"),n=this.result(i,"scan finish result"),s=gt(n);return{regions:Ii(this.core,this.exports,n,this.analysisWidth,this.analysisHeight,this.factor,e),diagnostics:s}}result(e,t){return Kt(this.core,e,(i,n)=>this.exports.ls_scan_take(this.handle,i,n),t)}free(){this.freeGuard.once(()=>{this.exports.ls_scan_free(this.handle),this.handle=0})}};function Oc(r,e,t,i,n){let s=r.check(e.ls_scan_new(t,i,n),"scan session");return new ks(r,e,s,t,i,n)}function Mc(r,e,t,i,n,s){if(t.width!==i.width||t.height!==i.height)throw new Error("FRAME_GEOMETRY_CHANGED");let a=40+8*48+3*Math.ceil(t.width/24)*Math.ceil(t.height/24),[o,c,l,h,d]=r.scratch([t.data.byteLength,i.data.byteLength,(n?.length??0)*r.featureBytes,(s?.length??0)*r.featureBytes,a]);r.writeBytes(o,t.data),r.writeBytes(c,i.data),n&&fe(r,l,n),s&&fe(r,h,s);let u=r.check(e.ls_scan_estimate_motion(o,c,t.width,t.height,l,n?.length??0,h,s?.length??0,(n?1:0)|(s?2:0),d),"estimateMotion");return Dc(new ge(r.readBytes(d,u)),!1)}var Nc={[-2]:"Pose graph references a missing previous node.",[-3]:"Pose graph references a missing node.",[-4]:"Missing pose for frame rendering."};function Nu(r,e){r.str(e.id).str(e.canvasId).u32(e.frame).f64(e.x).f64(e.y).f64(e.originalX).f64(e.originalY).bool(e.pinned).bool(e.next!==void 0),e.next!==void 0&&r.str(e.next)}function Uu(r,e){r.str(e.other).f64(e.dx).f64(e.dy).f64(e.weight).u8(e.kind==="loop"?1:0)}function Ss(r){let e={id:r.str(),canvasId:r.str(),frame:r.u32(),x:r.f64(),y:r.f64(),originalX:r.f64(),originalY:r.f64(),pinned:r.bool(),edges:[]};return r.bool()&&(e.next=r.str()),e}function Xt(r){let e=[];for(let t=r.u32();t>0;t--){let i=r.bool(),n=[];for(let s=r.u32();s>0;s--)if(r.u8()===0){let a=Ss(r);n.push({key:`node/${a.id}`,value:a})}else{let a=r.str(),o={other:r.str(),dx:r.f64(),dy:r.f64(),weight:r.f64(),kind:r.u8()===1?"loop":"odometry"};n.push({key:`edge/${a}/${o.other}/${o.kind}`,value:o})}e.push({many:i,rows:n})}return e}var zr=class r{core;exports;handle;static registry=new FinalizationRegistry(({exports:e,handle:t})=>e.ls_pose_graph_free(t));freeGuard;token;constructor(e,t,i){this.core=e,this.exports=t,this.handle=i,this.freeGuard=new ee,this.token={},r.registry.register(this,{exports:t,handle:i},this.token)}check(e,t){if(e<-1&&Nc[e])throw new Error(Nc[e]);return this.core.check(e,t)}call(e,t,i){let[n,s]=i.place(this.core),a=this.check(t(n,s),e),[o]=this.core.scratch([a]);return this.check(this.exports.ls_pose_graph_take(this.handle,o,a),`${e} result`),new ge(this.core.readBytes(o,a))}hydrate(e){let t=new se().u32(e.length);for(let s of e)s.node?Nu(t.u8(0),s.node):Uu(t.u8(1).str(s.edge.key),s.edge.value);let[i,n]=t.place(this.core);this.check(this.exports.ls_pose_graph_hydrate(this.handle,i,n),"pose graph hydrate")}add(e,t,i,n,s){let a=new se().str(e).u32(t).f64(i.x).f64(i.y).f64(s).bool(n!==void 0);n!==void 0&&a.str(n);let o=this.call("pose graph add",(c,l)=>this.exports.ls_pose_graph_add(this.handle,c,l),a);return{node:Ss(o),writes:Xt(o)}}connect(e,t,i,n,s,a){let o=new se().str(e).str(t).f64(i).f64(n).f64(s).u8(a==="loop"?1:0);return Xt(this.call("pose graph connect",(c,l)=>this.exports.ls_pose_graph_connect(this.handle,c,l),o))}unpin(e){let t=new se().str(e);return Xt(this.call("pose graph unpin",(i,n)=>this.exports.ls_pose_graph_unpin(this.handle,i,n),t))}get(e){let t=this.call("pose graph get",(i,n)=>this.exports.ls_pose_graph_get(this.handle,i,n),new se().str(e));return t.done?void 0:Ss(t)}correction(e,t){let[i,n,s]=new se().str(e).place(this.core,[16]);this.check(this.exports.ls_pose_graph_correction(this.handle,i,n,t,s),"pose graph correction");let a=new DataView(this.exports.memory.buffer,s,16);return{x:a.getFloat64(0,!0),y:a.getFloat64(8,!0)}}get loops(){return this.check(this.exports.ls_pose_graph_loops(this.handle),"pose graph loops")}optimizeBegin(){return this.check(this.exports.ls_pose_graph_optimize_begin(this.handle),"pose graph optimize")===1}optimizeStep(e){return this.check(this.exports.ls_pose_graph_optimize_step(this.handle,e),"pose graph optimize step")===1}optimizeFinish(){let e=this.check(this.exports.ls_pose_graph_optimize_finish(this.handle),"pose graph optimize finish"),[t]=this.core.scratch([e]);this.check(this.exports.ls_pose_graph_take(this.handle,t,e),"pose graph optimize result");let i=new ge(this.core.readBytes(t,e));return{residual:i.f64(),iterations:i.u32(),writes:Xt(i)}}optimizeCancel(){this.exports.ls_pose_graph_optimize_cancel(this.handle)}free(){this.freeGuard.once(()=>{r.registry.unregister(this.token),this.exports.ls_pose_graph_free(this.handle)})}};function Uc(r,e){return new zr(r,e,r.check(e.ls_pose_graph_new(),"pose graph new"))}var Ts=class r{core;exports;handle;static registry=new FinalizationRegistry(({exports:e,handle:t})=>e.ls_keyframe_index_free(t));freeGuard;token;constructor(e,t,i){this.core=e,this.exports=t,this.handle=i,this.freeGuard=new ee,this.token={},r.registry.register(this,{exports:t,handle:i},this.token)}place(e,t){let[i,n,s]=e.place(this.core,[t.length*this.core.featureBytes]);return fe(this.core,s,t),[i,n,s]}add(e,t,i,n){let[s,a,o]=this.place(new se().str(e).str(t).u32(i),n);this.core.check(this.exports.ls_keyframe_index_add(this.handle,s,a,o,n.length),"keyframe index add")}retrieve(e,t,i,n,s){let a=new se().str(e).u32(t).bool(n!==void 0);n!==void 0&&a.str(n),a.bool(s!==void 0),s!==void 0&&a.u32(s);let[o,c,l]=this.place(a,i),h=this.core.check(this.exports.ls_keyframe_index_retrieve(this.handle,o,c,l,i.length),"keyframe index retrieve"),[d]=this.core.scratch([h]);this.core.check(this.exports.ls_keyframe_index_take(this.handle,d,h),"keyframe index result");let u=new ge(this.core.readBytes(d,h)),f=u.bool(),p=[];for(let g=u.u32();g>0;g--)p.push(u.str());return{candidates:p,budgetWarning:f}}admits(e){return this.core.check(this.exports.ls_keyframe_index_admits(this.handle,e),"keyframe index admits")===1}free(){this.freeGuard.once(()=>{r.registry.unregister(this.token),this.exports.ls_keyframe_index_free(this.handle)})}};function Lc(r,e){return new Ts(r,e,r.check(e.ls_keyframe_index_new(),"keyframe index new"))}var zc={[-2]:"Pose graph references a missing previous node.",[-3]:"Pose graph references a missing node.",[-4]:"Missing pose for frame rendering."};function Lu(r){return{x:r.f64(),y:r.f64(),width:r.f64(),height:r.f64()}}function Hc(r){let e=[];for(let t=r.u32();t>0;t--){let i=r.str(),n=r.str(),s=r.str(),a=r.f64(),o=r.f64(),c=r.f64(),l=r.bool(),h=r.f64(),d=r.bool(),u=[];for(let f=r.u32();f>0;f--)u.push(Lu(r));e.push({layer:i,canvasId:n,node:s,x:a,y:o,confidence:c,uncertain:l,time:h,...d?{skip:!0}:{},...u.length?{occlusions:u}:{}})}return e}function Wc(r){let e=[];for(let t=r.u32();t>0;t--){let i=r.u32(),n=r.u32(),s=r.u32(),a;for(let o=r.u32();o>0;o--){let c=r.str();(a??={})[c]={x0:r.i32(),y0:r.i32(),w:r.i32(),h:r.i32(),bits:r.blob(),clean:r.blob()}}e.push({index:i,record:a,votedLayers:n,thinLayers:s})}return e}function Vc(r){if(r.u8()===0){let i=[];for(let n=r.u32();n>0;n--)i.push(r.str());return{keyframes:i}}let e=Hc(r),t=r.bool();return{placements:e,joinedRing:t,voting:Wc(r)}}function zu(r){let e=r.i32(),t=r.i32(),i=r.f64(),n=new Uint32Array(8);for(let s=0;s<8;s++)n[s]=r.u32();return{x:e,y:t,score:i,descriptor:n}}function Vu(r,e){r.i32(e.x).i32(e.y).f64(e.score);for(let t=0;t<8;t++)r.u32(e.descriptor[t])}function Hu(r){let e=r.str(),t=r.str(),i=r.str(),n=r.str(),s=r.u32(),a=[];for(let g=r.u32();g>0;g--)a.push(zu(r));let o=r.u32(),c=r.u32(),l={width:o,height:c,data:r.blob()},h=r.f64(),d=r.f64(),u=r.f64(),f=r.f64(),p=[];for(let g=r.u32();g>0;g--)p.push({x:r.f64(),y:r.f64(),size:r.u32(),data:r.blob()});return{id:e,node:t,canvasId:i,layer:n,frame:s,features:a,gray:l,x:h,y:d,scaleX:u,scaleY:f,patches:p}}function Wu(r,e){r.str(e.id).str(e.node).str(e.canvasId).str(e.layer).u32(e.frame).u32(e.features.length);for(let t of e.features)Vu(r,t);r.u32(e.gray.width).u32(e.gray.height).blob(e.gray.data).f64(e.x).f64(e.y).f64(e.scaleX).f64(e.scaleY).u32(e.patches.length);for(let t of e.patches)r.f64(t.x).f64(t.y).u32(t.size).blob(t.data)}function Gu(r){return{id:r.str(),target:r.str(),dx:r.f64(),dy:r.f64(),frame:r.u32(),confidence:r.f64(),node:r.str()}}function $u(r){switch(r.u8()){case 0:{let e=r.bool(),t={id:r.str(),layer:r.str(),name:r.str(),kind:r.str(),bounds:{x:0,y:0,width:0,height:0},tileCount:0,observedPixels:0,uncertainPixels:0,conflictPixels:0,provisionalPixels:0,maxLevel:0,fragment:r.u32(),firstTime:r.f64(),lastTime:r.f64()};return r.bool()&&(t.attachedTo=r.str()),{kind:"canvas",meta:t,created:e}}case 1:return{kind:"attach",attachment:Gu(r)};case 2:return{kind:"keyframe",keyframe:Hu(r)};case 3:return{kind:"graph",write:Xt(r)[0]};default:return{kind:"diagnostic",diagnostic:Ur(r)}}}var Es=class{core;exports;handle;width;height;freeGuard;constructor(e,t,i,n,s){this.core=e,this.exports=t,this.handle=i,this.width=n,this.height=s,this.freeGuard=new ee}result(e,t){if(e<-1&&zc[e])throw new Error(zc[e]);this.core.check(e,t);let[i]=this.core.scratch([e]);return this.core.check(this.exports.ls_solve_take(this.handle,i,e),`${t} result`),new ge(this.core.readBytes(i,e))}begin(e,t,i){let n=this.result(this.exports.ls_solve_begin(this.handle,e,t,i.duplicate?1:0,i.field.zoom,i.field.difference),"solve begin");return n.u8()===0?{duplicate:Hc(n)}:{gray:n.bool()}}frame(){return new Q(this.exports,this.exports.ls_solve_frame(this.handle),this.width,this.height)}run(e,t,i){let n=t?.score.length??0,[s,a]=this.core.scratch([e?.data.byteLength??0,t?n*40:0]);return e&&this.core.writeBytes(s,e.data),t&&(this.core.writeBytes(a,t.xy.subarray(0,n*2)),this.core.writeBytes(a+n*4,t.score.subarray(0,n)),this.core.writeBytes(a+n*8,t.descriptors.subarray(0,n*8))),Vc(this.result(this.exports.ls_solve_run(this.handle,e?s:0,e?.data.byteLength??0,t?a:0,n,i.ptr),"solve run"))}provide(e,t){let i=new se().u32(e.length);for(let a of e)i.bool(a!==void 0),a&&Wu(i,a);let[n,s]=i.place(this.core);return Vc(this.result(this.exports.ls_solve_provide(this.handle,n,s,t.ptr),"solve provide"))}effects(){let e=this.result(this.exports.ls_solve_effects(this.handle),"solve effects"),t=[];for(let i=e.u32();i>0;i--)t.push($u(e));return t}drain(){return Wc(this.result(this.exports.ls_solve_drain(this.handle),"solve drain"))}takeGraph(){return new zr(this.core,this.exports,this.core.check(this.exports.ls_solve_take_graph(this.handle),"solve graph"))}free(){this.freeGuard.once(()=>{this.exports.ls_solve_free(this.handle),this.handle=0})}};function Gc(r,e,t){let{width:i,height:n,factor:s,radius:a,noise:o,regions:c}=t,l=new se().u32(i).u32(n).u32(s).i32(a).f64(o).u32(c.length);for(let{region:y,code:w}of c)l.str(y.id).str(y.name).str(y.kind).bool(y.kind==="moving").bool(!!y.unassigned).u8(w);let h=[c.length*64];for(let{region:y}of c)h.push((y.exclusions?.length||0)*32,y.crop?32:0,y.mask&&!y.solid?y.mask.byteLength:0);let[d,u,f,...p]=l.place(r,h);c.forEach(({region:y},w)=>{let[m,b,A]=p.slice(w*3,w*3+3);$e(e,f,w*64,y,m,b,A)});let g=r.check(e.ls_solve_new(d,u,f),"solve session");return new Es(r,e,g,i,n)}var qu={moving:0,fixed:1,ignore:2};function _s(r,e){return r.f64(e.x).f64(e.y).f64(e.width).f64(e.height)}function Kc(r){return{x:r.f64(),y:r.f64(),width:r.f64(),height:r.f64()}}function ju(r,e){if(r.str(e.layer).str(e.canvasId).str(e.node).f64(e.x).f64(e.y).f64(e.confidence).bool(!!e.uncertain).f64(e.time),r.u8(e.skip===void 0?0:e.skip?2:1).bool(e.occlusions!==void 0),e.occlusions){r.u32(e.occlusions.length);for(let t of e.occlusions)_s(r,t)}}function Ku(r){let e={layer:r.str(),canvasId:r.str(),node:r.str(),x:r.f64(),y:r.f64(),confidence:r.f64(),uncertain:r.bool(),time:r.f64()},t=r.u8();return t&&(e.skip=t===2),r.bool()&&(e.occlusions=Array.from({length:r.u32()},()=>Kc(r))),e}function Yc(r,e){r.bool(!!e.duplicate).u32(e.placements.length);for(let t of e.placements)ju(r,t)}function $c(r,e){r.bool(e!==void 0),e&&Yc(r,e)}function qc(r,e){r.u32(e.length).raw(e)}function jc(r){return{bounds:Kc(r),tileCount:r.f64(),observedPixels:r.f64(),uncertainPixels:r.f64(),conflictPixels:r.f64(),provisionalPixels:r.f64(),lastTime:r.f64()}}function Yu(r,e){_s(r,e.bounds).f64(e.tileCount).f64(e.observedPixels).f64(e.uncertainPixels).f64(e.conflictPixels).f64(e.provisionalPixels).f64(e.lastTime)}function Qu(r){let e={canvasId:r.str(),placement:Ku(r),addedPixels:r.f64(),conflictPixels:r.f64(),uncertainPixels:r.f64()};return r.bool()&&(e.skipped=!0),r.bool()&&(e.reusedExactObservation=!0),e}var vs=class{core;exports;handle;freeGuard;constructor(e,t,i){this.core=e,this.exports=t,this.handle=i,this.freeGuard=new ee}result(e,t){return this.core.check(e,t),Kt(this.core,e,(i,n)=>this.exports.ls_render_take(this.handle,i,n),`${t} result`)}configureTiles(e,t){return gt(this.result(this.exports.ls_render_configure_tiles(this.handle,e.handle,t),"renderConfigureTiles"))[0]}wantedVotes(e,t,i){let n=this.result(this.exports.ls_render_wanted_votes(this.handle,e,t?1:0,i?1:0),"renderWantedVotes");return Array.from({length:n.u32()},()=>n.f64())}begin(e){let t=new se().u32(e.index).f64(e.time);Yc(t,e.plan),$c(t.bool(e.hasPrev),e.prevPlan),$c(t.bool(e.hasNext),e.nextPlan),t.u32(e.votes.length);for(let{index:s,record:a}of e.votes){if(t.f64(s).bool(a!==void 0),!a)continue;let o=Object.entries(a);t.u32(o.length);for(let[c,l]of o)t.str(c).u32(l.x0).u32(l.y0).u32(l.w).u32(l.h),qc(t,l.bits),qc(t,l.clean)}let[i,n]=t.place(this.core);this.core.check(this.exports.ls_render_begin(this.handle,i,n),"renderBegin")}step(e,t,i,n,s){let a=this.exports.ls_render_step(this.handle,e.handle,t.handle,i.handle,n.ptr,n.length,s),o=this.result(a,"renderStep"),c=gt(o),l={skippedPaints:o.f64(),tiles:o.f64(),observedPixels:o.f64()},h=o.u8(),d;if(h===0){let u={frame:o.u32(),time:o.f64(),decisions:[]},f=o.u32();for(let p=0;p<f;p++)u.decisions.push(Qu(o));d={kind:"done",observation:u,latest:o.bool()?o.str():void 0}}else if(h===1)d={kind:"meta",canvas:o.str()};else if(h===2)d={kind:"frame",index:o.u32()};else if(h===3){let u=o.str(),f=o.u32()|0,p=o.u32()|0;d={kind:"tile",canvas:u,x:f,y:p}}else h===4?d={kind:"temporal",canvas:o.str()}:d={kind:"error",message:o.str()};return{events:c,counters:l,need:d}}provideMeta(e,t){let i=new se().str(e).bool(t!==void 0);t&&Yu(i,t);let[n,s]=i.place(this.core);this.core.check(this.exports.ls_render_provide_meta(this.handle,n,s),"renderProvideMeta")}provideFrame(e,t){let[i]=this.core.scratch([4]);this.core.check(this.exports.ls_render_frame_slot(this.handle,e,i),"renderFrameSlot");let n=new DataView(this.exports.memory.buffer).getUint32(i,!0);this.core.writeBytes(n,new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}cancel(e){this.exports.ls_render_cancel(this.handle,e.handle)}meta(e){let[t,i]=new se().str(e).place(this.core),n=this.result(this.exports.ls_render_meta(this.handle,t,i),"renderMeta");return n.bool()?jc(n):void 0}dirtyMetas(){let e=this.result(this.exports.ls_render_dirty_metas(this.handle),"renderDirtyMetas");return Array.from({length:e.u32()},()=>({canvas:e.str(),meta:jc(e)}))}free(){this.freeGuard.once(()=>this.exports.ls_render_free(this.handle))}};function Qc(r,e,t){let i=new se().u32(t.width).u32(t.height).u32(t.factor).f64(t.noise).u32(t.regions.length);for(let a of t.regions)_s(i.str(a.id).u8(qu[a.kind]),a.rect).u8(a.code).f64(a.ownedPixels);i.u32(t.attachments.length);for(let a of t.attachments)i.str(a.id).str(a.target).f64(a.dx).f64(a.dy).f64(a.frame).f64(a.confidence).str(a.node);let[n,s]=i.place(r);return new vs(r,e,r.check(e.ls_render_new(n,s),"renderNew"))}function Xu(r,e){r.setFloat64(0,e.pane.x,!0),r.setFloat64(8,e.pane.y,!0),r.setFloat64(16,e.pane.width,!0),r.setFloat64(24,e.pane.height,!0),r.setFloat64(32,e.content.x,!0),r.setFloat64(40,e.content.y,!0),r.setFloat64(48,e.content.width,!0),r.setFloat64(56,e.content.height,!0),r.setFloat64(64,e.dx,!0),r.setFloat64(72,e.dy,!0),r.setFloat64(80,e.seamX,!0),r.setFloat64(88,e.width,!0),r.setFloat64(96,e.height,!0)}function Zu(r){return{pane:{x:r.getFloat64(0,!0),y:r.getFloat64(8,!0),width:r.getFloat64(16,!0),height:r.getFloat64(24,!0)},content:{x:r.getFloat64(32,!0),y:r.getFloat64(40,!0),width:r.getFloat64(48,!0),height:r.getFloat64(56,!0)},dx:r.getFloat64(64,!0),dy:r.getFloat64(72,!0),seamX:r.getFloat64(80,!0),width:r.getFloat64(88,!0),height:r.getFloat64(96,!0)}}function Zc(r,e,t,i,n,s){let[a,o]=r.scratch([32,104]);return r.writeRect(a,i),r.check(e.ls_frame_layout(t.width,t.height,a,n,s,o),"frameLayout"),Zu(new DataView(e.memory.buffer,o,104))}function Jc(r,e,t,i,n){let[s,a]=r.scratch([104,16]);Xu(new DataView(e.memory.buffer,s,104),t);let o=r.check(e.ls_frame_coordinate(s,i,n,a),"frameCoordinate");if(o===0)return null;if(o===1)return;let c=new DataView(e.memory.buffer,a,16);return{x:c.getFloat64(0,!0),y:c.getFloat64(8,!0)}}function Ju(r,e,t){if(!t.length)return{ptr:0,count:0,residents:[]};let i=[];try{let n=a=>{if(!a)return 0;let o=r.alloc(a);return i.push(o),o.ptr},s=r.alloc(t.length*64);return i.push(s),t.forEach((a,o)=>{let c=n((a.exclusions?.length||0)*32),l=n(a.crop?32:0),h=n(a.mask&&!a.solid?a.mask.byteLength:0);$e(e,s.ptr,o*64,a,c,l,h)}),{ptr:s.ptr,count:t.length,residents:i}}catch(n){for(let s of i)s.free();throw n}}var ef=-2,Xc=80,tf=[Uint8ClampedArray,Uint8Array,Uint8Array,Uint8Array,Uint8Array,Uint32Array,Float32Array,Uint8Array],Cs=class r{core;exports;handle;static registry=new FinalizationRegistry(({exports:e,handle:t})=>e.ls_framing_free(t));freeGuard;token;constructor(e,t,i){this.core=e,this.exports=t,this.handle=i,this.freeGuard=new ee,this.token={},r.registry.register(this,{exports:t,handle:i},this.token)}reference(e){if(!e){this.core.check(this.exports.ls_framing_reference(this.handle,0,0,0,0),"framing reference");return}let{frame:t,image:i}=e,n=this.core.upload(i.data);try{this.core.check(this.exports.ls_framing_reference(this.handle,t,n.ptr,i.width,i.height),"framing reference")}finally{n.free()}}index(e,t,i){this.core.check(this.exports.ls_framing_index(this.handle,e,t,i),"framing index")}step(e,t){let i=this.exports.ls_framing_step(this.handle,e.handle,t);if(i===ef)throw new Error("CORE_BAD_ARGUMENT: framing stepped before the tile it asked for was brought in.");this.core.check(i,"framing step");let[n]=this.core.scratch([i]);this.core.check(this.exports.ls_framing_take(this.handle,n,i),"framing step result");let s=new ge(this.core.readBytes(n,i)),a=s.u8(),o=()=>({canvas:s.str(),level:s.u32(),x:s.u32()|0,y:s.u32()|0});switch(a){case 0:return{kind:"reference"};case 1:return{kind:"index"};case 2:return{kind:"next"};case 3:return{kind:"tile",...o()};case 4:return{kind:"save",id:s.u32()};case 5:{let{canvas:c,level:l,x:h,y:d}=o(),u=s.bool(),f=s.f64();return{kind:"saveDetached",tile:this.detached(c,l,h,d,u,f)}}case 6:return{kind:"unframed"};case 7:return{kind:"skipped",diagnostics:gt(s)};default:{let c=s.str(),l=s.f64(),h=s.f64(),d={x:s.f64(),y:s.f64(),width:s.f64(),height:s.f64()},u=s.u32(),f={x:s.f64(),y:s.f64()};return{kind:"framed",canvas:{id:c,width:l,height:h,sourceRegion:d,referenceFrame:u,offset:f,tileCount:s.f64(),observedPixels:s.f64(),provisionalPixels:s.f64()}}}}}detached(e,t,i,n,s,a){let[o]=this.core.scratch([Xc]);this.core.check(this.exports.ls_framing_detached(this.handle,o),"framing detached tile");let c=new DataView(this.exports.memory.buffer,o,Xc),l=tf.map((d,u)=>{let f=c.getUint32(u*8,!0),p=c.getUint32(u*8+4,!0);return new d(new Uint8Array(this.exports.memory.buffer,f,p).slice().buffer)}),h=c.getUint32(64,!0)!==0;return{canvasId:e,level:t,x:i,y:n,pixels:l[0],coverage:l[1],provisional:l[2],quality:l[3],conflicts:l[4],owner:l[5],score:l[6],frozen:l[7],dirty:h,existed:s,...Number.isNaN(a)?{}:{touched:a}}}free(){this.freeGuard.once(()=>{r.registry.unregister(this.token),this.exports.ls_framing_free(this.handle)})}};function el(r,e,t,i,n,s,a){let o=new se().str(t.id).f64(t.bounds.x).f64(t.bounds.y).f64(t.bounds.width).f64(t.bounds.height).f64(t.tileCount).bool(t.attached).f64(i.x).f64(i.y).f64(i.width).f64(i.height).u32(s).u32(a),c=Ju(r,e,n);try{let[l,h]=o.place(r),d=r.check(e.ls_framing_new(l,h,c.ptr,c.count),"framing session");return new Cs(r,e,d)}finally{for(let l of c.residents)l.free()}}var rf=["tracked","static","lost"],tl=104;function rl(r,e,t){let{f:i,radius:n,mask:s,roi:a,rect:o,region:c,image:l,previous:h,current:d,previousGray:u,g:f,velocity:p,previousFeatures:g,ownFeatures:y,confidence:w}=t,m=Za=>Za instanceof Q?0:Za.data.byteLength,b=r.scratch([m(h),m(d),u.data.byteLength,f.data.byteLength,g.length*r.featureBytes,y.length*r.featureBytes,32,32,64,(c.exclusions?.length||0)*32,c.crop?32:0,c.mask&&!c.solid?c.mask.byteLength:0,s?s.labels.byteLength:0,tl]),[A,T,S,x,k,E,_,N,F,L,B,I,v,M]=b,z=r.placeFrame(h,A),U=r.placeFrame(d,T);r.writeBytes(S,u.data),r.writeBytes(x,f.data),fe(r,k,g),fe(r,E,y),r.writeRect(_,a),r.writeRect(N,o),il(r,F,L,B,I,c);let j=0;s&&(r.writeBytes(v,s.labels),j=v);let $=e.ls_track_odometry(z,U,l.width,l.height,S,x,u.width,u.height,k,g.length,E,y.length,_,N,F,j,s?.code??0,i,n,p.x,p.y,w,M);if($===-1)throw new Error("CORE_BAD_ARGUMENT: odometry.");let Z=r.readBytes(M,tl),J=new DataView(Z.buffer),We=J.getUint32(40,!0)===1,Rt=rf[$],Je=J.getUint32(24,!0)===1,Kn=J.getUint32(28,!0)===1,Ph=J.getFloat64(32,!0);return{decision:Rt,delta:{x:J.getFloat64(0,!0),y:J.getFloat64(8,!0)},confidence:J.getFloat64(16,!0),ambiguous:Je,weakStep:Kn,stepError:Ph,...We?{contentChange:{agreement:J.getFloat64(48,!0),blocks:J.getUint32(56,!0)}}:{}}}function al(r,e,t){let{anchorFeatures:i,ownFeatures:n,anchorPatches:s,current:a,nativePlane:o,nativeFilled:c,native:l,rect:h,f:d,radius:u}=t,f=Hr(a,o,l),p=r.scratch([i.length*r.featureBytes,n.length*r.featureBytes,s.length*16,32,f.scratchBytes,sl,...s.map(F=>F.data.byteLength)]),[g,y,w,m,b,A]=p,T=p.slice(6);fe(r,g,i),fe(r,y,n),Vr(r,w,T,s),r.writeRect(m,h),f.mode===0&&r.writeBytes(b,f.fallback.data);let S=e.ls_track_reacquire(g,i.length,y,n.length,w,s.length,m,d,u,f.mode,f.mode===0?b:f.ptr,f.currentFramePtr,Rs(c||f.alreadyFilled),f.width,f.height,A);if(S===-1)throw new Error("CORE_BAD_ARGUMENT: reacquire.");let x=r.readBytes(A,sl),k=new DataView(x.buffer),E=k.getUint32(36,!0)===1;if(S===0)return{result:void 0,filledNative:E};let _=k.getUint32(8,!0)===1,N=k.getFloat64(24,!0);return{result:{n:{x:k.getInt32(0,!0),y:k.getInt32(4,!0),error:N,samples:0,runnerUp:0},ambiguous:_,confidence:k.getFloat64(16,!0)},filledNative:E}}var sl=40;function ol(r,e,t){let{anchor:i,pose:n,current:s,nativePlane:a,nativeFilled:o,native:c,rect:l,radius:h}=t,d=Hr(s,a,c),u=r.scratch([i.patches.length*16,32,d.scratchBytes,40,...i.patches.map(S=>S.data.byteLength)]),[f,p,g,y]=u,w=u.slice(4);Vr(r,f,w,i.patches),r.writeRect(p,l),d.mode===0&&r.writeBytes(g,d.fallback.data);let m=e.ls_track_drift_correction(f,i.patches.length,p,i.x,i.y,n.x,n.y,h,d.mode,d.mode===0?g:d.ptr,d.currentFramePtr,Rs(o||d.alreadyFilled),d.width,d.height,y);if(m===-1)throw new Error("CORE_BAD_ARGUMENT: driftCorrection.");let b=r.readBytes(y,40),A=new DataView(b.buffer),T=A.getUint32(24,!0)===1;return m===0?{pose:void 0,error:1/0,filledNative:T,confidenceFloor:0}:{pose:{x:A.getFloat64(0,!0),y:A.getFloat64(8,!0)},error:A.getFloat64(16,!0),filledNative:T,confidenceFloor:A.getFloat64(32,!0)}}var Mi=8;function ll(r,e,t,i){let{features:n,gray:s,roi:a,region:o,factor:c,radius:l,current:h,nativePlane:d,nativeFilled:u,native:f}=i,p=Hr(h,d,f),g=t.flatMap(I=>[I.features.length*r.featureBytes,I.patches.length*16,I.gray.data.byteLength,...I.patches.map(v=>v.data.byteLength)]),y=r.scratch([t.length*64,n.length*r.featureBytes,s.data.byteLength,32,32,p.scratchBytes,Mi+56,...g]),[w,m,b,A,T,S,x]=y,k=7,E=new DataView(r.exports.memory.buffer);for(let I=0;I<t.length;I++){let v=t[I],M=y[k++],z=y[k++],U=y[k++],j=v.patches.map(()=>y[k++]);fe(r,M,v.features),Vr(r,z,j,v.patches),r.writeBytes(U,v.gray.data);let $=w+I*64;E.setUint32($,M,!0),E.setUint32($+4,v.features.length,!0),E.setUint32($+8,z,!0),E.setUint32($+12,v.patches.length,!0),E.setUint32($+16,U,!0),E.setUint32($+20,v.gray.width,!0),E.setUint32($+24,v.gray.height,!0),E.setUint32($+28,v.canonicalIdx,!0),E.setFloat64($+32,v.x,!0),E.setFloat64($+40,v.y,!0),E.setFloat64($+48,v.dx,!0),E.setFloat64($+56,v.dy,!0)}fe(r,m,n),r.writeBytes(b,s.data),r.writeRect(A,a),r.writeRect(T,o),p.mode===0&&r.writeBytes(S,p.fallback.data);let _=e.ls_keyframes_evaluate_candidates(w,t.length,m,n.length,b,s.width,s.height,A,T,c,l,p.mode,p.mode===0?S:p.ptr,p.currentFramePtr,ae(u||p.alreadyFilled),p.width,p.height,x);if(_===-1)throw new Error("CORE_BAD_ARGUMENT: evaluate candidates.");let N=r.readBytes(x,Mi),F=new DataView(N.buffer,N.byteOffset,Mi).getUint32(0,!0)===1;if(_===0)return{result:void 0,filledNative:F};let L=r.readBytes(x+Mi,56),B=new DataView(L.buffer,L.byteOffset,56);return{result:{keyframeIndex:B.getUint32(0,!0),x:B.getInt32(4,!0),y:B.getInt32(8,!0),support:B.getUint32(12,!0),unique:B.getUint32(16,!0),ambiguous:B.getUint32(20,!0)===1,error:B.getFloat64(32,!0),analysisError:B.getFloat64(40,!0),confidence:B.getFloat64(48,!0)},filledNative:F}}var ae=r=>r?1:0;function dl(r,e,t,i){return r.ls_track_uncertainty(e,ae(t),ae(i))!==0}function hl(r,e,t){return r.ls_track_relocalize_verdict(ae(!!e),ae(e?.ambiguous??!1),e?.confidence??0,ae(t))!==0}var nf=["none","zoom-change","probe-scale"];function ul(r,e,t,i){return nf[r.ls_track_fragment_cause_gate(ae(e),ae(t),ae(i))]}var sf={tracked:0,static:1,blind:2,lost:3};function fl(r,e,t,i){return r.ls_track_occlusion_eligible(ae(e),ae(t),sf[i])!==0}function Is(r,e){let t=r.readBytes(e,16),i=new DataView(t.buffer,t.byteOffset,16);return{x:i.getFloat64(0,!0),y:i.getFloat64(8,!0)}}function pl(r,e,t,i,n){let[s]=r.scratch([16]);return r.check(e.ls_track_target_pose(t.x,t.y,i.x,i.y,n.x,n.y,s),"track target pose"),Is(r,s)}function ml(r,e,t,i,n){let[s]=r.scratch([16]),a=e.ls_track_attach_verdict(ae(!!t),t?.keyframe.x??0,t?.keyframe.y??0,t?.offset.x??0,t?.offset.y??0,ae(t?.ambiguous??!1),t?.confidence??0,ae(i),n.x,n.y,s);if(a===-1)throw new Error("CORE_BAD_ARGUMENT: attach verdict.");return a===1?Is(r,s):void 0}function gl(r,e){return r.ls_track_odometry_weight(ae(e))}function yl(r,e,t,i,n,s){return r.ls_track_thin_overlap_eligible(ae(e),ae(t),ae(i),n,s)!==0}function wl(r,e,t,i,n){let[s]=r.scratch([24]),a=e.ls_track_thin_overlap_correction(t.x,t.y,i.x,i.y,n.x,n.y,s);if(a===-1)throw new Error("CORE_BAD_ARGUMENT: thin overlap correction.");if(a===0)return;let o=Is(r,s),c=r.readBytes(s+16,8);return{target:o,discrepancy:new DataView(c.buffer,c.byteOffset,8).getFloat64(0,!0)}}var af=["closure","inconsistent","ambiguous","none"];function bl(r,e,t,i,n){let[s]=r.scratch([8]),a=e.ls_track_loop_closure_verdict(t.keyframe.x,t.keyframe.y,t.offset.x,t.offset.y,ae(t.ambiguous),t.confidence,i.x,i.y,n.x,n.y,s),o=r.readBytes(s,8);return{verdict:af[a],discrepancy:new DataView(o.buffer,o.byteOffset,8).getFloat64(0,!0)}}function xl(r,e,t,i,n,s,a,o){return r.ls_track_needs_keyframe(ae(e),ae(!!t),t?.x??0,t?.y??0,i.x,i.y,ae(n!==void 0),n??0,s.width,s.height,a,o)!==0}function Al(r,e,t){return r.ls_track_zoom_changed(ae(e!==void 0),e??0,t)!==0}function of(r,e,t){let i=new DataView(r.exports.memory.buffer,e,t.length*40);for(let n=0;n<t.length;n++){let s=t[n],a=n*40;i.setFloat64(a,s.a.x,!0),i.setFloat64(a+8,s.a.y,!0),i.setFloat64(a+16,s.b.x,!0),i.setFloat64(a+24,s.b.y,!0),i.setUint32(a+32,s.unique?1:0,!0),i.setUint32(a+36,0,!0)}}function kl(r,e,t,i){let[n]=r.scratch([i.length*40]);of(r,n,i);let s=e.ls_track_region_zoom(ae(t),n,i.length);return Number.isNaN(s)?void 0:s}function il(r,e,t,i,n,s){$e(r.exports,e,0,s,t,i,n)}function Rs(r){return r?1:0}function Vr(r,e,t,i){let n=new DataView(r.exports.memory.buffer,e,Math.max(1,i.length*16));i.forEach((s,a)=>{if(s.data.byteLength!==s.size*s.size)throw new Error("CORE_BAD_ARGUMENT: patch data does not match its size.");r.writeBytes(t[a],s.data),n.setInt32(a*16,s.x,!0),n.setInt32(a*16+4,s.y,!0),n.setUint32(a*16+8,s.size,!0),n.setUint32(a*16+12,t[a],!0)})}function Hr(r,e,t){if(r instanceof Q&&e)return{mode:1,ptr:e.ptr,currentFramePtr:r.ptr,width:e.width,height:e.height,scratchBytes:0,alreadyFilled:!1};let i=t();return i instanceof Fe?{mode:1,ptr:i.ptr,currentFramePtr:0,width:i.width,height:i.height,scratchBytes:0,alreadyFilled:!0}:{mode:0,ptr:0,currentFramePtr:0,width:i.width,height:i.height,scratchBytes:i.data.byteLength,alreadyFilled:!1,fallback:i}}var lf=512,Fs=32768,Sl=1024*1024,Wr=class r{exports;arena;frameArena;featureBytes;matchBytes;helpers;constructor(e){this.exports=e,this.helpers=[],Po(e),this.arena=new Fr(e),this.frameArena=new Fr(e),this.featureBytes=e.ls_feature_bytes(),this.matchBytes=e.ls_match_bytes()}get memoryBytes(){return this.exports.memory.buffer.byteLength}canAllocate(e){if(!(e>0)||e>=2**32)return e<=0;let t=this.exports.ls_alloc(e);return t?(this.exports.ls_free(t,e),!0):!1}get threads(){return this.exports.ls_pool_helpers()+1}static async instantiate(e,t){let i=e instanceof Promise?await e:e;if(t)return await r.instantiateShared(i,t);let n=i instanceof Response?await WebAssembly.instantiateStreaming(i,{}).catch(async()=>WebAssembly.instantiate(await i.arrayBuffer(),{})):await WebAssembly.instantiate(i,{});return new r(n.instance.exports)}static async instantiateShared(e,t){let i=e instanceof Response?await WebAssembly.compile(await e.arrayBuffer()):await WebAssembly.compile(e),n,s;for(let c of[Fs,Fs/2,Fs/4])try{n=new WebAssembly.Memory({initial:lf,maximum:c,shared:!0});break}catch(l){s=l}if(!n)throw new Error(`shared memory unavailable: ${s instanceof Error?s.message:String(s)}`);let a=await WebAssembly.instantiate(i,{env:{memory:n}}),o=new r({...a.exports,memory:n});try{let c=o.exports,l=Number(c.__tls_size?.value??0),h=Math.max(8,Number(c.__tls_align?.value??8)),d=[];for(let f=0;f<t.helpers;f++){let p=c.ls_alloc(Sl),g=l?c.ls_alloc(l+h):0;if(!p||l&&!g)throw new Error("CORE_OUT_OF_MEMORY: pool helper stack.");let y=new Worker(t.helperURL,{type:"module"});o.helpers.push(y),d.push(new Promise((w,m)=>{y.onmessage=b=>b.data.ready?w():m(new Error(`pool helper failed: ${b.data.error}`)),y.onerror=b=>{b.preventDefault(),m(new Error(`pool helper failed to start: ${b.message}`))}})),y.postMessage({module:i,memory:n,stackTop:p+Sl&-16,tls:g?Math.ceil(g/h)*h:0})}await Promise.all(d);let u=performance.now()+5e3;for(;c.ls_pool_helpers()<t.helpers;){if(performance.now()>u)throw new Error(`only ${c.ls_pool_helpers()} of ${t.helpers} pool helpers parked.`);await new Promise(f=>setTimeout(f,1))}}catch(c){throw o.dispose(),c}return o}dispose(){for(let e of this.helpers.splice(0))e.terminate()}scratch(e){return this.arena.plan(e)}scratchFrame(e){return this.frameArena.plan(e)}readBytes(e,t){return new Uint8Array(this.exports.memory.buffer).slice(e,e+t)}writeBytes(e,t){new Uint8Array(this.exports.memory.buffer).set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e)}check(e,t){return Io(e,t)}writeRect(e,t){Dr(this.exports,e,t)}placeFrame(e,t){return Fo(this.exports,e,t)}votingRing(e,t){return Fc(this,this.exports,e,t)}revealSession(e){return Bc(this,this.exports,e)}grayscale(e,t,i){return Bo(this,e,t,i)}gray(e,t){return new Fe(this.exports,It(this.exports,e*t,"resident luma plane"),e,t)}grayscaleInto(e,t){return Do(this,e,t)}downscaleGray(e,t){return Oo(this,e,t)}halveRGBA(e){return Mo(this,e)}assemblePyramidParent(e,t){return Ho(this,e,t)}pyramidSession(e,t,i,n){return Wo(this,this.exports,e,t,i,n)}tileCache(e,t){return Ec(this,this.exports,e,t)}compositor(e,t,i){return Sc(this,this.exports,e,t,i)}frameToRGBA(e,t,i,n,s,a,o,c){return Uo(this,e,t,i,n,s,a,o,c)}hdrToRGBA(e,t,i,n,s){return Vo(this,e,t,i,n,s)}planesToCore(e,t){Lo(this,e.data,e.format,e.layout,e.width,e.height,e.matrix,t)}extractFeatures(e,t,i){return Go(this,e,t,i)}matchFeatures(e,t,i){return $o(this,e,t,i)}featureWords(e){return qo(this,e)}alloc(e){return new ve(this.exports,It(this.exports,e,`the reconstruction core could not reserve ${e} resident bytes`),e)}upload(e){let t=this.alloc(e.byteLength);return t.write(e),t}frame(e,t){return new Q(this.exports,It(this.exports,e*t*4,"resident frame"),e,t)}frameRing(e,t,i){return new Br(this.exports,e,t,i)}learner(e,t){return Ic(this,this.exports,e,t)}scanSession(e,t,i){return Oc(this,this.exports,e,t,i)}estimateMotionBetween(e,t,i,n){return Mc(this,this.exports,e,t,i,n)}stationaryBoundary(e,t,i,n,s,a,o){return oc(this,e,t,i,n,s,a,o)}stickyOcclusions(e,t,i,n,s){return cc(this,e,t,i,n,s)}consistencyMask(e){return lc(this,e)}pngFilterSub(e,t,i){return dc(this,e,t,i)}pngEncode(e,t,i){return hc(this,e,t,i)}pngDecode(e,t,i){return uc(this,e,t,i)}crc32(e){return fc(this,e)}meanDifference(e,t){return No(this,e,t)}translationHypotheses(e,t){return Yo(this,e,t)}detectScale(e){return Qo(this,e)}verifyTranslation(e,t,i,n,s){return Xo(this,e,t,i,n,s)}auditTranslation(e,t,i,n,s,a){return Zo(this,e,t,i,n,s,a)}refineTranslation(e,t,i,n,s){return Jo(this,e,t,i,n,s)}estimateMotion(e,t,i,n){return ec(this,e,t,i,n)}refineNative(e,t,i,n,s,a=3,o){return rc(this,e,t,i,n,s,a,o)}refinePatches(e,t,i,n,s=3){return ic(this,e,t,i,n,s)}resampleGray(e,t){return nc(this,e,t)}extractPatches(e,t,i,n,s=24,a=32){return sc(this,e,t,i,n,s,a)}probeScale(e,t,i,n,s){return ac(this,e,t,i,n,s)}finishRegions(e,t,i,n,s,a,o,c){return _c(this,this.exports,e,t,i,n,s,a,o,c)}labelAtlasResident(e,t,i){return Rc(this,this.exports,e,t,i)}poseGraph(){return Uc(this,this.exports)}keyframeIndex(){return Lc(this,this.exports)}solveSession(e){return Gc(this,this.exports,e)}renderSession(e){return Qc(this,this.exports,e)}trackUncertainty(e,t,i){return dl(this.exports,e,t,i)}trackRelocalizeVerdict(e,t){return hl(this.exports,e,t)}trackFragmentCauseGate(e,t,i){return ul(this.exports,e,t,i)}trackOcclusionEligible(e,t,i){return fl(this.exports,e,t,i)}trackTargetPose(e,t,i){return pl(this,this.exports,e,t,i)}trackAttachVerdict(e,t,i){return ml(this,this.exports,e,t,i)}trackOdometryWeight(e){return gl(this.exports,e)}trackThinOverlapEligible(e,t,i,n,s){return yl(this.exports,e,t,i,n,s)}trackThinOverlapCorrection(e,t,i){return wl(this,this.exports,e,t,i)}trackLoopClosureVerdict(e,t,i){return bl(this,this.exports,e,t,i)}trackNeedsKeyframe(e,t,i,n,s,a,o){return xl(this.exports,e,t,i,n,s,a,o)}trackZoomChanged(e,t){return Al(this.exports,e,t)}trackRegionZoom(e,t){return kl(this,this.exports,e,t)}trackOdometry(e){return rl(this,this.exports,e)}trackReacquire(e){return al(this,this.exports,e)}trackDriftCorrection(e){return ol(this,this.exports,e)}keyframesEvaluateCandidates(e,t){return ll(this,this.exports,e,t)}frameLayout(e,t,i,n){return Zc(this,this.exports,e,t,i,n)}frameCoordinate(e,t,i){return Jc(this,this.exports,e,t,i)}framingSession(e,t,i,n,s){return el(this,this.exports,e,t,i,n,s)}};var it;function G(){if(!it)throw new Error("CORE_NOT_LOADED: call loadCore() before running the reconstruction pipeline.");return it}function Ds(){return!!it}async function Ni(r,e){return it?.dispose(),it=await Wr.instantiate(r,e),it}function Bs(r){switch(r){case"threads":return new URL("./core.threads.wasm",import.meta.url);case"simd":return new URL("./core.simd.wasm",import.meta.url);default:return new URL("./core.wasm",import.meta.url)}}function Os(){let r=Tl(),e=globalThis,t=e.navigator?.hardwareConcurrency||1,i=s=>({url:Bs(r?"simd":"scalar"),variant:r?"simd":"scalar",helpers:0,reason:s});if(!r)return i("WebAssembly SIMD128 unavailable");if(typeof SharedArrayBuffer>"u"||e.crossOriginIsolated===!1)return i("page is not cross-origin isolated, so shared memory (threads) is unavailable");if(typeof Worker>"u")return i("Workers unavailable in this context");if(t<2)return i("a single logical CPU");let n=Math.min(t-1,7);return{url:Bs("threads"),variant:"threads",helpers:n,reason:`${n+1} threads (${t} logical CPUs)`}}async function Ms(r,e){if(r.variant==="threads")try{return await Ni(fetch(r.url),{helpers:r.helpers,helperURL:e}),Gr=r}catch(t){let i=Bs("simd");return await Ni(fetch(i)),Gr={url:i,variant:"simd",helpers:0,reason:`threaded core failed to start (${t instanceof Error?t.message:String(t)})`}}return await Ni(fetch(r.url)),Gr=r}var Gr;function Zt(){return{variant:Gr?.variant??(it&&it.threads>1?"threads":"direct"),threads:it?.threads??0,reason:Gr?.reason??"loaded directly"}}function Tl(){try{return 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]))}catch{return!1}}function El(r){return G().crc32(r)}var Be=r=>new TextEncoder().encode(r);function Ns(r,e){let t=Be(r),i=new Uint8Array(e.length+12),n=new DataView(i.buffer);return n.setUint32(0,e.length),i.set(t,4),i.set(e,8),n.setUint32(e.length+8,El(i.subarray(4,8+e.length))),i}var vl=[137,80,78,71,13,10,26,10];async function*Us(r,e,t){if(!Number.isSafeInteger(r)||!Number.isSafeInteger(e)||r<1||e<1||r>2147483647||e>2147483647)throw new Error("Invalid PNG dimensions.");if(typeof CompressionStream>"u")throw new Error("COMPRESSION_UNAVAILABLE: Streaming PNG needs CompressionStream. Every tile is encoded as a PNG, so no export path is available without it.");yield new Uint8Array(vl);let i=new Uint8Array(13),n=new DataView(i.buffer);n.setUint32(0,r),n.setUint32(4,e),i[8]=8,i[9]=6,yield Ns("IHDR",i);let s=new CompressionStream("deflate"),a=s.writable.getWriter(),o=s.readable.getReader(),c,l=!1,h=(async()=>{try{let d=0,u=r*4+1,f=Math.max(1,Math.floor(65536/u)),p=new Uint8Array(r*4*f),g=0,y=async()=>{await a.write(G().pngFilterSub(p.subarray(0,g*r*4),r,g)),g=0};for await(let w of t){if(w.length!==r*4)throw new Error("PNG row has incorrect byte length.");p.set(w,g*r*4),g++,d++,g===f&&await y()}if(g&&await y(),d!==e)throw new Error(`Expected ${e} PNG rows, received ${d}.`);await a.close()}catch(d){c=d,await a.abort(d).catch(()=>{})}})();try{for(;;){let d=await o.read();if(d.done)break;yield Ns("IDAT",d.value)}if(await h,c)throw c;l=!0,yield Ns("IEND",new Uint8Array)}finally{l||await o.cancel().catch(()=>{}),o.releaseLock(),await h}}async function Ui(r){if(r.data.length!==r.width*r.height*4)throw new Error("RGBA buffer does not match its dimensions.");return G().pngEncode(new Uint8Array(r.data.buffer,r.data.byteOffset,r.data.byteLength),r.width,r.height)}async function Li(r){if(r.length<8||vl.some((d,u)=>r[u]!==d))throw new Error("Not a PNG file.");let e=new DataView(r.buffer,r.byteOffset,r.byteLength),t=8,i=0,n=0,s=-1,a=0,o=0,c=!1;for(;t+8<=r.length&&!c;){let d=e.getUint32(t),u=String.fromCharCode(r[t+4],r[t+5],r[t+6],r[t+7]);if(t+12+d>r.length)throw new Error(`Truncated PNG chunk ${u}.`);if(G().crc32(r.subarray(t+4,t+8+d))!==e.getUint32(t+8+d))throw new Error(`PNG chunk ${u} failed its CRC check.`);if(u==="IHDR"){let f=r.subarray(t+8,t+8+d);i=e.getUint32(t+8),n=e.getUint32(t+12),a=f[8],s=f[9],o=f[12]}else u==="IEND"&&(c=!0);t+=12+d}if(!c||!i||!n)throw new Error("PNG is missing IHDR or IEND.");let l={0:1,2:3,4:2,6:4}[s];if(!l||a!==8||o!==0)throw new Error(`Unsupported PNG layout: colour type ${s}, ${a}-bit, interlace ${o}.`);let h;try{h=G().pngDecode(r,i,n)}catch(d){if(d instanceof Error&&d.message.startsWith("Invalid PNG filter"))throw d;let u=i*l;throw new Error(`PNG data does not decode to its declared ${i}\xD7${n}; expected ${(u+1)*n} bytes of scanline data.`)}return{width:i,height:n,data:h}}var Ls=16,df={encode:async r=>new Blob([await Ui(r)],{type:"image/png"}),decode:async(r,e)=>{let t=await Li(new Uint8Array(await r.arrayBuffer()));if(t.width!==e||t.height!==e)throw new Error(`Stored tile is ${t.width}\xD7${t.height}; expected ${e}\xD7${e}.`);return t.data}};function Le(r,e,t,i){return`${r}/${e}/${t}_${i}`}function hf(r){let e=0;for(let t of r){let i=t;for(;i;)e++,i&=i-1}return e}var uf=[Uint8ClampedArray,Uint8Array,Uint8Array,Uint8Array,Uint8Array,Uint32Array,Float32Array,Uint8Array],$r=class{cache;canvasId;level;x;y;id;#i;#n;#e;#r;constructor(e,t,i,n,s,a){this.cache=e,this.canvasId=t,this.level=i,this.x=n,this.y=s,this.id=a,this.#r=!1;let o=e.planes(a);this.#i=o.ptrs,this.#n=o.lens}#t(e){if(this.#e)return this.#e.planes[e];if(this.#r)throw new Error(`Tile ${Le(this.canvasId,this.level,this.x,this.y)} was dropped by TileStore.clear() or free().`);let t=uf[e];return new t(G().exports.memory.buffer,this.#i[e],this.#n[e]/t.BYTES_PER_ELEMENT)}get pixels(){return this.#t(0)}get coverage(){return this.#t(1)}get provisional(){return this.#t(2)}get quality(){return this.#t(3)}get conflicts(){return this.#t(4)}get owner(){return this.#t(5)}get score(){return this.#t(6)}get frozen(){return this.#t(7)}get dirty(){return this.#e?this.#e.dirty:this.cache.planes(this.id).dirty}set dirty(e){this.#e?this.#e.dirty=e:this.cache.setDirty(this.id,e)}get existed(){return this.#e?this.#e.existed:this.cache.planes(this.id).existed}set existed(e){if(this.#e)this.#e.existed=e;else if(e!==this.existed)throw new Error("A resident tile only becomes stored through TileStore.")}get touched(){return this.#e?this.#e.touched:this.cache.planes(this.id).touched}set touched(e){this.#e?this.#e.touched=e:this.cache.setTouched(this.id,e)}get resident(){return!this.#e&&!this.#r}detach(){let{dirty:e,existed:t,touched:i}=this.cache.planes(this.id);this.#e={planes:Yt.map((n,s)=>this.#t(s).slice()),dirty:e,existed:t,touched:i}}drop(){this.#r=!0}},_l=new FinalizationRegistry(r=>r.free()),Jt=class{db;size;codec;engine;resident;byId;constructor(e,t=512,i=128,n=df){if(this.db=e,this.size=t,this.codec=n,this.resident=new Map,this.byId=new Map,!Number.isInteger(t)||t<Ls||t%Ls)throw new Error(`Tile size must be a positive multiple of ${Ls}.`);this.engine=G().tileCache(t,i),_l.register(this,this.engine,this)}released;get maxTiles(){return this.released?.maxTiles??this.engine.maxTiles}set maxTiles(e){this.engine.maxTiles=e}stats(){return this.released?.stats??this.engine.stats()}get encodedTiles(){return this.stats().encoded}get decodedTiles(){return this.stats().decoded}get evictions(){return this.stats().evictions}get peakResidentTiles(){return this.stats().peakResident}free(){if(!this.released){this.released={maxTiles:this.engine.maxTiles,stats:this.engine.stats()};for(let e of this.byId.values())e.drop();this.byId.clear(),this.resident.clear(),_l.unregister(this),this.engine.free()}}isResident(e,t,i,n=0){return this.resident.has(Le(e,n,t,i))}async get(e,t,i,n=0){let s=this.resident.get(Le(e,n,t,i));return s?(this.engine.touch(e,n,t,i),s):await this.load(e,t,i,n)}async load(e,t,i,n=0){for(let h=this.engine.victim();h;h=this.engine.victim()){let d=this.byId.get(h);await this.save(d),this.engine.evict(h),d.detach(),this.engine.release(h),this.byId.delete(h),this.resident.delete(Le(d.canvasId,d.level,d.x,d.y))}let s=Le(e,n,t,i),a=await this.db.get(`tile/${s}`),o=a?await this.codec.decode(a.blob,this.size):void 0,c=this.engine.insert(e,n,t,i,a&&{...a,pixels:o}),l=new $r(this.engine,e,n,t,i,c);return this.resident.set(s,l),this.byId.set(c,l),l}async encodeRows(e){this.engine.encoded();let t=e instanceof $r&&e.resident,i=o=>t?o.slice():o,n=await this.codec.encode({width:this.size,height:this.size,data:i(e.pixels)}),s=Le(e.canvasId,e.level,e.x,e.y),a={blob:n,coverage:i(e.coverage),provisional:i(e.provisional),quality:i(e.quality),conflicts:i(e.conflicts),owner:i(e.owner),score:i(e.score),frozen:i(e.frozen),level:e.level,x:e.x,y:e.y};return[{key:`tile/${s}`,value:a},{key:`tile-index/${s}`,value:{canvasId:e.canvasId,level:e.level,x:e.x,y:e.y,observed:hf(a.coverage)}}]}stored(e){e instanceof $r&&e.resident?this.engine.saved(e.id):(e.dirty=!1,e.existed=!0)}async saveResident(e){let t=this.byId.get(e);if(!t)throw new Error(`CORE_BAD_ARGUMENT: tile ${e} is not resident.`);await this.save(t)}async save(e){e.dirty&&(await this.db.putMany(await this.encodeRows(e)),this.stored(e))}async flush(e){let t=this.engine.dirty(e).map(n=>this.byId.get(n)),i=[];for(let n of t)i.push(...await this.encodeRows(n));i.length&&await this.db.putMany(i);for(let n of t)this.stored(n)}async clear(){await this.flush();for(let e of this.byId.values())e.drop();this.byId.clear(),this.resident.clear(),this.engine.clear()}async payload(e,t,i,n){let s=Le(e,t,i,n),a=this.resident.get(s);return a&&await this.save(a),this.db.get(`tile/${s}`)}async buildPyramid(e,t){await this.clear(),await Ue(this.db,`pyramid-todo/${e.id}/`);let i=this.size,n=G().pyramidSession(e.id,e.bounds.width,e.bounds.height,i);try{for(let s=n.step();s.kind!=="done";s=n.step())if(s.kind==="index")for await(let a of X(this.db,`tile-index/${e.id}/${s.level-1}/`)){let{x:o,y:c}=n.queue(a.value.x,a.value.y);await this.db.put(`pyramid-todo/${e.id}/${s.level}/${o}_${c}`,{x:o,y:c})}else if(s.kind==="children"){let a=[];for(let o of s.children){let c=await this.db.get(`tile/${Le(e.id,o.level,o.x,o.y)}`);a.push(c?await this.codec.decode(c.blob,i):void 0)}n.provide(a)}else if(s.kind==="parent"){let{level:a,x:o,y:c}=s;if(s.pixels){let l=await this.codec.encode({width:i,height:i,data:s.pixels}),h=Le(e.id,a,o,c);await this.db.putMany([{key:`tile/${h}`,value:{blob:l,x:o,y:c,level:a,owner:new Uint32Array,score:new Float32Array}},{key:`tile-index/${h}`,value:{canvasId:e.id,level:a,x:o,y:c,observed:0}}])}await this.db.delete(`pyramid-todo/${e.id}/${a}/${o}_${c}`),await t()}else e.maxLevel=s.level,await this.db.put(`canvas/${e.id}`,e)}finally{n.free();try{await Ue(this.db,`pyramid-todo/${e.id}/`)}catch{}}}};function zi(r,e,t){return Math.max(1,Math.ceil(Math.max(r,e)/Math.max(1,t)))}function qr(r,e){if(!Number.isInteger(e)||e<1)throw new Error(`Invalid analysis factor ${e}.`);return G().downscaleGray(r,e)}var ff=`
37
+ struct Params { width: u32, height: u32, factor: u32, outWidth: u32, outHeight: u32 }
38
+ @group(0) @binding(0) var<storage, read> src: array<u32>;
39
+ @group(0) @binding(1) var<storage, read_write> dst: array<u32>;
40
+ @group(0) @binding(2) var<uniform> p: Params;
41
+ fn luma(o: u32) -> u32 {
42
+ let x = o % p.outWidth;
43
+ let y = o / p.outWidth;
44
+ // Clamp the sampled box to the image, matching the CPU path: the last row/column of an integer downscale
45
+ // can be smaller than factor when the native dimension isn't an exact multiple of it.
46
+ let bw = min(p.factor, p.width - x * p.factor);
47
+ let bh = min(p.factor, p.height - y * p.factor);
48
+ var sum = 0u;
49
+ for (var j = 0u; j < bh; j++) {
50
+ let row = (y * p.factor + j) * p.width + x * p.factor;
51
+ for (var k = 0u; k < bw; k++) {
52
+ let pixel = src[row + k];
53
+ sum += (pixel & 255u) * 77u + ((pixel >> 8u) & 255u) * 150u + ((pixel >> 16u) & 255u) * 29u;
54
+ }
55
+ }
56
+ return (sum / (bw * bh)) >> 8u;
57
+ }
58
+ // Four consecutive output bytes per invocation, packed little-endian, so the readback is the gray image itself.
59
+ @compute @workgroup_size(64)
60
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
61
+ let n = p.outWidth * p.outHeight;
62
+ let first = id.x * 4u;
63
+ if (first >= n) { return; }
64
+ var packed = 0u;
65
+ for (var i = 0u; i < 4u; i++) {
66
+ if (first + i < n) { packed |= luma(first + i) << (8u * i); }
67
+ }
68
+ dst[id.x] = packed;
69
+ }`,pf=65535,Cl=r=>[...r].sort((e,t)=>e-t)[1];function Vi(r,e){let t;return Promise.race([r,new Promise((i,n)=>{t=setTimeout(()=>n(new Error("WebGPU operation timed out")),e)})]).finally(()=>clearTimeout(t))}var Hi=class{mode;provider;stats;tried;disabled;device;pipeline;buffers;sharedUpload;adapterName;constructor(e="auto",t){this.mode=e,this.provider=t,this.stats={backend:"CPU",reason:"CPU requested",cpuFrames:0,gpuFrames:0},this.tried=!1,this.disabled=!1,this.sharedUpload=!0,this.stats.reason=e==="cpu"?"CPU requested":"CPU until an integer downscale is calibrated"}async initialize(){if(this.provider===void 0&&(this.provider=globalThis.navigator?.gpu),!this.provider)throw new Error("WebGPU unavailable in this context");let e=await Vi(this.provider.requestAdapter({powerPreference:"high-performance"}),4e3);if(!e)throw new Error("No WebGPU adapter");let t=e.info;this.adapterName=t&&[t.vendor,t.architecture,t.description].filter(Boolean).join(" ")||void 0;let i=await Vi(e.requestDevice(),4e3);if(this.disabled){i.destroy();return}this.device=i,i.lost.then(n=>{this.disabled||this.fallback(`Device lost: ${n.message||"unknown"}`)}),this.pipeline=await Vi(i.createComputePipelineAsync({layout:"auto",compute:{module:i.createShaderModule({code:ff}),entryPoint:"main"}}),4e3)}releaseBuffers(){if(this.buffers)for(let e of["input","output","params","read"])this.buffers[e].destroy();this.buffers=void 0}fallback(e){this.disabled=!0,this.stats.backend="CPU",this.stats.reason=e,this.releaseBuffers(),this.device?.destroy(),this.device=void 0}async gray(e,t){if(!Number.isInteger(t)||t<1)throw new Error(`Invalid analysis factor ${t}.`);if(this.mode==="cpu"||this.disabled||t===1||t>128)return this.stats.cpuFrames++,qr(e,t);try{if(!this.tried){if(this.tried=!0,await this.initialize(),this.disabled)throw new Error("GPU initialization cancelled");let n=qr(e,t),s=await this.dispatch(e,t),a=[],o=[];for(let d=0;d<3;d++){let u=performance.now();n=qr(e,t),a.push(performance.now()-u)}for(let d=0;d<3;d++){let u=performance.now();s=await this.dispatch(e,t),o.push(performance.now()-u)}let c=Cl(a),l=Cl(o),h=n.data.length===s.data.length&&n.data.every((d,u)=>d===s.data[u]);if(this.stats.calibration={cpuMS:c,gpuMS:l,bitExact:h,adapter:this.adapterName},!h)throw new Error("GPU/CPU analysis parity failed");return this.mode==="auto"&&l>=c*.9?(this.fallback("CPU wins measured transfer + compute + readback"),this.stats.cpuFrames++,n):(this.stats.backend="WebGPU box-luma + CPU registration",this.stats.reason=this.mode==="auto"?"Bit-exact and faster in first-frame calibration":"Explicit WebGPU, first-frame parity validated",this.stats.gpuFrames++,s)}let i=await this.dispatch(e,t);return this.stats.gpuFrames++,i}catch(i){return this.fallback(String(i)),this.stats.cpuFrames++,qr(e,t)}}async hostGray(e,t){if(!Number.isInteger(t)||t<1)throw new Error(`Invalid analysis factor ${t}.`);if(this.mode==="cpu"||this.disabled||t===1||t>128){this.stats.cpuFrames++;return}return await this.gray(e,t)}async dispatch(e,t){let i=this.device,n=Math.max(1,Math.ceil(e.width/t)),s=Math.max(1,Math.ceil(e.height/t)),a=n*s,o=Math.ceil(a/4),c=Math.ceil(o/64),l=e.width*e.height*4,h=o*4;if(Math.max(l,h)>Math.min(i.limits.maxStorageBufferBindingSize,i.limits.maxBufferSize))throw new Error("GPU buffer limit exceeded");if(c>pf)throw new Error("GPU dispatch limit exceeded");if(!this.buffers||this.buffers.inputBytes!==l||this.buffers.outputBytes!==h){this.releaseBuffers();let m=i.createBuffer({size:l,usage:136}),b=i.createBuffer({size:h,usage:132}),A=i.createBuffer({size:32,usage:72}),T=i.createBuffer({size:h,usage:9}),S=i.createBindGroup({layout:this.pipeline.getBindGroupLayout(0),entries:[m,b,A].map((x,k)=>({binding:k,resource:{buffer:x}}))});this.buffers={input:m,output:b,params:A,read:T,bindings:S,inputBytes:l,outputBytes:h}}let{input:d,output:u,params:f,read:p,bindings:g}=this.buffers;this.upload(e,d),i.queue.writeBuffer(f,0,new Uint32Array([e.width,e.height,t,n,s]));let y=i.createCommandEncoder(),w=y.beginComputePass();w.setPipeline(this.pipeline),w.setBindGroup(0,g),w.dispatchWorkgroups(c,1),w.end(),y.copyBufferToBuffer(u,0,p,0,h),i.queue.submit([y.finish()]),await Vi(p.mapAsync(1),4e3);try{return{width:n,height:s,data:new Uint8Array(p.getMappedRange(),0,a).slice()}}finally{p.unmap()}}upload(e,t){let i=this.device.queue;if(!(e instanceof Q)){i.writeBuffer(t,0,e.data);return}if(this.sharedUpload)try{i.writeBuffer(t,0,e.view());return}catch(n){if(!(n instanceof TypeError))throw n;this.sharedUpload=!1}i.writeBuffer(t,0,e.bytes())}dispose(){this.disabled=!0,this.releaseBuffers(),this.device?.destroy(),this.device=void 0}};function P(r){if(!r)throw new Error("Assertion failed.")}var Wi=Math.PI/180,mf=180/Math.PI,jr=r=>{let e=(r%360+360)%360;if(e===0||e===90||e===180||e===270)return e;throw new Error(`Invalid rotation ${r}.`)},Hs=[1,0,0,0,1,0,0,0,1],Pl=(r,e,t)=>{let[i,n,,s,a]=r,o=Math.abs(i)*e+Math.abs(s)*t,c=Math.abs(n)*e+Math.abs(a)*t;return er(er(Rl(-e/2,-t/2),r),Rl(o/2,c/2))},Kr=r=>{let[e,t]=r,i=Math.atan2(t,Ws(r)?-e:e);return jr(gf(i*mf,90))},Ws=r=>{let[e,t,,i,n]=r;return e*n-t*i<0},Il=r=>{let e=r*Wi,t=Math.round(Math.cos(e)),i=Math.round(Math.sin(e));return[t,i,0,-i,t,0,0,0,1]},Rl=(r,e)=>[1,0,0,0,1,0,r,e,1],Fl=(r,e)=>[r,0,0,0,e,0,0,0,1],er=(r,e)=>{let t=new Array(9);for(let i=0;i<3;i++)for(let n=0;n<3;n++)t[3*i+n]=r[3*i]*e[n]+r[3*i+1]*e[3+n]+r[3*i+2]*e[6+n];return t};var Pe=r=>r&&r[r.length-1];var O=r=>{let e=0;for(;r.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+r.readBits(e)};var qe=r=>{let e=O(r);return(e&1)===0?-(e>>1):e+1>>1};var tr=r=>r.constructor===Uint8Array?r:ArrayBuffer.isView(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r),te=r=>r.constructor===DataView?r:ArrayBuffer.isView(r)?new DataView(r.buffer,r.byteOffset,r.byteLength):new DataView(r),R0=typeof globalThis.TextEncoder<"u"?globalThis.TextEncoder:class{constructor(){this.encoding="utf-8"}encode(e=""){let t=new Uint8Array(3*e.length),i=0;for(let n=0;n<e.length;n++){let s=e.charCodeAt(n);if(s<128)t[i++]=s;else if(s<2048)t[i++]=192|s>>6,t[i++]=128|s&63;else if(s<55296||s>57343)t[i++]=224|s>>12,t[i++]=128|s>>6&63,t[i++]=128|s&63;else{let a=n+1<e.length?e.charCodeAt(n+1):0;s<56320&&a>=56320&&a<=57343?(s=65536+(s-55296<<10)+(a-56320),n++,t[i++]=240|s>>18,t[i++]=128|s>>12&63,t[i++]=128|s>>6&63,t[i++]=128|s&63):(t[i++]=239,t[i++]=191,t[i++]=189)}}return t.slice(0,i)}},Gs=typeof globalThis.TextDecoder<"u"?globalThis.TextDecoder:class{constructor(e="utf-8"){let t=e.trim().toLowerCase();if(t==="utf-8"||t==="utf8"||t==="unicode-1-1-utf-8")this.encoding="utf-8";else if(t==="utf-16le"||t==="utf-16")this.encoding="utf-16le";else if(t==="utf-16be")this.encoding="utf-16be";else throw new RangeError(`The encoding label provided ('${e}') is invalid.`)}decode(e){let t=e?tr(e):new Uint8Array(0),i=[];if(this.encoding==="utf-8"){let s=t.length>=3&&t[0]===239&&t[1]===187&&t[2]===191?3:0;for(;s<t.length;){let a=t[s];if(a<128){i.push(a),s++;continue}let o,c;if(a>=194&&a<224)o=1,c=a&31;else if(a>=224&&a<240)o=2,c=a&15;else if(a>=240&&a<245)o=3,c=a&7;else{i.push(65533),s++;continue}let l=a===224?160:a===240?144:128,h=a===237?159:a===244?143:191,d=1;for(;d<=o;d++){let u=s+d<t.length?t[s+d]:0;if(u<l||u>h)break;c=c<<6|u&63,l=128,h=191}s+=d,d<=o?i.push(65533):c>=65536?(c-=65536,i.push(55296|c>>10,56320|c&1023)):i.push(c)}}else{let s=this.encoding==="utf-16le",a=s?255:254,o=s?254:255,c=t.length>=2&&t[0]===a&&t[1]===o?2:0;for(;c+1<t.length;){let l=s?t[c]|t[c+1]<<8:t[c]<<8|t[c+1];if(c+=2,l>=55296&&l<=56319){let h=c+1<t.length?s?t[c]|t[c+1]<<8:t[c]<<8|t[c+1]:-1;h>=56320&&h<=57343?(i.push(l,h),c+=2):i.push(65533)}else l>=56320&&l<=57343?i.push(65533):i.push(l)}c<t.length&&i.push(65533)}let n="";for(let s=0;s<i.length;s+=8192)n+=String.fromCharCode(...i.slice(s,s+8192));return n}},De=new Gs;var $s=r=>Object.fromEntries(Object.entries(r).map(([e,t])=>[t,e])),qs={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},je=$s(qs),js={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},Ke=$s(js),Ks={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},Ye=$s(Ks),Yr=r=>!!r&&!!r.primaries&&!!r.transfer&&!!r.matrix&&r.fullRange!==void 0;var Gi={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0};var Bl=/^[0-9a-fA-F]+$/,wt=r=>[...r].map(e=>e.toString(16).padStart(2,"0")).join(""),Dl=r=>{P(r.length%2===0);let e=new Uint8Array(r.length/2);for(let t=0;t<r.length;t+=2)e[t/2]=parseInt(r.slice(t,t+2),16);return e},Ys=r=>(r=r>>1&1431655765|(r&1431655765)<<1,r=r>>2&858993459|(r&858993459)<<2,r=r>>4&252645135|(r&252645135)<<4,r=r>>8&16711935|(r&16711935)<<8,r=r>>16&65535|(r&65535)<<16,r>>>0),Qs=(r,e,t)=>{let i=0,n=r.length-1,s=-1;for(;i<=n;){let a=i+n>>1,o=t(r[a]);o===e?(s=a,n=a-1):o<e?i=a+1:n=a-1}return s},re=(r,e,t)=>{let i=0,n=r.length-1,s=-1;for(;i<=n;){let a=i+(n-i+1)/2|0;t(r[a])<=e?(s=a,i=a+1):n=a-1}return s};var Ft=()=>{let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}},Xs=(r,e)=>{let t=r.indexOf(e);t!==-1&&r.splice(t,1)};var $i=(r,e)=>{for(let t=r.length-1;t>=0;t--)if(e(r[t]))return t;return-1};var rr=r=>{throw new Error(`Unexpected value: ${r}`)},Qr=(r,e,t)=>{let i=r.getUint8(e),n=r.getUint8(e+1),s=r.getUint8(e+2);return t?i|n<<8|s<<16:i<<16|n<<8|s};var ir=(r,e,t)=>Math.max(e,Math.min(t,r));var nr="und",qi=r=>{let e=Math.round(r);return Math.abs(r/e-1)<10*Number.EPSILON?e:r},gf=(r,e)=>Math.round(r/e)*e,Ol=(r,e)=>Math.round(r*e)/e;var ji=r=>{let e=0;for(;r!==0;)r&=r-1,e++;return e},yf=/^[a-z]{3}$/,Ki=r=>yf.test(r),Zs=1e6*(1+Number.EPSILON);var zs=null,Js=()=>zs!==null?zs:zs=!!(typeof navigator<"u"&&(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)));var Vs=null,ea=()=>Vs!==null?Vs:Vs=!!(typeof navigator<"u"&&(navigator.vendor?.includes("Google Inc")||/Chrome/.test(navigator.userAgent)));var wf=(async()=>{})().constructor,V=r=>r instanceof wf||r instanceof Promise?!0:typeof r?.then=="function";var Yi=(r,e,t,i)=>r<=i&&t<=e;var Ml=(r,e)=>{if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(r[t]!==e[t])return!1;return!0},Qi=()=>{Symbol.dispose??=Symbol("Symbol.dispose")},sr=r=>typeof r=="number"&&!Number.isNaN(r);var Nl=(r,e)=>{let t=0;for(let i=0;i<r.length;i++)e(r[i])&&t++;return t},Ul=(r,e)=>{let t=-1,i=1/0;for(let n=0;n<r.length;n++){let s=e(r[n]);s<i&&(i=s,t=n)}return t};var Xi=r=>{P(Number.isInteger(r.num)),P(Number.isInteger(r.den)),P(r.den!==0);let e=Math.abs(r.num),t=Math.abs(r.den);for(;t!==0;){let n=e%t;e=t,t=n}let i=e||1;return{num:r.num/i,den:r.den/i}};var yt=class{constructor(){this._listeners=new Map}on(e,t,i){this._listeners.has(e)||this._listeners.set(e,new Set);let n={fn:t,once:i?.once??!1};return this._listeners.get(e).add(n),()=>{this._listeners.get(e)?.delete(n)}}_emit(...e){let[t,i]=e,n=this._listeners.get(t);if(n)for(let s of n){try{s.fn(i)}catch(a){console.error(a)}s.once&&n.delete(s)}}};var Qe;(function(r){r[r.Silent=0]="Silent",r[r.Errors=1]="Errors",r[r.Warnings=2]="Warnings",r[r.Info=3]="Info"})(Qe||(Qe={}));var Y=class r{constructor(){}static get level(){return r._level}static set level(e){if(e!==Qe.Silent&&e!==Qe.Errors&&e!==Qe.Warnings&&e!==Qe.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");r._level=e}static get _emitter(){return r._emitterInstance??=new yt}static on(e,t,i){return r._emitter.on(e,t,i)}static _error(...e){r._emitter._emit("error",e),r._level>=Qe.Errors&&console.error(...e)}static _warn(...e){r._emitter._emit("warn",e),r._level>=Qe.Warnings&&console.warn(...e)}static _info(...e){r._emitter._emit("info",e),r._level>=Qe.Info&&console.info(...e)}};Y._level=Qe.Info;Y._emitterInstance=null;var bt=class{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(typeof t!="string")throw new TypeError("mimeType must be a string.")}},Zi=class{constructor(e,t,i,n){if(this.data=e,this.mimeType=t,this.name=i,this.description=n,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(t!==void 0&&typeof t!="string")throw new TypeError("mimeType, when provided, must be a string.");if(i!==void 0&&typeof i!="string")throw new TypeError("name, when provided, must be a string.");if(n!==void 0&&typeof n!="string")throw new TypeError("description, when provided, must be a string.")}};var Ji={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};var le=class r{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),t=this.bytes[e]??0,i=7-(this.pos&7),n=(t&1<<i)>>i;return this.pos++,n}readBits(e){if(e===1)return this.readBit();let t=0;for(let i=0;i<e;i++)t<<=1,t|=this.readBit();return t}writeBits(e,t){let i=this.pos+e;for(let n=this.pos;n<i;n++){let s=Math.floor(n/8),a=this.bytes[s],o=7-(n&7);a&=~(1<<o),a|=(t&1<<i-n-1)>>i-n-1<<o,this.bytes[s]=a}this.pos=i}copyBits(e,t){let i=0;for(i;i<e-7;i+=8)this.writeBits(8,t.readBits(8));let n=e-i;n>0&&this.writeBits(n,t.readBits(n))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let e=this.pos/8,t=this.bytes[e]??0;return this.pos+=8,t}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let e=new r(this.bytes);return e.pos=this.pos,e}};var Ll=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],bf=[-1,1,2,3,4,5,6,8],en=r=>{if(!r||r.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new le(r),t=ta(e),{frequencyIndex:i,sampleRate:n}=ra(e),s=e.readBits(4),a=null;s>=1&&s<=7&&(a=bf[s]);let o=t,c=!1,l=n;if(t===5||t===29)c=t===29,l=ra(e).sampleRate,o=ta(e),o===22&&e.skipBits(4);else for(;e.getBitsLeft()>15;){let h=e.pos;if(e.readBits(11)!==695){e.pos=h+1;continue}ta(e)===5&&e.readBits(1)&&(l=ra(e).sampleRate,e.getBitsLeft()>11&&e.readBits(11)===1352&&(c=!!e.readBits(1)));break}return a!==null&&a>1&&(c=!1),{objectType:t,coreObjectType:o,frequencyIndex:i,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:c&&a===1?2:a}},ta=r=>{let e=r.readBits(5);return e===31?32+r.readBits(6):e},ra=r=>{let e=r.readBits(4);return e===15?{frequencyIndex:e,sampleRate:r.readBits(24)}:{frequencyIndex:e,sampleRate:e<Ll.length?Ll[e]:null}};var tn=[48e3,44100,32e3],zl=[24e3,22050,16e3];var nt;(function(r){r[r.NON_IDR_SLICE=1]="NON_IDR_SLICE",r[r.SLICE_DPA=2]="SLICE_DPA",r[r.SLICE_DPB=3]="SLICE_DPB",r[r.SLICE_DPC=4]="SLICE_DPC",r[r.IDR=5]="IDR",r[r.SEI=6]="SEI",r[r.SPS=7]="SPS",r[r.PPS=8]="PPS",r[r.AUD=9]="AUD",r[r.SPS_EXT=13]="SPS_EXT"})(nt||(nt={}));var Se;(function(r){r[r.RASL_N=8]="RASL_N",r[r.RASL_R=9]="RASL_R",r[r.BLA_W_LP=16]="BLA_W_LP",r[r.RSV_IRAP_VCL23=23]="RSV_IRAP_VCL23",r[r.VPS_NUT=32]="VPS_NUT",r[r.SPS_NUT=33]="SPS_NUT",r[r.PPS_NUT=34]="PPS_NUT",r[r.AUD_NUT=35]="AUD_NUT",r[r.PREFIX_SEI_NUT=39]="PREFIX_SEI_NUT",r[r.SUFFIX_SEI_NUT=40]="SUFFIX_SEI_NUT"})(Se||(Se={}));var sn=function*(r){let e=0,t=-1;for(;e<r.length-2;){let i=r.indexOf(0,e);if(i===-1||i>=r.length-2)break;e=i;let n=0;if(e+3<r.length&&r[e+1]===0&&r[e+2]===0&&r[e+3]===1?n=4:r[e+1]===0&&r[e+2]===1&&(n=3),n===0){e++;continue}t!==-1&&e>t&&(yield{offset:t,length:e-t}),t=e+n,e=t}t!==-1&&t<r.length&&(yield{offset:t,length:r.length-t})},$l=function*(r,e){let t=0,i=new DataView(r.buffer,r.byteOffset,r.byteLength);for(;t+e<=r.length;){let n;e===1?n=i.getUint8(t):e===2?n=i.getUint16(t,!1):e===3?n=Qr(i,t,!1):(P(e===4),n=i.getUint32(t,!1)),t+=e,yield{offset:t,length:n},t+=n}},kf=(r,e)=>{if(e.description){let n=(tr(e.description)[4]&3)+1;return $l(r,n)}else return sn(r)},ql=r=>r&31,an=r=>{let e=[],t=r.length;for(let i=0;i<t;i++)i+2<t&&r[i]===0&&r[i+1]===0&&r[i+2]===3?(e.push(0,0),i+=2):e.push(r[i]);return new Uint8Array(e)};var Y0=new Uint8Array([0,0,0,1]);var on=r=>{try{let e=[],t=[],i=[];for(let o of sn(r)){let c=r.subarray(o.offset,o.offset+o.length),l=ql(c[0]);l===nt.SPS?e.push(c):l===nt.PPS?t.push(c):l===nt.SPS_EXT&&i.push(c)}if(e.length===0||t.length===0)return null;let n=e[0],s=sa(n);P(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:e,pictureParameterSets:t,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?i:null}}catch(e){return Y._error("Error building AVC Decoder Configuration Record:",e),null}};var jl=r=>{try{let e=te(r),t=0,i=e.getUint8(t++),n=e.getUint8(t++),s=e.getUint8(t++),a=e.getUint8(t++),o=e.getUint8(t++)&3,c=e.getUint8(t++)&31,l=[];for(let f=0;f<c;f++){let p=e.getUint16(t,!1);t+=2,l.push(r.subarray(t,t+p)),t+=p}let h=e.getUint8(t++),d=[];for(let f=0;f<h;f++){let p=e.getUint16(t,!1);t+=2,d.push(r.subarray(t,t+p)),t+=p}let u={configurationVersion:i,avcProfileIndication:n,profileCompatibility:s,avcLevelIndication:a,lengthSizeMinusOne:o,sequenceParameterSets:l,pictureParameterSets:d,chromaFormat:null,bitDepthLumaMinus8:null,bitDepthChromaMinus8:null,sequenceParameterSetExt:null};if((n===100||n===110||n===122||n===144)&&t+4<=r.length){let f=e.getUint8(t++)&3,p=e.getUint8(t++)&7,g=e.getUint8(t++)&7,y=e.getUint8(t++);u.chromaFormat=f,u.bitDepthLumaMinus8=p,u.bitDepthChromaMinus8=g;let w=[];for(let m=0;m<y;m++){let b=e.getUint16(t,!1);t+=2,w.push(r.subarray(t,t+b)),t+=b}u.sequenceParameterSetExt=w}return u}catch(e){return Y._error("Error deserializing AVC Decoder Configuration Record:",e),null}},Kl={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},sa=r=>{try{let e=an(r),t=new le(e);if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let n=t.readAlignedByte(),s=t.readAlignedByte(),a=t.readAlignedByte();O(t);let o=1,c=0,l=0,h=0;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(o=O(t),o===3&&(h=t.readBits(1)),c=O(t),l=O(t),t.skipBits(1),t.readBits(1))){for(let v=0;v<(o!==3?8:12);v++)if(t.readBits(1)){let z=v<6?16:64,U=8,j=8;for(let $=0;$<z;$++){if(j!==0){let Z=qe(t);j=(U+Z+256)%256}U=j===0?U:j}}}O(t);let d=O(t);if(d===0)O(t);else if(d===1){t.skipBits(1),qe(t),qe(t);let I=O(t);for(let v=0;v<I;v++)qe(t)}O(t),t.skipBits(1);let u=O(t),f=O(t),p=16*(u+1),g=16*(f+1),y=p,w=g,m=t.readBits(1);if(m||t.skipBits(1),t.skipBits(1),t.readBits(1)){let I=O(t),v=O(t),M=O(t),z=O(t),U,j;if((h===0?o:0)===0)U=1,j=2-m;else{let Z=o===3?1:2,J=o===1?2:1;U=Z,j=J*(2-m)}y-=U*(I+v),w-=j*(M+z)}let A=2,T=2,S=2,x=0,k={num:1,den:1},E=null,_=null,N=null,F=null,L=t.pos;if(t.readBits(1)){if(t.readBits(1)){let Z=t.readBits(8);if(Z===255)k={num:t.readBits(16),den:t.readBits(16)};else{let J=Kl[Z];J&&(k=J)}}t.readBits(1)&&t.skipBits(1),t.readBits(1)&&(t.skipBits(3),x=t.readBits(1),t.readBits(1)&&(A=t.readBits(8),T=t.readBits(8),S=t.readBits(8))),t.readBits(1)&&(O(t),O(t)),t.readBits(1)&&(t.skipBits(32),t.skipBits(32),t.skipBits(1));let j=t.readBits(1);j&&Vl(t);let $=t.readBits(1);$&&Vl(t),(j||$)&&t.skipBits(1),t.skipBits(1),N=t.pos,F=t.readBits(1),F&&(t.skipBits(1),O(t),O(t),O(t),O(t),E=O(t),_=O(t))}if(E===null){P(_===null);let I=s&16;if((n===44||n===86||n===100||n===110||n===122||n===244)&&I)E=0,_=0;else{let v=u+1,M=f+1,z=(2-m)*M,U=na.find($=>$.level>=a)??Pe(na),j=Math.min(Math.floor(U.maxDpbMbs/(v*z)),16);E=j,_=j}}return P(_!==null),{emulationUnpreventedBytes:e,profileIdc:n,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:m,chromaFormatIdc:o,bitDepthLumaMinus8:c,bitDepthChromaMinus8:l,codedWidth:p,codedHeight:g,displayWidth:y,displayHeight:w,pixelAspectRatio:k,colourPrimaries:A,matrixCoefficients:S,transferCharacteristics:T,fullRangeFlag:x,numReorderFrames:E,maxDecFrameBuffering:_,vuiParametersFlagBitOffset:L,bitstreamRestrictionFlagBitOffset:N,bitstreamRestrictionFlag:F}}catch(e){return Y._error("Error parsing AVC SPS:",e),null}},Vl=r=>{let e=O(r);r.skipBits(4),r.skipBits(4);for(let t=0;t<=e;t++)O(r),O(r),r.skipBits(1);r.skipBits(5),r.skipBits(5),r.skipBits(5),r.skipBits(5)};var Sf=(r,e)=>{if(e.description){let n=(tr(e.description)[21]&3)+1;return $l(r,n)}else return sn(r)},ia=r=>r>>1&63,aa=r=>{try{let e=new le(an(r));e.skipBits(16),e.readBits(4);let t=e.readBits(3),i=e.readBits(1),{general_profile_space:n,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:l}=Tf(e,t);O(e);let h=O(e),d=0;h===3&&(d=e.readBits(1));let u=O(e),f=O(e),p=u,g=f;if(e.readBits(1)){let F=O(e),L=O(e),B=O(e),I=O(e),v=1,M=1,z=d===0?h:0;z===1?(v=2,M=2):z===2&&(v=2,M=1),p-=(F+L)*v,g-=(B+I)*M}let y=O(e),w=O(e);O(e);let b=e.readBits(1)?0:t,A=0;for(let F=b;F<=t;F++)O(e),A=O(e),O(e);O(e),O(e),O(e),O(e),O(e),O(e),e.readBits(1)&&e.readBits(1)&&Ef(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),O(e),O(e),e.skipBits(1));let T=O(e);if(vf(e,T),e.readBits(1)){let F=O(e);for(let L=0;L<F;L++)O(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let S=2,x=2,k=2,E=0,_=0,N={num:1,den:1};if(e.readBits(1)){let F=Cf(e,t);N=F.pixelAspectRatio,S=F.colourPrimaries,x=F.transferCharacteristics,k=F.matrixCoefficients,E=F.fullRangeFlag,_=F.minSpatialSegmentationIdc}return{displayWidth:p,displayHeight:g,pixelAspectRatio:N,colourPrimaries:S,transferCharacteristics:x,matrixCoefficients:k,fullRangeFlag:E,maxDecFrameBuffering:A+1,spsMaxSubLayersMinus1:t,spsTemporalIdNestingFlag:i,generalProfileSpace:n,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:o,generalConstraintIndicatorFlags:c,generalLevelIdc:l,chromaFormatIdc:h,bitDepthLumaMinus8:y,bitDepthChromaMinus8:w,minSpatialSegmentationIdc:_}}catch(e){return Y._error("Error parsing HEVC SPS:",e),null}},cn=r=>{try{let e=[],t=[],i=[],n=[];for(let l of sn(r)){let h=r.subarray(l.offset,l.offset+l.length),d=ia(h[0]);d===Se.VPS_NUT?e.push(h):d===Se.SPS_NUT?t.push(h):d===Se.PPS_NUT?i.push(h):(d===Se.PREFIX_SEI_NUT||d===Se.SUFFIX_SEI_NUT)&&n.push(h)}if(t.length===0||i.length===0)return null;let s=aa(t[0]);if(!s)return null;let a=0;if(i.length>0){let l=i[0],h=new le(an(l));h.skipBits(16),O(h),O(h),h.skipBits(1),h.skipBits(1),h.skipBits(3),h.skipBits(1),h.skipBits(1),O(h),O(h),qe(h),h.skipBits(1),h.skipBits(1),h.readBits(1)&&O(h),qe(h),qe(h),h.skipBits(1),h.skipBits(1),h.skipBits(1),h.skipBits(1);let d=h.readBits(1),u=h.readBits(1);!d&&!u?a=0:d&&!u?a=2:!d&&u?a=3:a=0}let o=[...e.length?[{arrayCompleteness:1,nalUnitType:Se.VPS_NUT,nalUnits:e}]:[],...t.length?[{arrayCompleteness:1,nalUnitType:Se.SPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Se.PPS_NUT,nalUnits:i}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:ia(n[0][0]),nalUnits:n}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(e){return Y._error("Error building HEVC Decoder Configuration Record:",e),null}},Tf=(r,e)=>{let t=r.readBits(2),i=r.readBits(1),n=r.readBits(5),s=0;for(let h=0;h<32;h++)s=s<<1|r.readBits(1);let a=new Uint8Array(6);for(let h=0;h<6;h++)a[h]=r.readBits(8);let o=r.readBits(8),c=[],l=[];for(let h=0;h<e;h++)c.push(r.readBits(1)),l.push(r.readBits(1));if(e>0)for(let h=e;h<8;h++)r.skipBits(2);for(let h=0;h<e;h++)c[h]&&r.skipBits(88),l[h]&&r.skipBits(8);return{general_profile_space:t,general_tier_flag:i,general_profile_idc:n,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:o}},Ef=r=>{for(let e=0;e<4;e++)for(let t=0;t<(e===3?2:6);t++)if(!r.readBits(1))O(r);else{let n=Math.min(64,1<<4+(e<<1));e>1&&qe(r);for(let s=0;s<n;s++)qe(r)}},vf=(r,e)=>{let t=[];for(let i=0;i<e;i++)t[i]=_f(r,i,e,t)},_f=(r,e,t,i)=>{let n=0,s=0,a=0;if(e!==0&&(s=r.readBits(1)),s){if(e===t){let c=O(r);a=e-(c+1)}else a=e-1;r.readBits(1),O(r);let o=i[a]??0;for(let c=0;c<=o;c++)r.readBits(1)||r.readBits(1);n=i[a]}else{let o=O(r),c=O(r);for(let l=0;l<o;l++)O(r),r.readBits(1);for(let l=0;l<c;l++)O(r),r.readBits(1);n=o+c}return n},Cf=(r,e)=>{let t=2,i=2,n=2,s=0,a=0,o={num:1,den:1};if(r.readBits(1)){let c=r.readBits(8);if(c===255)o={num:r.readBits(16),den:r.readBits(16)};else{let l=Kl[c];l&&(o=l)}}return r.readBits(1)&&r.readBits(1),r.readBits(1)&&(r.readBits(3),s=r.readBits(1),r.readBits(1)&&(t=r.readBits(8),i=r.readBits(8),n=r.readBits(8))),r.readBits(1)&&(O(r),O(r)),r.readBits(1),r.readBits(1),r.readBits(1),r.readBits(1)&&(O(r),O(r),O(r),O(r)),r.readBits(1)&&(r.readBits(32),r.readBits(32),r.readBits(1)&&O(r),r.readBits(1)&&Rf(r,!0,e)),r.readBits(1)&&(r.readBits(1),r.readBits(1),r.readBits(1),a=O(r),O(r),O(r),O(r),O(r)),{pixelAspectRatio:o,colourPrimaries:t,transferCharacteristics:i,matrixCoefficients:n,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Rf=(r,e,t)=>{let i=!1,n=!1,s=!1;e&&(i=r.readBits(1)===1,n=r.readBits(1)===1,(i||n)&&(s=r.readBits(1)===1,s&&(r.readBits(8),r.readBits(5),r.readBits(1),r.readBits(5)),r.readBits(4),r.readBits(4),s&&r.readBits(4),r.readBits(5),r.readBits(5),r.readBits(5)));for(let a=0;a<=t;a++){let o=r.readBits(1)===1,c=!0;o||(c=r.readBits(1)===1);let l=!1;c?O(r):l=r.readBits(1)===1;let h=1;l||(h=O(r)+1),i&&Hl(r,h,s),n&&Hl(r,h,s)}},Hl=(r,e,t)=>{for(let i=0;i<e;i++)O(r),O(r),t&&(O(r),O(r)),r.readBits(1)};var Yl=r=>{try{let e=te(r),t=0,i=e.getUint8(t++),n=e.getUint8(t++),s=n>>6&3,a=n>>5&1,o=n&31,c=e.getUint32(t,!1);t+=4;let l=r.subarray(t,t+6);t+=6;let h=e.getUint8(t++),d=(e.getUint8(t++)&15)<<8|e.getUint8(t++),u=e.getUint8(t++)&3,f=e.getUint8(t++)&3,p=e.getUint8(t++)&7,g=e.getUint8(t++)&7,y=e.getUint16(t,!1);t+=2;let w=e.getUint8(t++),m=w>>6&3,b=w>>3&7,A=w>>2&1,T=w&3,S=e.getUint8(t++),x=[];for(let k=0;k<S;k++){let E=e.getUint8(t++),_=E>>7&1,N=E&63,F=e.getUint16(t,!1);t+=2;let L=[];for(let B=0;B<F;B++){let I=e.getUint16(t,!1);t+=2,L.push(r.subarray(t,t+I)),t+=I}x.push({arrayCompleteness:_,nalUnitType:N,nalUnits:L})}return{configurationVersion:i,generalProfileSpace:s,generalTierFlag:a,generalProfileIdc:o,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:l,generalLevelIdc:h,minSpatialSegmentationIdc:d,parallelismType:u,chromaFormatIdc:f,bitDepthLumaMinus8:p,bitDepthChromaMinus8:g,avgFrameRate:y,constantFrameRate:m,numTemporalLayers:b,temporalIdNested:A,lengthSizeMinusOne:T,arrays:x}}catch(e){return Y._error("Error deserializing HEVC Decoder Configuration Record:",e),null}},Wl;(function(r){r[r.audAllowed=0]="audAllowed",r[r.beforeFirstVcl=1]="beforeFirstVcl",r[r.afterFirstVcl=2]="afterFirstVcl",r[r.eoBitstreamAllowed=3]="eoBitstreamAllowed",r[r.noMoreDataAllowed=4]="noMoreDataAllowed"})(Wl||(Wl={}));var Pf={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},ln=r=>{let e=new le(r);if(e.readBits(2)!==2)return null;let i=e.readBits(1),s=(e.readBits(1)<<1)+i;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let l=8;s>=2&&(l=e.readBits(1)?12:10);let h=e.readBits(3),d=0,u=0;if(h!==7)if(u=e.readBits(1),s===1||s===3){let k=e.readBits(1),E=e.readBits(1);d=!k&&!E?3:k&&!E?2:1,e.skipBits(1)}else d=1;else d=3,u=1;let f=e.readBits(16),p=e.readBits(16),g=f+1,y=p+1,w=g*y,m=Pe(Bt).level;for(let x of Bt)if(w<=x.maxPictureSize){m=x.level;break}let b=Pf[h],A=b?.colourPrimaries??2,T=b?.transferCharacteristics??2,S=b?.matrixCoefficients??2;return{profile:s,level:m,bitDepth:l,chromaSubsampling:d,videoFullRangeFlag:u,colourPrimaries:A,transferCharacteristics:T,matrixCoefficients:S}},Ql=r=>r.colourPrimaries!==2||r.transferCharacteristics!==2||r.matrixCoefficients!==2,Xl=function*(r){let e=new le(r),t=()=>{let i=0;for(let n=0;n<8;n++){let s=e.readAlignedByte();if(i+=(s&127)*2**(n*7),!(s&128))break;if(n===7&&s&128)return null}return i>2**32-1?null:i};for(;e.getBitsLeft()>=8;){e.skipBits(1);let i=e.readBits(4),n=e.readBits(1),s=e.readBits(1);e.skipBits(1),n&&e.skipBits(8);let a;if(s){let o=t();if(o===null)return;a=o}else a=Math.floor(e.getBitsLeft()/8);P(e.pos%8===0),yield{type:i,data:r.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},Xr=r=>{for(let{type:e,data:t}of Xl(r)){if(e!==1)continue;let i=new le(t),n=i.readBits(3),s=i.readBits(1),a=i.readBits(1),o=0,c=0,l=0;if(a)o=i.readBits(5);else{let _=i.readBits(1),N=0;if(_){if(i.skipBits(32),i.skipBits(32),i.readBits(1)){let I=0;for(;I<32&&!i.readBits(1);)I++;I<32&&i.skipBits(I)}N=i.readBits(1),N&&(l=i.readBits(5),i.skipBits(32),i.skipBits(5),i.skipBits(5))}let F=i.readBits(1),L=i.readBits(5);for(let B=0;B<=L;B++){i.skipBits(12);let I=i.readBits(5);if(B===0&&(o=I),I>7){let v=i.readBits(1);B===0&&(c=v)}if(N&&i.readBits(1)){let M=l+1;i.skipBits(M),i.skipBits(M),i.skipBits(1)}F&&i.readBits(1)&&i.skipBits(4)}}let h=i.readBits(4),d=i.readBits(4),u=h+1;i.skipBits(u);let f=d+1;i.skipBits(f);let p=0;if(a?p=0:p=i.readBits(1),p&&(i.skipBits(4),i.skipBits(3)),i.skipBits(1),i.skipBits(1),i.skipBits(1),!a){i.skipBits(1),i.skipBits(1),i.skipBits(1),i.skipBits(1);let _=i.readBits(1);_&&(i.skipBits(1),i.skipBits(1));let N=i.readBits(1),F=0;N?F=2:F=i.readBits(1),F>0&&(i.readBits(1)||i.skipBits(1)),_&&i.skipBits(3)}i.skipBits(1),i.skipBits(1),i.skipBits(1);let g=i.readBits(1),y=8;n===2&&g?y=i.readBits(1)?12:10:n<=2&&(y=g?10:8);let w=0;n!==1&&(w=i.readBits(1));let m=2,b=2,A=2;i.readBits(1)&&(m=i.readBits(8),b=i.readBits(8),A=i.readBits(8));let S=0,x=1,k=1,E=0;return w?S=i.readBits(1):m===1&&b===13&&A===0?(S=1,x=0,k=0):(S=i.readBits(1),n===0?(x=1,k=1):n===1?(x=0,k=0):y===12?(x=i.readBits(1),k=x?i.readBits(1):0):(x=1,k=0),x&&k&&(E=i.readBits(2))),{profile:n,level:o,tier:c,bitDepth:y,monochrome:w,chromaSubsamplingX:x,chromaSubsamplingY:k,chromaSamplePosition:E,videoFullRangeFlag:S,colourPrimaries:m,transferCharacteristics:b,matrixCoefficients:A}}return null},Zl=r=>r.colourPrimaries!==2||r.transferCharacteristics!==2||r.matrixCoefficients!==2,dn=r=>{if(r.length<36)return null;let t=te(r);return t.getUint32(4)!==1768124518||t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}};var Jl=(r,e,t)=>{switch(r){case"avc":{for(let i of kf(t,e)){let n=t[i.offset],s=ql(n);if(s>=nt.NON_IDR_SLICE&&s<=nt.SLICE_DPC)return"delta";if(s===nt.IDR)return"key";if(s===nt.SEI&&!ea()){let a=t.subarray(i.offset,i.offset+i.length),o=an(a),c=1;do{let l=0;for(;;){let u=o[c++];if(u===void 0||(l+=u,u<255))break}let h=0;for(;;){let u=o[c++];if(u===void 0||(h+=u,u<255))break}if(l===6){let u=new le(o);u.pos=8*c;let f=O(u),p=u.readBits(1);if(f===0&&p===1)return"key"}c+=h}while(c<o.length-1)}}return"delta"}case"hevc":{for(let i of Sf(t,e)){let n=ia(t[i.offset]);if(n<Se.BLA_W_LP)return"delta";if(n<=Se.RSV_IRAP_VCL23)return"key"}return"delta"}case"vp8":return(t[0]&1)===0?"key":"delta";case"vp9":{let i=new le(t);if(i.readBits(2)!==2)return null;let n=i.readBits(1);return(i.readBits(1)<<1)+n===3&&i.skipBits(1),i.readBits(1)?null:i.readBits(1)===0?"key":"delta"}case"av1":{let i=!1;for(let{type:n,data:s}of Xl(t))if(n===1){let a=new le(s);a.skipBits(4),i=!!a.readBits(1)}else if(n===3||n===6||n===7){if(i)return"key";let a=new le(s);return a.readBits(1)?null:a.readBits(2)===0?"key":"delta"}return null}case"prores":return"key";default:rr(r),P(!1)}},rn;(function(r){r[r.STREAMINFO=0]="STREAMINFO",r[r.VORBIS_COMMENT=4]="VORBIS_COMMENT",r[r.PICTURE=6]="PICTURE"})(rn||(rn={}));var oa=[2,1,2,3,3,4,4,5];var Q0=[64*2,69*2,96*2,64*2,70*2,96*2,80*2,87*2,120*2,80*2,88*2,120*2,96*2,104*2,144*2,96*2,105*2,144*2,112*2,121*2,168*2,112*2,122*2,168*2,128*2,139*2,192*2,128*2,140*2,192*2,160*2,174*2,240*2,160*2,175*2,240*2,192*2,208*2,288*2,192*2,209*2,288*2,224*2,243*2,336*2,224*2,244*2,336*2,256*2,278*2,384*2,256*2,279*2,384*2,320*2,348*2,480*2,320*2,349*2,480*2,384*2,417*2,576*2,384*2,418*2,576*2,448*2,487*2,672*2,448*2,488*2,672*2,512*2,557*2,768*2,512*2,558*2,768*2,640*2,696*2,960*2,640*2,697*2,960*2,768*2,835*2,1152*2,768*2,836*2,1152*2,896*2,975*2,1344*2,896*2,976*2,1344*2,1024*2,1114*2,1536*2,1024*2,1115*2,1536*2,1152*2,1253*2,1728*2,1152*2,1254*2,1728*2,1280*2,1393*2,1920*2,1280*2,1394*2,1920*2];var X0=new Uint8Array([5,4,65,67,45,51]),Z0=new Uint8Array([5,4,69,65,67,51]);var ed=r=>{if(r.length<2)return null;let e=new le(r),t=e.readBits(13),i=e.readBits(3),n=[];for(let s=0;s<=i&&!(Math.ceil(e.pos/8)+3>r.length);s++){let a=e.readBits(2),o=e.readBits(5);e.skipBits(1),e.skipBits(1);let c=e.readBits(3),l=e.readBits(3),h=e.readBits(1);e.skipBits(3);let d=e.readBits(4),u=0;d>0?u=e.readBits(9):e.skipBits(1),n.push({fscod:a,fscod2:null,bsid:o,bsmod:c,acmod:l,lfeon:h,numDepSub:d,chanLoc:u})}return n.length===0?null:{dataRate:t,substreams:n}},td=r=>{let e=r.substreams[0];return P(e),e.fscod<3?tn[e.fscod]:e.fscod2!==null&&e.fscod2<3?zl[e.fscod2]:null},rd=r=>{let e=r.substreams[0];P(e);let t=oa[e.acmod]+e.lfeon;if(e.numDepSub>0){let i=[2,2,1,1,2,2,2,1,1];for(let n=0;n<9;n++)e.chanLoc&1<<8-n&&(t+=i[n])}return t};var If=1683496997,Ff=18,Bf=10;var Gl=32,ca=20,Df=8,Of=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],Mf=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],Nf=[16,16,20,20,0,24,24,0],nn=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],Uf=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],Lf=8,zf=44646,Vf=[32e3,44100,48e3,0],Hf=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],Wf=[512,1024,2048,4096],Gf=r=>{let e=$f(r),t=te(r),i=e?Math.ceil(e.frameSize/4)*4:0,n=null;for(;i+4<=r.length&&t.getUint32(i)===If;){let a=qf(r.subarray(i));if(!a)break;n??=a,i+=a.frameSize}if(e)return{frameSize:n?i:e.frameSize,sampleRate:e.sampleRate,numberOfChannels:e.numberOfChannels,sampleCount:e.sampleCount,channelLayout:e.channelLayout,pcmResolution:e.pcmResolution,bitRate:e.bitRate,core:e,hasExtensions:n!==null};if(!n?.asset)return null;let{asset:s}=n;return{frameSize:i,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},hn=r=>{let e=Gf(r);return e?.core?e.hasExtensions?"dtsh":"dtsc":null},$f=r=>{if(r.length<Ff||r[0]!==127||r[1]!==254||r[2]!==128||r[3]!==1)return null;let e=new le(r);if(e.skipBits(32),e.skipBits(1),e.readBits(5)!==Gl-1)return null;let t=e.readBits(1),i=e.readBits(7)+1;if(i%Df!==0)return null;let n=e.readBits(14)+1;if(n<96)return null;let s=e.readBits(6);if(s>=nn.length)return null;let a=Of[e.readBits(4)];if(a===0)return null;let o=Mf[e.readBits(5)];if(e.readBits(1)!==0)return null;e.skipBits(4),e.skipBits(5);let c=e.readBits(2);if(c===3)return null;e.skipBits(1),t&&e.skipBits(16),e.skipBits(7);let l=Nf[e.readBits(3)];if(l===0)return null;let h=c!==0;return{frameSize:n,sampleRate:a,numberOfChannels:nn[s]+(h?1:0),sampleCount:i*Gl,channelLayout:Uf[s]|(h?Lf:0),amode:s,lfePresent:h,bitRate:o,pcmResolution:l}},qf=r=>{if(r.length<Bf||r[0]!==100||r[1]!==88||r[2]!==32||r[3]!==37)return null;let e=new le(r);e.skipBits(32),e.skipBits(8);let t=e.readBits(2),i=e.readBits(1),n=8+4*i,s=16+4*i;e.skipBits(n);let a=e.readBits(s)+1,o={frameSize:a,asset:null};if(!e.readBits(1))return o;let c=Vf[e.readBits(2)],l=512*(e.readBits(3)+1);e.readBits(1)&&e.skipBits(36);let h=e.readBits(3)+1,d=e.readBits(3)+1,u=[];for(let w=0;w<h;w++)u.push(e.readBits(t+1));for(let w of u)e.skipBits(8*ji(w));if(e.readBits(1)){e.skipBits(2);let w=e.readBits(2)+1<<2,m=e.readBits(2)+1;e.skipBits(m*w)}for(let w=0;w<d;w++)e.skipBits(s);e.skipBits(9),e.skipBits(3),e.readBits(1)&&e.skipBits(4),e.readBits(1)&&e.skipBits(24),e.readBits(1)&&e.skipBits(8*(e.readBits(10)+1));let f=e.readBits(5)+1,p=Hf[e.readBits(4)],g=e.readBits(8)+1,y=0;if(e.readBits(1)&&(g>2&&e.skipBits(1),g>6&&e.skipBits(1),e.readBits(1))){let w=e.readBits(2)+1<<2;y=e.readBits(w)}return c===0||e.getBitsLeft()<0?o:{frameSize:a,asset:{sampleRate:p,numberOfChannels:g,sampleCount:Math.round(l*p/c),channelLayout:y,pcmResolution:f}}},id=r=>{if(r.length<ca)return null;let e=te(r),t=e.getUint32(0);if(t===0)return null;let i=new le(r);i.seekToByte(13);let n=i.readBits(2);i.skipBits(5);let s=i.readBits(1),a=i.readBits(6);i.skipBits(14),i.skipBits(1),i.skipBits(3);let o=i.readBits(16),c=null;return o!==0?c=jf(o):a<nn.length&&(c=nn[a]+s),{sampleRate:t,maxBitrate:e.getUint32(4),avgBitrate:e.getUint32(8),pcmSampleDepth:r[12],sampleCount:Wf[n],channelLayout:o,numberOfChannels:c}};var jf=r=>ji(r)+ji(r&zf);var Dt=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Kf=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],nw=[...Kf,...Dt];var na=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}];var Bt=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}];var nd=".01.01.01.01.00",sd=".0.110.01.01.01.0",Zr=["ap4x","ap4h","apch","apcn","apcs","apco"],ad=["dtsc","dtsh","dtsl","dtse"];var un=r=>{let{codec:e,codecDescription:t,colorSpace:i,avcCodecInfo:n,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:o,proresFormat:c}=r;if(e==="avc"){if(P(r.avcType!==null),n){let l=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${r.avcType}.${wt(l)}`}if(!t||t.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${r.avcType}.${wt(t.subarray(1,4))}`}else if(e==="hevc"){let l,h,d,u,f,p;if(s)l=s.generalProfileSpace,h=s.generalProfileIdc,d=Ys(s.generalProfileCompatibilityFlags),u=s.generalTierFlag,f=s.generalLevelIdc,p=[...s.generalConstraintIndicatorFlags];else{if(!t||t.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let y=te(t),w=y.getUint8(1);l=w>>6&3,h=w&31,d=Ys(y.getUint32(2)),u=w>>5&1,f=y.getUint8(12),p=[];for(let m=0;m<6;m++)p.push(y.getUint8(6+m))}let g="hev1.";for(g+=["","A","B","C"][l]+h,g+=".",g+=d.toString(16).toUpperCase(),g+=".",g+=u===0?"L":"H",g+=f;p.length>0&&p[p.length-1]===0;)p.pop();return p.length>0&&(g+=".",g+=p.map(y=>y.toString(16).toUpperCase()).join(".")),g}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let m=r.width*r.height,b=Pe(Bt).level;for(let A of Bt)if(m<=A.maxPictureSize){b=A.level;break}return`vp09.00.${b.toString().padStart(2,"0")}.08`}let l=a.profile.toString().padStart(2,"0"),h=a.level.toString().padStart(2,"0"),d=a.bitDepth.toString().padStart(2,"0"),u=a.chromaSubsampling.toString().padStart(2,"0"),f=a.colourPrimaries.toString().padStart(2,"0"),p=a.transferCharacteristics.toString().padStart(2,"0"),g=a.matrixCoefficients.toString().padStart(2,"0"),y=a.videoFullRangeFlag.toString().padStart(2,"0"),w=`vp09.${l}.${h}.${d}.${u}`;return w+=`.${f}.${p}.${g}.${y}`,w.endsWith(nd)&&(w=w.slice(0,-nd.length)),w}else if(e==="av1"){if(!o){let A=r.width*r.height,T=Pe(Bt).level;for(let S of Bt)if(A<=S.maxPictureSize){T=S.level;break}return`av01.0.${T.toString().padStart(2,"0")}M.08`}let l=o.profile,h=o.level.toString().padStart(2,"0"),d=o.tier?"H":"M",u=o.bitDepth.toString().padStart(2,"0"),f=o.monochrome?"1":"0",p=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),g=i?.primaries?qs[i.primaries]:1,y=i?.transfer?js[i.transfer]:1,w=i?.matrix?Ks[i.matrix]:1,m=i?.fullRange?1:0,b=`av01.${l}.${h}${d}.${u}`;return b+=`.${f}.${p.toString().padStart(3,"0")}`,b+=`.${g.toString().padStart(2,"0")}`,b+=`.${y.toString().padStart(2,"0")}`,b+=`.${w.toString().padStart(2,"0")}`,b+=`.${m}`,b.endsWith(sd)&&(b=b.slice(0,-sd.length)),b}else{if(e==="prores")return c??"apch";e!==null&&rr(e)}}throw new TypeError(`Unhandled codec '${e}'.`)},fn=r=>{switch(r.codec){case"avc":{let e=r.avcCodecInfo?.sequenceParameterSets[0];if(!e&&r.codecDescription&&(e=jl(r.codecDescription)?.sequenceParameterSets[0]),e){let t=sa(e);if(t)return{primaries:je[t.colourPrimaries],transfer:Ke[t.transferCharacteristics],matrix:Ye[t.matrixCoefficients],fullRange:!!t.fullRangeFlag}}}break;case"hevc":{let e=r.hevcCodecInfo?.arrays.find(t=>t.nalUnitType===Se.SPS_NUT)?.nalUnits[0];if(!e&&r.codecDescription&&(e=Yl(r.codecDescription)?.arrays.find(t=>t.nalUnitType===Se.SPS_NUT)?.nalUnits[0]),e){let t=aa(e);if(t)return{primaries:je[t.colourPrimaries],transfer:Ke[t.transferCharacteristics],matrix:Ye[t.matrixCoefficients],fullRange:!!t.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(r.vp9CodecInfo)return{primaries:je[r.vp9CodecInfo.colourPrimaries],transfer:Ke[r.vp9CodecInfo.transferCharacteristics],matrix:Ye[r.vp9CodecInfo.matrixCoefficients],fullRange:!!r.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(r.av1CodecInfo)return{primaries:je[r.av1CodecInfo.colourPrimaries],transfer:Ke[r.av1CodecInfo.transferCharacteristics],matrix:Ye[r.av1CodecInfo.matrixCoefficients],fullRange:!!r.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(r.proresCodecInfo)return{primaries:je[r.proresCodecInfo.colourPrimaries],transfer:Ke[r.proresCodecInfo.transferCharacteristics],matrix:Ye[r.proresCodecInfo.matrixCoefficients],fullRange:r.proresCodecInfo.fullRange};break}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}};var pn=r=>{let{codec:e,codecDescription:t,aacCodecInfo:i,dtsFormat:n}=r;if(e==="aac"){if(!i)throw new TypeError("AAC codec info must be provided.");if(i.isMpeg2)return"mp4a.67";{let s;return i.objectType!==null?s=i.objectType:s=en(t).objectType,`mp4a.40.${s}`}}else{if(e==="mp3")return"mp3";if(e==="opus")return"opus";if(e==="vorbis")return"vorbis";if(e==="flac")return"flac";if(e==="ac3")return"ac-3";if(e==="eac3")return"ec-3";if(e==="dts")return n??"dtsc";if(e&&Dt.includes(e))return e}throw new TypeError(`Unhandled codec '${e}'.`)};var mn=48e3,Yf=/^pcm-([usf])(\d+)(be)?$/,od=r=>{if(P(Dt.includes(r)),r==="ulaw")return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if(r==="alaw")return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};let e=Yf.exec(r);P(e);let t;e[1]==="u"?t="unsigned":e[1]==="s"?t="signed":t="float";let i=Number(e[2])/8,n=e[3]!=="be",s=r==="pcm-u8"?2**7:0;return{dataType:t,sampleSize:i,littleEndian:n,silentValue:s}};var sw=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Zr];var ar=class{constructor(e){this.input=e}dispose(){}};var xt=new Uint8Array(0),Te=class r{constructor(e,t,i,n,s=-1,a,o){if(this.data=e,this.type=t,this.timestamp=i,this.duration=n,this.sequenceNumber=s,e===xt&&a===void 0)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(a===void 0&&(a=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(t!=="key"&&t!=="delta")throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(n)||n<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(s))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(a)||a<0)throw new TypeError("byteLength must be a non-negative integer.");if(o!==void 0&&(typeof o!="object"||!o))throw new TypeError("sideData, when provided, must be an object.");if(o?.alpha!==void 0&&!(o.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(o?.alphaByteLength!==void 0&&(!Number.isInteger(o.alphaByteLength)||o.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=a,this.sideData=o??{},this.sideData.alpha&&this.sideData.alphaByteLength===void 0&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===xt}get microsecondTimestamp(){return Math.trunc(Zs*this.timestamp)}get microsecondDuration(){return Math.trunc(Zs*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if(typeof EncodedVideoChunk>"u")throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if(typeof EncodedVideoChunk>"u")throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if(typeof EncodedAudioChunk>"u")throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");let i=new Uint8Array(e.byteLength);return e.copyTo(i),new r(i,e.type,e.timestamp/1e6,(e.duration??0)/1e6,void 0,void 0,t)}clone(e){if(e!==void 0&&(typeof e!="object"||e===null))throw new TypeError("options, when provided, must be an object.");if(e?.data!==void 0&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(e?.type!==void 0&&e.type!=="key"&&e.type!=="delta")throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(e?.timestamp!==void 0&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(e?.duration!==void 0&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(e?.sequenceNumber!==void 0&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(e?.sideData!==void 0&&(typeof e.sideData!="object"||e.sideData===null))throw new TypeError("options.sideData, when provided, must be an object.");return new r(e?.data??this.data,e?.type??this.type,e?.timestamp??this.timestamp,e?.duration??this.duration,e?.sequenceNumber??this.sequenceNumber,this.byteLength,e?.sideData??this.sideData)}};var cd=r=>{let t=(r.hasVideo?"video/":r.hasAudio?"audio/":"application/")+(r.isQuickTime?"quicktime":"mp4");if(r.codecStrings.length>0){let i=[...new Set(r.codecStrings)];t+=`; codecs="${i.join(", ")}"`}return t},ld=r=>{let e=te(r),t=0,i=e.getUint8(t);t+=1,t+=3;let n=wt(r.subarray(t,t+16));t+=16;let s=null;if(i>0){let o=e.getUint32(t);if(t+=4,o>0){s=[];for(let c=0;c<o;c++)s.push(wt(r.subarray(t,t+16))),t+=16}}let a=e.getUint32(t);return t+=4,{systemId:n,keyIds:s,data:r.slice(t,t+a)}},dd=(r,e)=>r.systemId===e.systemId&&Ml(r.data,e.data);var Ot=8,or=16,st=r=>{let e=D(r),t=_e(r,4),i=8;e===1&&(e=Ae(r),i=16);let s=e-i;return s<0?null:{name:t,totalSize:e,headerSize:i,contentSize:s}},At=r=>at(r)/65536,gn=r=>at(r)/1073741824,yn=r=>{let e=0;for(let t=0;t<4;t++){e<<=7;let i=H(r);if(e|=i&127,(i&128)===0)break}return e},ze=r=>{let e=pe(r);return r.skip(2),e=Math.min(e,r.remainingLength),De.decode(K(r,e))},hd=r=>{let e=st(r);if(!e||e.name!=="data"||r.remainingLength<8)return null;let t=D(r);r.skip(4);let i=K(r,e.contentSize-8);switch(t){case 1:return De.decode(i);case 2:return new Gs("utf-16be").decode(i);case 13:return new bt(i,"image/jpeg");case 14:return new bt(i,"image/png");case 27:return new bt(i,"image/bmp");default:return i}};var la=16,ot=new Uint32Array(256),cr=new Uint32Array(256),lr=new Uint32Array(256),dr=new Uint32Array(256),hr=new Uint32Array(256),be=new Uint32Array(256),ud=new Uint32Array(10),fd=!1,Qf=()=>{let r=new Uint8Array(256),e=new Uint8Array(256),t=new Uint8Array(256);for(let s=0,a=1;s<256;s++)t[s]=a,e[a]=s,a=a^a<<1^(a&128?283:0);let i=(s,a)=>s&&a?t[(e[s]+e[a])%255]:0;r[0]=99;for(let s=1;s<256;s++){let a=t[255-e[s]],o=a^a<<1^a<<2^a<<3^a<<4;o=o>>>8^o&255^99,r[s]=o}for(let s=0;s<256;s++){let a=r[s],o=r.indexOf(s);ot[s]=a<<24|a<<16|a<<8|a,be[s]=o<<24|o<<16|o<<8|o;let c=i(o,14),l=i(o,9),h=i(o,13),d=i(o,11),u=c<<24|l<<16|h<<8|d;cr[s]=u,lr[s]=u>>>8|u<<24,dr[s]=u>>>16|u<<16,hr[s]=u>>>24|u<<8}let n=1;for(let s=0;s<10;s++)ud[s]=n<<24,n=n<<1^(n&128?283:0);fd=!0},wn=class{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(la/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(la),this.out=new Uint8Array(la),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){P(e.byteLength===16),P(t.byteLength===16),fd||Qf();let i=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=n.getUint32(0,!1),this.iv[1]=n.getUint32(4,!1),this.iv[2]=n.getUint32(8,!1),this.iv[3]=n.getUint32(12,!1);for(let s=4;s<44;s+=4){let a=this.roundkey[s-1];this.roundkey[s]=this.roundkey[s-4]^ot[a>>>16&255]&4278190080^ot[a>>>8&255]&16711680^ot[a>>>0&255]&65280^ot[a>>>24&255]&255^ud[s/4-1],this.roundkey[s+1]=this.roundkey[s-3]^this.roundkey[s],this.roundkey[s+2]=this.roundkey[s-2]^this.roundkey[s+1],this.roundkey[s+3]=this.roundkey[s-1]^this.roundkey[s+2]}for(let s=0,a=40;s<a;s+=4,a-=4)for(let o=0;o<4;o++){let c=this.roundkey[s+o];this.roundkey[s+o]=this.roundkey[a+o],this.roundkey[a+o]=c}for(let s=4;s<40;s+=4)for(let a=0;a<4;a++){let o=this.roundkey[s+a];this.roundkey[s+a]=cr[ot[o>>>24&255]&255]^lr[ot[o>>>16&255]&255]^dr[ot[o>>>8&255]&255]^hr[ot[o>>>0&255]&255]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],n=this.inView.getUint32(12,!1)^this.roundkey[3],s=this.inView.getUint32(0,!1),a=this.inView.getUint32(4,!1),o=this.inView.getUint32(8,!1),c=this.inView.getUint32(12,!1),l,h,d,u;for(let w=1;w<10;w++){let m=w*4;l=cr[e>>>24]^lr[n>>>16&255]^dr[i>>>8&255]^hr[t&255]^this.roundkey[m],h=cr[t>>>24]^lr[e>>>16&255]^dr[n>>>8&255]^hr[i&255]^this.roundkey[m+1],d=cr[i>>>24]^lr[t>>>16&255]^dr[e>>>8&255]^hr[n&255]^this.roundkey[m+2],u=cr[n>>>24]^lr[i>>>16&255]^dr[t>>>8&255]^hr[e&255]^this.roundkey[m+3],e=l,t=h,i=d,n=u}let f=be[e>>>24&255]&4278190080^be[n>>>16&255]&16711680^be[i>>>8&255]&65280^be[t>>>0&255]&255^this.roundkey[40],p=be[t>>>24&255]&4278190080^be[e>>>16&255]&16711680^be[n>>>8&255]&65280^be[i>>>0&255]&255^this.roundkey[41],g=be[i>>>24&255]&4278190080^be[t>>>16&255]&16711680^be[e>>>8&255]&65280^be[n>>>0&255]&255^this.roundkey[42],y=be[n>>>24&255]&4278190080^be[i>>>16&255]&16711680^be[t>>>8&255]&65280^be[e>>>0&255]&255^this.roundkey[43];this.outView.setUint32(0,f^this.iv[0],!1),this.outView.setUint32(4,p^this.iv[1],!1),this.outView.setUint32(8,g^this.iv[2],!1),this.outView.setUint32(12,y^this.iv[3],!1),this.iv[0]=s,this.iv[1]=a,this.iv[2]=o,this.iv[3]=c}};var bn=class r extends ar{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.movieMatrix=Hs,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.tracks.map(e=>e.trackBacking)}async getMimeType(){await this.readMetadata();let e=await this.getTrackBackings(),t=await Promise.all(e.map(i=>i.getDecoderConfig().then(n=>n?.codec??null)));return cd({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(i=>i.info?.type==="video"),hasAudio:this.tracks.some(i=>i.info?.type==="audio"),codecStrings:t.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??=(async()=>{let e=0,t=!1,i=!1;for(;;){let n=this.reader.requestSliceRange(e,Ot,or);if(V(n)&&(n=await n),!n)break;let s=e,a=st(n);if(!a)break;if(a.name==="ftyp"||a.name==="styp"){let o=_e(n,4);this.isQuickTime=o==="qt "}else if(a.name==="moov"){let o=this.reader.requestSlice(n.filePos,a.contentSize);if(V(o)&&(o=await o),!o)break;this.moovSlice=o,this.readContiguousBoxes(this.moovSlice);for(let c of this.tracks){let l=c.editListPreviousSegmentDurations/this.movieTimescale;c.editListOffset-=Math.round(l*c.timescale)}t=this.isFragmented&&this.reader.fileSize!==null&&this.reader.fileSize>s+a.totalSize,i=!0;break}else if(a.name==="moof"){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');await this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}e=s+a.totalSize}if(!i&&this.input._initInput&&await this.copyMetadataFromInitInput(this.input._initInput),t){P(this.reader.fileSize!==null);let n=this.reader.requestSlice(this.reader.fileSize-4,4);V(n)&&(n=await n),P(n);let s=D(n),a=this.reader.fileSize-s;if(a>=0&&a<=this.reader.fileSize-or){let o=this.reader.requestSliceRange(a,Ot,or);if(V(o)&&(o=await o),o){let c=st(o);if(c&&c.name==="mfra"){let l=this.reader.requestSlice(o.filePos,c.contentSize);V(l)&&(l=await l),l&&this.readContiguousBoxes(l)}}}}})()}async copyMetadataFromInitInput(e){let t=await e._getDemuxer();if(t.constructor!==r)throw new Error("Init input must match the input's format.");await t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.movieMatrix=t.movieMatrix,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(let i of t.tracks){let n={id:i.id,demuxer:this,trackBacking:null,disposition:i.disposition,timescale:i.timescale,durationInMediaTimescale:i.durationInMediaTimescale,durationInMovieTimescale:i.durationInMovieTimescale,matrix:i.matrix,internalCodecId:i.internalCodecId,name:i.name,languageCode:i.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:i.editListPreviousSegmentDurations,editListOffset:i.editListOffset,encryptionInfo:i.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,maxBitrate:i.maxBitrate,avgBitrate:i.avgBitrate,info:i.info};if(i.trackBacking){if(P(n.info),n.info.type==="video"&&n.info.width!==-1){let s=n;n.trackBacking=new An(s),this.tracks.push(n)}else if(n.info.type==="audio"&&n.info.numberOfChannels!==-1){let s=n;n.trackBacking=new kn(s),this.tracks.push(n)}}}}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;let t={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=t,e.sampleTableByteOffset===null)return t;P(this.moovSlice);let i=this.moovSlice.slice(e.sampleTableByteOffset);if(this.currentTrack=e,this.traverseBox(i),this.currentTrack=null,e.info?.type==="audio"&&e.info.codec&&Dt.includes(e.info.codec)&&t.sampleCompositionTimeOffsets.length===0){P(e.info?.type==="audio");let s=od(e.info.codec),a=[],o=[];for(let c=0;c<t.sampleToChunk.length;c++){let l=t.sampleToChunk[c],h=t.sampleToChunk[c+1],d=(h?h.startChunkIndex:t.chunkOffsets.length)-l.startChunkIndex;for(let u=0;u<d;u++){let f=l.startSampleIndex+u*l.samplesPerChunk,p=f+l.samplesPerChunk,g=re(t.sampleTimingEntries,f,k=>k.startIndex),y=t.sampleTimingEntries[g],w=re(t.sampleTimingEntries,p,k=>k.startIndex),m=t.sampleTimingEntries[w],b=y.startDecodeTimestamp+(f-y.startIndex)*y.delta,T=m.startDecodeTimestamp+(p-m.startIndex)*m.delta-b,S=Pe(a);S&&S.delta===T?S.count++:a.push({startIndex:l.startChunkIndex+u,startDecodeTimestamp:b,count:1,delta:T});let x=l.samplesPerChunk*s.sampleSize*e.info.numberOfChannels;o.push(x)}l.startSampleIndex=l.startChunkIndex,l.samplesPerChunk=1}t.sampleTimingEntries=a,t.sampleSizes=o}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(let s of t.sampleTimingEntries)for(let a=0;a<s.count;a++)t.presentationTimestamps.push({presentationTimestamp:s.startDecodeTimestamp+a*s.delta,sampleIndex:s.startIndex+a});for(let s of t.sampleCompositionTimeOffsets)for(let a=0;a<s.count;a++){let o=s.startIndex+a,c=t.presentationTimestamps[o];c&&(c.presentationTimestamp+=s.offset)}t.presentationTimestamps.sort((s,a)=>s.presentationTimestamp-a.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let s=0;s<t.presentationTimestamps.length;s++)t.presentationTimestampIndexMap[t.presentationTimestamps[s].sampleIndex]=s}return t}async readFragment(e){if(this.lastReadFragment?.moofOffset===e)return this.lastReadFragment;let t=this.reader.requestSliceRange(e,Ot,or);V(t)&&(t=await t),P(t);let i=st(t);P(i?.name==="moof");let n=this.reader.requestSlice(e,i.totalSize);V(n)&&(n=await n),P(n),this.traverseBox(n);let s=this.lastReadFragment;P(s&&s.moofOffset===e);for(let[,a]of s.trackData){let o=a.track,{fragmentPositionCache:c}=o;if(!a.startTimestampIsFinal){let h=o.fragmentLookupTable.find(d=>d.moofOffset===s.moofOffset);if(h)da(a,h.timestamp);else{let d=re(c,s.moofOffset-1,u=>u.moofOffset);if(d!==-1){let u=c[d];da(a,u.endTimestamp)}}a.startTimestampIsFinal=!0}let l=re(c,a.startTimestamp,h=>h.startTimestamp);if((l===-1||c[l].moofOffset!==s.moofOffset)&&c.splice(l+1,0,{moofOffset:s.moofOffset,startTimestamp:a.startTimestamp,endTimestamp:a.endTimestamp}),a.encryptionAuxInfo&&o.encryptionInfo){let h=await bd(this.reader,o.encryptionInfo,a.encryptionAuxInfo);for(let d=0;d<Math.min(a.samples.length,h.length);d++){let u=h[d];a.samples[d].encryption=u}}}return s}readContiguousBoxes(e){let t=e.filePos;for(;e.filePos-t<=e.length-Ot&&this.traverseBox(e););}*iterateContiguousBoxes(e){let t=e.filePos;for(;e.filePos-t<=e.length-Ot;){let i=e.filePos,n=st(e);if(!n)break;yield{boxInfo:n,slice:e},e.filePos=i+n.totalSize}}traverseBox(e){let t=e.filePos,i=st(e);if(!i)return!1;let n=e.filePos,s=t+i.totalSize;switch(i.name){case"mdia":case"minf":case"dinf":case"mfra":case"edts":case"sinf":case"schi":this.readContiguousBoxes(e.slice(n,i.contentSize));break;case"mvhd":{let a=H(e);e.skip(3),a===1?(e.skip(16),this.movieTimescale=D(e),this.movieDurationInTimescale=Ae(e)):(e.skip(8),this.movieTimescale=D(e),this.movieDurationInTimescale=D(e)),e.skip(8+2*4),this.movieMatrix=pd(e)}break;case"trak":{let a={id:-1,demuxer:this,trackBacking:null,disposition:{...Ji,primary:!1},info:null,timescale:-1,durationInMovieTimescale:-1,durationInMediaTimescale:-1,matrix:Hs,internalCodecId:null,name:null,languageCode:nr,sampleTableByteOffset:-1,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:0,editListOffset:0,encryptionInfo:null,encryptionAuxInfo:null,frmaCodecString:null,maxBitrate:null,avgBitrate:null};if(this.currentTrack=a,this.readContiguousBoxes(e.slice(n,i.contentSize)),a.id!==-1&&a.timescale!==-1&&a.info!==null){if(a.info.type==="video"&&a.info.width!==-1){let o=a;a.trackBacking=new An(o),this.tracks.push(a)}else if(a.info.type==="audio"&&a.info.numberOfChannels!==-1){let o=a;a.trackBacking=new kn(o),this.tracks.push(a)}}this.currentTrack=null}break;case"tkhd":{let a=this.currentTrack;if(!a)break;let o=H(e),l=!!(ct(e)&1);if(a.disposition.default=l,o===0)e.skip(8),a.id=D(e),e.skip(4),a.durationInMovieTimescale=D(e);else if(o===1)e.skip(16),a.id=D(e),e.skip(4),a.durationInMovieTimescale=Ae(e);else throw new Error(`Incorrect track header version ${o}.`);e.skip(2*4+2+2+2+2);let h=pd(e);a.matrix=er(h,this.movieMatrix)}break;case"elst":{let a=this.currentTrack;if(!a)break;let o=H(e);e.skip(3);let c=!1,l=0,h=D(e);for(let d=0;d<h;d++){let u=o===1?Ae(e):D(e),f=o===1?Ad(e):at(e),p=At(e);if(c){Y._warn("Unsupported edit list: multiple edits are not currently supported. Only using first edit.");break}if(f===-1){l+=u;continue}if(p!==1){Y._warn("Unsupported edit list entry: media rate must be 1.");break}a.editListPreviousSegmentDurations=l,a.editListOffset=f,c=!0}}break;case"mdhd":{let a=this.currentTrack;if(!a)break;let o=H(e);e.skip(3),o===0?(e.skip(8),a.timescale=D(e),a.durationInMediaTimescale=D(e)):o===1&&(e.skip(16),a.timescale=D(e),a.durationInMediaTimescale=Ae(e));let c=pe(e);if(c>0){a.languageCode="";for(let l=0;l<3;l++)a.languageCode=String.fromCharCode(96+(c&31))+a.languageCode,c>>=5;Ki(a.languageCode)||(a.languageCode=nr)}}break;case"hdlr":{let a=this.currentTrack;if(!a)break;e.skip(8);let o=_e(e,4);o==="vide"?a.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:{...Gi},avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:o==="soun"&&(a.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{let a=this.currentTrack;if(!a)break;a.sampleTableByteOffset=t,this.readContiguousBoxes(e.slice(n,i.contentSize))}break;case"stsd":{let a=this.currentTrack;if(!a||a.info===null||a.sampleTable)break;let o=H(e);e.skip(3);let c=D(e);for(let l=0;l<c;l++){let h=e.filePos,d=st(e);if(!d)break;a.internalCodecId=d.name;let u=d.name.toLowerCase();if(a.info.type==="video"){e.skip(6*1+2+2+2+3*4),a.info.width=pe(e),a.info.height=pe(e),a.info.squarePixelWidth=a.info.width,a.info.squarePixelHeight=a.info.height,e.skip(50),a.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,h+d.totalSize-e.filePos));let f=u==="encv"?a.frmaCodecString:u;a.frmaCodecString=null,f==="avc1"||f==="avc3"?(a.info.codec="avc",a.info.avcType=f==="avc1"?1:3):f==="hvc1"||f==="hev1"?a.info.codec="hevc":f==="vp08"?a.info.codec="vp8":f==="vp09"?a.info.codec="vp9":f==="av01"?a.info.codec="av1":Zr.includes(u)?(a.info.codec="prores",a.info.proresFormat=u):f===null?Y._warn("Unknown encrypted video codec due to missing frma box."):Y._warn(`Unsupported video codec (sample entry type '${d.name}').`)}else{e.skip(6*1+2);let f=pe(e);e.skip(3*2);let p=pe(e),g=pe(e);e.skip(2*2);let y=D(e)/65536,w=null;o===0&&f>0&&(f===1?(e.skip(4),g=8*D(e),e.skip(2*4)):f===2&&(e.skip(4),y=Sn(e),p=D(e),e.skip(4),g=D(e),w=D(e),e.skip(2*4))),a.info.numberOfChannels=p,a.info.sampleRate=y,a.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,h+d.totalSize-e.filePos));let m=u==="enca"?a.frmaCodecString:u;if(a.frmaCodecString=null,m!=="mp4a")if(m==="opus")a.info.codec="opus",a.info.sampleRate=mn;else if(m==="flac")a.info.codec="flac";else if(m==="ulaw")a.info.codec="ulaw";else if(m==="alaw")a.info.codec="alaw";else if(m==="ac-3")a.info.codec="ac3";else if(m==="ec-3")a.info.codec="eac3";else if(ad.includes(m))a.info.codec="dts",a.info.dtsFormat=m;else if(m==="twos")g===8?a.info.codec="pcm-s8":g===16?a.info.codec=a.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(Y._warn(`Unsupported sample size ${g} for codec 'twos'.`),a.info.codec=null);else if(m==="sowt")g===8?a.info.codec="pcm-s8":g===16?a.info.codec="pcm-s16":(Y._warn(`Unsupported sample size ${g} for codec 'sowt'.`),a.info.codec=null);else if(m==="raw ")a.info.codec="pcm-u8";else if(m==="in24")a.info.codec=a.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if(m==="in32")a.info.codec=a.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if(m==="fl32")a.info.codec=a.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if(m==="fl64")a.info.codec=a.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if(m==="ipcm"){let b=a.info.pcmSampleSize;a.info.pcmLittleEndian?b===16?a.info.codec="pcm-s16":b===24?a.info.codec="pcm-s24":b===32?a.info.codec="pcm-s32":(Y._warn(`Invalid ipcm sample size ${b}.`),a.info.codec=null):b===16?a.info.codec="pcm-s16be":b===24?a.info.codec="pcm-s24be":b===32?a.info.codec="pcm-s32be":(Y._warn(`Invalid ipcm sample size ${b}.`),a.info.codec=null)}else if(m==="fpcm"){let b=a.info.pcmSampleSize;a.info.pcmLittleEndian?b===32?a.info.codec="pcm-f32":b===64?a.info.codec="pcm-f64":(Y._warn(`Invalid fpcm sample size ${b}.`),a.info.codec=null):b===32?a.info.codec="pcm-f32be":b===64?a.info.codec="pcm-f64be":(Y._warn(`Invalid fpcm sample size ${b}.`),a.info.codec=null)}else if(m==="lpcm"&&w!==null){let b=g+7>>3,A=!!(w&1),T=!!(w&2),S=w&4?-1:0;g>0&&g<=64&&(A?g===32&&(a.info.codec=T?"pcm-f32be":"pcm-f32"):S&1<<b-1?b===1?a.info.codec="pcm-s8":b===2?a.info.codec=T?"pcm-s16be":"pcm-s16":b===3?a.info.codec=T?"pcm-s24be":"pcm-s24":b===4&&(a.info.codec=T?"pcm-s32be":"pcm-s32"):b===1&&(a.info.codec="pcm-u8")),a.info.codec===null&&Y._warn("Unsupported PCM format.")}else m===null?Y._warn("Unknown encrypted audio codec due to missing frma box."):Y._warn(`Unsupported audio codec (sample entry type '${d.name}').`)}e.filePos=h+d.totalSize}}break;case"frma":{let a=this.currentTrack;if(!a)break;let c=_e(e,4).toLowerCase();a.frmaCodecString=c}break;case"schm":{let a=this.currentTrack;if(!a)break;e.skip(4);let o=_e(e,4);o==="cenc"||o==="cens"||o==="cbcs"?a.encryptionInfo={scheme:o,defaultKid:null,defaultIsProtected:null,defaultPerSampleIvSize:null,defaultConstantIv:null,defaultCryptByteBlock:null,defaultSkipByteBlock:null}:Y._warn(`Unsupported encryption scheme '${o}'.`)}break;case"tenc":{let a=this.currentTrack;if(!a||!a.encryptionInfo)break;let o=H(e);e.skip(3),e.skip(1);let c=H(e);if(o>0?(a.encryptionInfo.defaultCryptByteBlock=c>>4,a.encryptionInfo.defaultSkipByteBlock=c&15):(a.encryptionInfo.defaultCryptByteBlock=0,a.encryptionInfo.defaultSkipByteBlock=0),a.encryptionInfo.defaultIsProtected=H(e)!==0,a.encryptionInfo.defaultPerSampleIvSize=H(e),a.encryptionInfo.defaultKid=wt(K(e,16)),a.encryptionInfo.defaultIsProtected&&a.encryptionInfo.defaultPerSampleIvSize===0){let l=H(e),h=new Uint8Array(16);h.set(K(e,l),0),a.encryptionInfo.defaultConstantIv=h}}break;case"avcC":{let a=this.currentTrack;if(!a||(P(a.info),i.contentSize===0))break;a.info.codecDescription=K(e,i.contentSize)}break;case"hvcC":{let a=this.currentTrack;if(!a||(P(a.info),i.contentSize===0))break;a.info.codecDescription=K(e,i.contentSize)}break;case"vpcC":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="video"),e.skip(4);let o=H(e),c=H(e),l=H(e),h=l>>4,d=l>>1&7,u=l&1,f=H(e),p=H(e),g=H(e);a.info.vp9CodecInfo={profile:o,level:c,bitDepth:h,chromaSubsampling:d,videoFullRangeFlag:u,colourPrimaries:f,transferCharacteristics:p,matrixCoefficients:g}}break;case"av1C":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="video"),e.skip(1);let o=H(e),c=o>>5,l=o&31,h=H(e),d=h>>7,u=h>>6&1,f=h>>5&1,p=h>>4&1,g=h>>3&1,y=h>>2&1,w=h&3,m=c===2&&u?f?12:10:u?10:8;e.skip(1);let b=K(e,i.contentSize-4),A=Xr(b);a.info.av1CodecInfo={profile:c,level:l,tier:d,bitDepth:m,monochrome:p,chromaSubsamplingX:g,chromaSubsamplingY:y,chromaSamplePosition:w,videoFullRangeFlag:A?.videoFullRangeFlag??0,colourPrimaries:A?.colourPrimaries??2,transferCharacteristics:A?.transferCharacteristics??2,matrixCoefficients:A?.matrixCoefficients??2}}break;case"colr":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="video");let o=_e(e,4);if(o!=="nclx"&&o!=="nclc")break;let c=pe(e),l=pe(e),h=pe(e),d;o==="nclx"&&(d=!!(H(e)&128)),a.info.colorSpace={primaries:je[c],transfer:Ke[l],matrix:Ye[h],fullRange:d}}break;case"pasp":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="video");let o=D(e),c=D(e);o>0&&c>0&&(o>c?a.info.squarePixelWidth=Math.round(a.info.width*o/c):a.info.squarePixelHeight=Math.round(a.info.height*c/o))}break;case"btrt":{let a=this.currentTrack;if(!a)break;e.skip(4);let o=D(e),c=D(e);a.maxBitrate=o>0?o:null,a.avgBitrate=c>0?c:null}break;case"wave":this.readContiguousBoxes(e.slice(n,i.contentSize));break;case"esds":{let a=this.currentTrack;if(!a||a.info?.type!=="audio")break;e.skip(4);let o=H(e);P(o===3),yn(e),e.skip(2);let c=H(e),l=(c&128)!==0,h=(c&64)!==0,d=(c&32)!==0;if(l&&e.skip(2),h){let y=H(e);e.skip(y)}d&&e.skip(2);let u=H(e);P(u===4);let f=yn(e),p=e.filePos,g=H(e);if(g===64||g===103?(a.info.codec="aac",a.info.aacCodecInfo={isMpeg2:g===103,objectType:null}):g===105||g===107?a.info.codec="mp3":g===221?a.info.codec="vorbis":g===169?a.info.codec="dts":Y._warn(`Unsupported audio codec (objectTypeIndication ${g}) - discarding track.`),e.skip(12),f>e.filePos-p){let y=H(e);P(y===5);let w=yn(e);if(a.info.codecDescription=K(e,w),a.info.codec==="aac"){let m=en(a.info.codecDescription);m.outputNumberOfChannels!==null&&(a.info.numberOfChannels=m.outputNumberOfChannels),m.outputSampleRate!==null&&(a.info.sampleRate=m.outputSampleRate)}}}break;case"enda":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="audio"),a.info.pcmLittleEndian=!!(pe(e)&255)}break;case"pcmC":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="audio"),e.skip(4);let o=H(e);a.info.pcmLittleEndian=!!(o&1),a.info.pcmSampleSize=H(e)}break;case"dOps":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="audio"),e.skip(1);let o=H(e),c=pe(e),l=D(e),h=Jr(e),d=H(e),u;d!==0?u=K(e,2+o):u=new Uint8Array(0);let f=new Uint8Array(19+u.byteLength),p=new DataView(f.buffer);p.setUint32(0,1332770163,!1),p.setUint32(4,1214603620,!1),p.setUint8(8,1),p.setUint8(9,o),p.setUint16(10,c,!0),p.setUint32(12,l,!0),p.setInt16(16,h,!0),p.setUint8(18,d),f.set(u,19),a.info.codecDescription=f,a.info.numberOfChannels=o}break;case"dfLa":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="audio"),e.skip(4);let o=127,c=128,l=e.filePos;for(;e.filePos<s;){let p=H(e),g=ct(e);if((p&o)===rn.STREAMINFO){e.skip(10);let w=D(e),m=w>>>12,b=(w>>9&7)+1;a.info.sampleRate=m,a.info.numberOfChannels=b,e.skip(20)}else e.skip(g);if(p&c)break}let h=e.filePos;e.filePos=l;let d=K(e,h-l),u=new Uint8Array(4+d.byteLength);new DataView(u.buffer).setUint32(0,1716281667,!1),u.set(d,4),a.info.codecDescription=u}break;case"dac3":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="audio");let o=K(e,3),c=new le(o),l=c.readBits(2);c.skipBits(8);let h=c.readBits(3),d=c.readBits(1);l<3&&(a.info.sampleRate=tn[l]),a.info.numberOfChannels=oa[h]+d}break;case"dec3":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="audio");let o=K(e,i.contentSize),c=ed(o);if(!c){Y._warn("Invalid dec3 box contents, ignoring.");break}let l=td(c);l!==null&&(a.info.sampleRate=l),a.info.numberOfChannels=rd(c)}break;case"ddts":{let a=this.currentTrack;if(!a)break;P(a.info?.type==="audio");let o=K(e,Math.min(i.contentSize,ca)),c=id(o);if(!c){Y._warn("Invalid ddts box contents, ignoring.");break}a.info.sampleRate=c.sampleRate,c.numberOfChannels!==null&&(a.info.numberOfChannels=c.numberOfChannels)}break;case"stts":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4);let o=D(e),c=0,l=0;for(let h=0;h<o;h++){let d=D(e),u=D(e);a.sampleTable.sampleTimingEntries.push({startIndex:c,startDecodeTimestamp:l,count:d,delta:u}),c+=d,l+=d*u}}break;case"ctts":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4);let o=D(e),c=0;for(let l=0;l<o;l++){let h=D(e),d=at(e);a.sampleTable.sampleCompositionTimeOffsets.push({startIndex:c,count:h,offset:d}),c+=h}}break;case"stsz":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4);let o=D(e),c=D(e);if(o===0)for(let l=0;l<c;l++){let h=D(e);a.sampleTable.sampleSizes.push(h)}else a.sampleTable.sampleSizes.push(o)}break;case"stz2":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4),e.skip(3);let o=H(e),c=D(e),l=K(e,Math.ceil(c*o/8)),h=new le(l);for(let d=0;d<c;d++){let u=h.readBits(o);a.sampleTable.sampleSizes.push(u)}}break;case"stss":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4),a.sampleTable.keySampleIndices=[];let o=D(e);for(let c=0;c<o;c++){let l=D(e)-1;a.sampleTable.keySampleIndices.push(l)}a.sampleTable.keySampleIndices[0]!==0&&a.sampleTable.keySampleIndices.unshift(0)}break;case"stsc":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4);let o=D(e);for(let l=0;l<o;l++){let h=D(e)-1,d=D(e),u=D(e);a.sampleTable.sampleToChunk.push({startSampleIndex:-1,startChunkIndex:h,samplesPerChunk:d,sampleDescriptionIndex:u})}let c=0;for(let l=0;l<a.sampleTable.sampleToChunk.length;l++)if(a.sampleTable.sampleToChunk[l].startSampleIndex=c,l<a.sampleTable.sampleToChunk.length-1){let d=a.sampleTable.sampleToChunk[l+1].startChunkIndex-a.sampleTable.sampleToChunk[l].startChunkIndex;c+=d*a.sampleTable.sampleToChunk[l].samplesPerChunk}}break;case"stco":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4);let o=D(e);for(let c=0;c<o;c++){let l=D(e);a.sampleTable.chunkOffsets.push(l)}}break;case"co64":{let a=this.currentTrack;if(!a||!a.sampleTable)break;e.skip(4);let o=D(e);for(let c=0;c<o;c++){let l=Ae(e);a.sampleTable.chunkOffsets.push(l)}}break;case"mvex":this.isFragmented=!0,this.readContiguousBoxes(e.slice(n,i.contentSize));break;case"mehd":{let a=H(e);e.skip(3);let o=a===1?Ae(e):D(e);this.movieDurationInTimescale=o}break;case"trex":{e.skip(4);let a=D(e),o=D(e),c=D(e),l=D(e),h=D(e);this.fragmentTrackDefaults.push({trackId:a,defaultSampleDescriptionIndex:o,defaultSampleDuration:c,defaultSampleSize:l,defaultSampleFlags:h})}break;case"tfra":{let a=H(e);e.skip(3);let o=D(e),c=this.tracks.find(m=>m.id===o);if(!c)break;let l=D(e),h=(l&48)>>4,d=(l&12)>>2,u=l&3,f=[H,pe,ct,D],p=f[h],g=f[d],y=f[u],w=D(e);for(let m=0;m<w;m++){let b=a===1?Ae(e):D(e),A=a===1?Ae(e):D(e);p(e),g(e),y(e),c.fragmentLookupTable.push({timestamp:b,moofOffset:A})}c.fragmentLookupTable.sort((m,b)=>m.timestamp-b.timestamp);for(let m=0;m<c.fragmentLookupTable.length-1;m++){let b=c.fragmentLookupTable[m],A=c.fragmentLookupTable[m+1];b.timestamp===A.timestamp&&(c.fragmentLookupTable.splice(m+1,1),m--)}}break;case"moof":this.currentFragment={moofOffset:t,moofSize:i.totalSize,implicitBaseDataOffset:t,trackData:new Map,psshBoxes:[]},this.readContiguousBoxes(e.slice(n,i.contentSize)),this.lastReadFragment=this.currentFragment,this.currentFragment=null;break;case"traf":if(P(this.currentFragment),this.readContiguousBoxes(e.slice(n,i.contentSize)),this.currentTrack){let a=this.currentFragment.trackData.get(this.currentTrack.id);e:if(a){if(a.samples.length===0){this.currentFragment.trackData.delete(this.currentTrack.id);break e}a.presentationTimestamps=a.samples.map((h,d)=>({presentationTimestamp:h.presentationTimestamp,sampleIndex:d})).sort((h,d)=>h.presentationTimestamp-d.presentationTimestamp);for(let h=0;h<a.presentationTimestamps.length;h++){let d=a.presentationTimestamps[h],u=a.samples[d.sampleIndex];if(a.firstKeyFrameTimestamp===null&&u.isKeyFrame&&(a.firstKeyFrameTimestamp=u.presentationTimestamp),h<a.presentationTimestamps.length-1){let p=a.presentationTimestamps[h+1].presentationTimestamp-d.presentationTimestamp;u.duration=p}}let o=a.samples[a.presentationTimestamps[0].sampleIndex],c=a.samples[Pe(a.presentationTimestamps).sampleIndex];a.startTimestamp=o.presentationTimestamp,a.endTimestamp=c.presentationTimestamp+c.duration;let{currentFragmentState:l}=this.currentTrack;P(l),l.startTimestamp!==null&&(da(a,l.startTimestamp),a.startTimestampIsFinal=!0),l.encryptionAuxInfo&&!a.samples[0].encryption&&(a.encryptionAuxInfo=l.encryptionAuxInfo)}this.currentTrack.currentFragmentState=null,this.currentTrack=null}break;case"pssh":{if(this.input._formatOptions.isobmff?._suppressPsshParsing)break;let a=ld(K(e,i.contentSize));this.currentFragment?this.currentFragment.psshBoxes.push(a):this.currentTrack||this.psshBoxes.push(a)}break;case"tfhd":{P(this.currentFragment),e.skip(1);let a=ct(e),o=!!(a&1),c=!!(a&2),l=!!(a&8),h=!!(a&16),d=!!(a&32),u=!!(a&65536),f=!!(a&131072),p=D(e),g=this.tracks.find(w=>w.id===p);if(!g)break;let y=this.fragmentTrackDefaults.find(w=>w.trackId===p);this.currentTrack=g,g.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:y?.defaultSampleDescriptionIndex??null,defaultSampleDuration:y?.defaultSampleDuration??null,defaultSampleSize:y?.defaultSampleSize??null,defaultSampleFlags:y?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},o?g.currentFragmentState.baseDataOffset=Ae(e):f&&(g.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),c&&(g.currentFragmentState.sampleDescriptionIndex=D(e)),l&&(g.currentFragmentState.defaultSampleDuration=D(e)),h&&(g.currentFragmentState.defaultSampleSize=D(e)),d&&(g.currentFragmentState.defaultSampleFlags=D(e)),u&&(g.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{let a=this.currentTrack;if(!a)break;P(a.currentFragmentState);let o=H(e);e.skip(3);let c=o===0?D(e):Ae(e);a.currentFragmentState.startTimestamp=c}break;case"trun":{let a=this.currentTrack;if(!a)break;P(this.currentFragment),P(a.currentFragmentState);let o=H(e),c=ct(e),l=!!(c&1),h=!!(c&4),d=!!(c&256),u=!!(c&512),f=!!(c&1024),p=!!(c&2048),g=D(e),y=null;l&&(y=at(e));let w=null;h&&(w=D(e));let m;this.currentFragment.trackData.has(a.id)?(m=this.currentFragment.trackData.get(a.id),y!==null&&(m.currentOffset=a.currentFragmentState.baseDataOffset+y)):(m={track:a,currentTimestamp:0,currentOffset:a.currentFragmentState.baseDataOffset+(y??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(a.id,m));for(let b=0;b<g;b++){let A;d?A=D(e):(P(a.currentFragmentState.defaultSampleDuration!==null),A=a.currentFragmentState.defaultSampleDuration);let T;u?T=D(e):(P(a.currentFragmentState.defaultSampleSize!==null),T=a.currentFragmentState.defaultSampleSize);let S;f?S=D(e):(P(a.currentFragmentState.defaultSampleFlags!==null),S=a.currentFragmentState.defaultSampleFlags),b===0&&w!==null&&(S=w);let x=0;p&&(o===0?x=D(e):x=at(e));let k=!(S&65536);m.samples.push({presentationTimestamp:m.currentTimestamp+x,duration:A,byteOffset:m.currentOffset,byteSize:T,isKeyFrame:k,encryption:null}),m.currentOffset+=T,m.currentTimestamp+=A}this.currentFragment.implicitBaseDataOffset=m.currentOffset}break;case"saiz":{let a=this.currentTrack;if(!a||!a.encryptionInfo)break;if(e.skip(1),ct(e)&1){let u=_e(e,4),f=D(e);if(u!==a.encryptionInfo.scheme||f!==0)break}let c=H(e),l=D(e),h=null;c===0&&l>0&&(h=K(e,l));let d=gd(a);d.defaultSampleInfoSize=c,d.sampleSizes=h,d.sampleCount=l}break;case"saio":{let a=this.currentTrack;if(!a||!a.encryptionInfo)break;let o=H(e);if(ct(e)&1){let u=_e(e,4),f=D(e);if(u!==a.encryptionInfo.scheme||f!==0)break}let l=D(e);if(l===0)break;l>1&&Y._warn("Multiple saio entries are not supported; using the first offset only.");let h=o===0?D(e):Number(Ae(e));this.currentFragment&&(h+=this.currentFragment.moofOffset);let d=gd(a);d.offset=h}break;case"senc":{let a=this.currentTrack;if(!a||!a.encryptionInfo)break;P(this.currentFragment);let o=this.currentFragment.trackData.get(a.id);if(!o)break;e.skip(1);let l=!!(ct(e)&2),h=D(e),d=a.encryptionInfo.defaultPerSampleIvSize;P(d!==null);for(let u=0;u<Math.min(h,o.samples.length);u++){let f=new Uint8Array(16);d>0?f.set(K(e,d),0):f.set(a.encryptionInfo.defaultConstantIv,0);let p=null;if(l){let y=pe(e);p=[];for(let w=0;w<y;w++){let m=pe(e),b=D(e);p.push({clearLen:m,protectedLen:b})}}let g=o.samples[u];g.encryption={iv:f,subsamples:p}}}break;case"udta":{let a=this.iterateContiguousBoxes(e.slice(n,i.contentSize));for(let{boxInfo:o,slice:c}of a){if(o.name!=="meta"&&!this.currentTrack){let l=c.filePos;this.metadataTags.raw??={},o.name[0]==="\xA9"?this.metadataTags.raw[o.name]??=ze(c):this.metadataTags.raw[o.name]??=K(c,o.contentSize),c.filePos=l}switch(o.name){case"meta":c.skip(-o.headerSize),this.traverseBox(c);break;case"\xA9nam":case"name":this.currentTrack?this.currentTrack.name=De.decode(K(c,o.contentSize)):this.metadataTags.title??=ze(c);break;case"\xA9des":this.currentTrack||(this.metadataTags.description??=ze(c));break;case"\xA9ART":this.currentTrack||(this.metadataTags.artist??=ze(c));break;case"\xA9alb":this.currentTrack||(this.metadataTags.album??=ze(c));break;case"albr":this.currentTrack||(this.metadataTags.albumArtist??=ze(c));break;case"\xA9gen":this.currentTrack||(this.metadataTags.genre??=ze(c));break;case"\xA9day":if(!this.currentTrack){let l=new Date(ze(c));Number.isNaN(l.getTime())||(this.metadataTags.date??=l)}break;case"\xA9cmt":this.currentTrack||(this.metadataTags.comment??=ze(c));break;case"\xA9lyr":this.currentTrack||(this.metadataTags.lyrics??=ze(c));break}}}break;case"meta":{if(this.currentTrack)break;let o=D(e)!==0;this.currentMetadataKeys=new Map,o?this.readContiguousBoxes(e.slice(n,i.contentSize)):this.readContiguousBoxes(e.slice(n+4,i.contentSize-4)),this.currentMetadataKeys=null}break;case"keys":{if(!this.currentMetadataKeys)break;e.skip(4);let a=D(e);for(let o=0;o<a;o++){let c=D(e);e.skip(4);let l=De.decode(K(e,c-8));this.currentMetadataKeys.set(o+1,l)}}break;case"ilst":{if(!this.currentMetadataKeys)break;let a=this.iterateContiguousBoxes(e.slice(n,i.contentSize));for(let{boxInfo:o,slice:c}of a){let l=o.name,h=(l.charCodeAt(0)<<24)+(l.charCodeAt(1)<<16)+(l.charCodeAt(2)<<8)+l.charCodeAt(3);this.currentMetadataKeys.has(h)&&(l=this.currentMetadataKeys.get(h));let d=hd(c);switch(this.metadataTags.raw??={},this.metadataTags.raw[l]??=d,l){case"\xA9nam":case"titl":case"com.apple.quicktime.title":case"title":typeof d=="string"&&(this.metadataTags.title??=d);break;case"\xA9des":case"desc":case"dscp":case"com.apple.quicktime.description":case"description":typeof d=="string"&&(this.metadataTags.description??=d);break;case"\xA9ART":case"com.apple.quicktime.artist":case"artist":typeof d=="string"&&(this.metadataTags.artist??=d);break;case"\xA9alb":case"albm":case"com.apple.quicktime.album":case"album":typeof d=="string"&&(this.metadataTags.album??=d);break;case"aART":case"album_artist":typeof d=="string"&&(this.metadataTags.albumArtist??=d);break;case"\xA9cmt":case"com.apple.quicktime.comment":case"comment":typeof d=="string"&&(this.metadataTags.comment??=d);break;case"\xA9gen":case"gnre":case"com.apple.quicktime.genre":case"genre":typeof d=="string"&&(this.metadataTags.genre??=d);break;case"\xA9lyr":case"lyrics":typeof d=="string"&&(this.metadataTags.lyrics??=d);break;case"\xA9day":case"rldt":case"com.apple.quicktime.creationdate":case"date":if(typeof d=="string"){let u=new Date(d);Number.isNaN(u.getTime())||(this.metadataTags.date??=u)}break;case"tmpo":if(d instanceof Uint8Array&&d.length>=2){let u=te(d).getInt16(0,!1);u>0&&(this.metadataTags.beatsPerMinute??=u)}break;case"covr":case"com.apple.quicktime.artwork":d instanceof bt?(this.metadataTags.images??=[],this.metadataTags.images.push({data:d.data,kind:"coverFront",mimeType:d.mimeType})):d instanceof Uint8Array&&(this.metadataTags.images??=[],this.metadataTags.images.push({data:d,kind:"coverFront",mimeType:"image/*"}));break;case"track":if(typeof d=="string"){let u=d.split("/"),f=Number.parseInt(u[0],10),p=u[1]&&Number.parseInt(u[1],10);Number.isInteger(f)&&f>0&&(this.metadataTags.trackNumber??=f),p&&Number.isInteger(p)&&p>0&&(this.metadataTags.tracksTotal??=p)}break;case"trkn":if(d instanceof Uint8Array&&d.length>=6){let u=te(d),f=u.getUint16(2,!1),p=u.getUint16(4,!1);f>0&&(this.metadataTags.trackNumber??=f),p>0&&(this.metadataTags.tracksTotal??=p)}break;case"disc":case"disk":if(d instanceof Uint8Array&&d.length>=6){let u=te(d),f=u.getUint16(2,!1),p=u.getUint16(4,!1);f>0&&(this.metadataTags.discNumber??=f),p>0&&(this.metadataTags.discsTotal??=p)}break}}}break}return e.filePos=s,!0}},xn=class{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType(),i=0;for(let n of e.tracks)if(n.trackBacking.getType()===t&&i++,n===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return this.internalTrack.maxBitrate}getAverageBitrate(){return this.internalTrack.avgBitrate}async getDurationFromMetadata(){let e=this.internalTrack;return e.durationInMediaTimescale<=0?null:(P(e.trackBacking),((await e.trackBacking.getFirstPacket({metadataOnly:!0}))?.timestamp??0)+e.durationInMediaTimescale/e.timescale)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){let t=await this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,i=>i.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)}mapTimestampIntoTimescale(e){return qi(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){let i=this.mapTimestampIntoTimescale(e),n=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),s=ha(n,i),a=await this.fetchPacketForSampleIndex(s,t);return!md(n)||!this.internalTrack.demuxer.isFragmented?a:this.performFragmentedLookup(null,o=>{let c=o.trackData.get(this.internalTrack.id);if(!c)return{sampleIndex:-1,correctSampleFound:!1};let l=re(c.presentationTimestamps,i,u=>u.presentationTimestamp),h=l!==-1?c.presentationTimestamps[l].sampleIndex:-1,d=l!==-1&&i<c.endTimestamp;return{sampleIndex:h,correctSampleFound:d}},i,i,t)}async getNextPacket(e,t){let i=this.packetToSampleIndex.get(e);if(i!==void 0)return this.fetchPacketForSampleIndex(i+1,t);let n=this.packetToFragmentLocation.get(e);if(n===void 0)throw new Error("Packet was not created from this track.");return this.performFragmentedLookup(n.fragment,s=>{if(s===n.fragment){let a=s.trackData.get(this.internalTrack.id);if(n.sampleIndex+1<a.samples.length)return{sampleIndex:n.sampleIndex+1,correctSampleFound:!0}}else if(s.trackData.get(this.internalTrack.id))return{sampleIndex:0,correctSampleFound:!0};return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async getKeyPacket(e,t){let i=this.mapTimestampIntoTimescale(e),n=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),s=Xf(n,i),a=await this.fetchPacketForSampleIndex(s,t);return!md(n)||!this.internalTrack.demuxer.isFragmented?a:this.performFragmentedLookup(null,o=>{let c=o.trackData.get(this.internalTrack.id);if(!c)return{sampleIndex:-1,correctSampleFound:!1};let l=$i(c.presentationTimestamps,u=>c.samples[u.sampleIndex].isKeyFrame&&u.presentationTimestamp<=i),h=l!==-1?c.presentationTimestamps[l].sampleIndex:-1,d=l!==-1&&i<c.endTimestamp;return{sampleIndex:h,correctSampleFound:d}},i,i,t)}async getNextKeyPacket(e,t){let i=this.packetToSampleIndex.get(e);if(i!==void 0){let s=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=Jf(s,i);return this.fetchPacketForSampleIndex(a,t)}let n=this.packetToFragmentLocation.get(e);if(n===void 0)throw new Error("Packet was not created from this track.");return this.performFragmentedLookup(n.fragment,s=>{if(s===n.fragment){let o=s.trackData.get(this.internalTrack.id).samples.findIndex((c,l)=>c.isKeyFrame&&l>n.sampleIndex);if(o!==-1)return{sampleIndex:o,correctSampleFound:!0}}else{let a=s.trackData.get(this.internalTrack.id);if(a&&a.firstKeyFrameTimestamp!==null){let o=a.samples.findIndex(c=>c.isKeyFrame);return P(o!==-1),{sampleIndex:o,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async fetchPacketForSampleIndex(e,t){if(e===-1)return null;let i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n=Zf(i,e);if(!n)return null;let s;if(t.metadataOnly)s=xt;else{let l=this.internalTrack.demuxer.reader.requestSlice(n.sampleOffset,n.sampleSize);if(V(l)&&(l=await l),!l)return null;if(s=K(l,n.sampleSize),this.internalTrack.encryptionInfo){let h=null;if(this.internalTrack.encryptionAuxInfo){let d=await bd(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);e<d.length&&(h=d[e])}h??=yd(this.internalTrack.encryptionInfo),h&&(s=await wd(this.internalTrack,h,s,null))}}let a=(n.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,o=n.duration/this.internalTrack.timescale,c=new Te(s,n.isKeyFrame?"key":"delta",a,o,e,n.sampleSize);return this.packetToSampleIndex.set(c,e),c}async fetchPacketInFragment(e,t,i){if(t===-1)return null;let s=e.trackData.get(this.internalTrack.id).samples[t];P(s);let a;if(i.metadataOnly)a=xt;else{let h=this.internalTrack.demuxer.reader.requestSlice(s.byteOffset,s.byteSize);if(V(h)&&(h=await h),!h)return null;if(a=K(h,s.byteSize),this.internalTrack.encryptionInfo){let d=s.encryption??yd(this.internalTrack.encryptionInfo);d&&(a=await wd(this.internalTrack,d,a,e))}}let o=(s.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,c=s.duration/this.internalTrack.timescale,l=new Te(a,s.isKeyFrame?"key":"delta",o,c,e.moofOffset+t,s.byteSize);return this.packetToFragmentLocation.set(l,{fragment:e,sampleIndex:t}),l}async performFragmentedLookup(e,t,i,n,s){let a=this.internalTrack.demuxer,o=null,c=null,l=-1;if(e){let{sampleIndex:y,correctSampleFound:w}=t(e);if(w)return this.fetchPacketInFragment(e,y,s);y!==-1&&(c=e,l=y)}let h=re(this.internalTrack.fragmentLookupTable,i,y=>y.timestamp),d=h!==-1?this.internalTrack.fragmentLookupTable[h]:null,u=re(this.internalTrack.fragmentPositionCache,i,y=>y.startTimestamp),f=u!==-1?this.internalTrack.fragmentPositionCache[u]:null,p=Math.max(d?.moofOffset??0,f?.moofOffset??0)||null,g;for(e?p===null||e.moofOffset>=p?(g=e.moofOffset+e.moofSize,o=e):g=p:g=p??0;;){if(o){let b=o.trackData.get(this.internalTrack.id);if(b&&b.startTimestamp>n)break}let y=a.reader.requestSliceRange(g,Ot,or);if(V(y)&&(y=await y),!y)break;let w=g,m=st(y);if(!m)break;if(m.name==="moof"){o=await a.readFragment(w);let{sampleIndex:b,correctSampleFound:A}=t(o);if(A)return this.fetchPacketInFragment(o,b,s);b!==-1&&(c=o,l=b)}g=w+m.totalSize}if(d&&(!c||c.moofOffset<d.moofOffset)){let y=this.internalTrack.fragmentLookupTable[h-1];P(!y||y.timestamp<d.timestamp);let w=y?.timestamp??-1/0;return this.performFragmentedLookup(null,t,w,n,s)}return c?this.fetchPacketInFragment(c,l,s):null}},An=class extends xn{constructor(e){super(e),this.decoderConfigPromise=null}getType(){return"video"}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getTransformationMatrix(){return[...this.internalTrack.matrix]}async getColorSpace(){let e=await this.getDecoderConfig();return e?{primaries:e.colorSpace?.primaries,transfer:e.colorSpace?.transfer,matrix:e.colorSpace?.matrix,fullRange:e.colorSpace?.fullRange}:this.internalTrack.info.colorSpace}async canBeTransparent(){return this.internalTrack.info.codec==="prores"&&(this.internalTrack.info.proresFormat==="ap4h"||this.internalTrack.info.proresFormat==="ap4x")}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{if(this.internalTrack.info.codec==="avc"&&!this.internalTrack.info.codecDescription){let t=await this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=t&&on(t.data)}else if(this.internalTrack.info.codec==="hevc"&&!this.internalTrack.info.codecDescription){let t=await this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=t&&cn(t.data)}else if(this.internalTrack.info.codec==="vp9"&&(!this.internalTrack.info.vp9CodecInfo||!Ql(this.internalTrack.info.vp9CodecInfo))){let t=await this.getFirstPacket({}),i=t&&ln(t.data);i&&(this.internalTrack.info.vp9CodecInfo={...this.internalTrack.info.vp9CodecInfo??i,videoFullRangeFlag:i.videoFullRangeFlag,colourPrimaries:i.colourPrimaries,transferCharacteristics:i.transferCharacteristics,matrixCoefficients:i.matrixCoefficients})}else if(this.internalTrack.info.codec==="av1"&&(!this.internalTrack.info.av1CodecInfo||!Zl(this.internalTrack.info.av1CodecInfo))){let t=await this.getFirstPacket({}),i=t&&Xr(t.data);i&&(this.internalTrack.info.av1CodecInfo=i)}else if(this.internalTrack.info.codec==="prores"&&!this.internalTrack.info.proresCodecInfo){let t=await this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=t&&dn(t.data)}if(!Yr(this.internalTrack.info.colorSpace)){let t=fn(this.internalTrack.info);this.internalTrack.info.colorSpace.primaries??=t.primaries,this.internalTrack.info.colorSpace.transfer??=t.transfer,this.internalTrack.info.colorSpace.matrix??=t.matrix,this.internalTrack.info.colorSpace.fullRange??=t.fullRange}let e={codec:un(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return(this.internalTrack.info.width!==this.internalTrack.info.squarePixelWidth||this.internalTrack.info.height!==this.internalTrack.info.squarePixelHeight)&&(e.displayAspectWidth=this.internalTrack.info.squarePixelWidth,e.displayAspectHeight=this.internalTrack.info.squarePixelHeight),e})():null}},kn=class extends xn{constructor(e){super(e),this.decoderConfigPromise=null}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{if(this.internalTrack.info.codec==="dts"&&!this.internalTrack.info.dtsFormat){let e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&hn(e.data)}return{codec:pn(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})():null}},ha=(r,e)=>{if(r.presentationTimestamps){let t=re(r.presentationTimestamps,e,i=>i.presentationTimestamp);return t===-1?-1:r.presentationTimestamps[t].sampleIndex}else{let t=re(r.sampleTimingEntries,e,n=>n.startDecodeTimestamp);if(t===-1)return-1;let i=r.sampleTimingEntries[t];return i.startIndex+Math.min(Math.floor((e-i.startDecodeTimestamp)/i.delta),i.count-1)}},Xf=(r,e)=>{if(!r.keySampleIndices)return ha(r,e);if(r.presentationTimestamps){let t=re(r.presentationTimestamps,e,i=>i.presentationTimestamp);if(t===-1)return-1;for(let i=t;i>=0;i--){let n=r.presentationTimestamps[i].sampleIndex;if(Qs(r.keySampleIndices,n,a=>a)!==-1)return n}return-1}else{let t=ha(r,e),i=re(r.keySampleIndices,t,n=>n);return r.keySampleIndices[i]??-1}},Zf=(r,e)=>{let t=re(r.sampleTimingEntries,e,w=>w.startIndex),i=r.sampleTimingEntries[t];if(!i||i.startIndex+i.count<=e)return null;let s=i.startDecodeTimestamp+(e-i.startIndex)*i.delta,a=re(r.sampleCompositionTimeOffsets,e,w=>w.startIndex),o=r.sampleCompositionTimeOffsets[a];o&&e-o.startIndex<o.count&&(s+=o.offset);let c=r.sampleSizes[Math.min(e,r.sampleSizes.length-1)],l=re(r.sampleToChunk,e,w=>w.startSampleIndex),h=r.sampleToChunk[l];P(h);let d=h.startChunkIndex+Math.floor((e-h.startSampleIndex)/h.samplesPerChunk),u=r.chunkOffsets[d],f=h.startSampleIndex+(d-h.startChunkIndex)*h.samplesPerChunk,p=0,g=u;if(r.sampleSizes.length===1)g+=c*(e-f),p+=c*h.samplesPerChunk;else for(let w=f;w<f+h.samplesPerChunk;w++){let m=r.sampleSizes[w];w<e&&(g+=m),p+=m}let y=i.delta;if(r.presentationTimestamps){let w=r.presentationTimestampIndexMap[e];P(w!==void 0),w<r.presentationTimestamps.length-1&&(y=r.presentationTimestamps[w+1].presentationTimestamp-s)}return{presentationTimestamp:s,duration:y,sampleOffset:g,sampleSize:c,chunkOffset:u,chunkSize:p,isKeyFrame:r.keySampleIndices?Qs(r.keySampleIndices,e,w=>w)!==-1:!0}},Jf=(r,e)=>{if(!r.keySampleIndices)return e+1;let t=re(r.keySampleIndices,e,i=>i);return r.keySampleIndices[t+1]??-1},da=(r,e)=>{r.startTimestamp+=e,r.endTimestamp+=e;for(let t of r.samples)t.presentationTimestamp+=e;for(let t of r.presentationTimestamps)t.presentationTimestamp+=e},pd=r=>[At(r),At(r),gn(r),At(r),At(r),gn(r),At(r),At(r),gn(r)],md=r=>r.sampleSizes.length===0,gd=r=>r.currentFragmentState?r.currentFragmentState.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:r.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null},bd=async(r,e,t)=>{if(t.resolved)return t.resolved;if(t.offset===null||t.sampleCount===0)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let i=0;if(t.defaultSampleInfoSize>0)i=t.defaultSampleInfoSize*t.sampleCount;else{P(t.sampleSizes);for(let o=0;o<t.sampleCount;o++)i+=t.sampleSizes[o]}let n=r.requestSlice(t.offset,i);if(V(n)&&(n=await n),!n)throw new Error("Failed to read auxiliary encryption info.");let s=e.defaultPerSampleIvSize;P(s!==null);let a=[];for(let o=0;o<t.sampleCount;o++){let c=t.defaultSampleInfoSize>0?t.defaultSampleInfoSize:t.sampleSizes[o],l=new Uint8Array(16);s>0?l.set(K(n,s),0):l.set(e.defaultConstantIv,0);let h=null;if(c>s){let d=pe(n);h=[];for(let u=0;u<d;u++){let f=pe(n),p=D(n);h.push({clearLen:f,protectedLen:p})}}a.push({iv:l,subsamples:h})}return t.resolved=a,a},yd=r=>r.defaultConstantIv?{iv:r.defaultConstantIv,subsamples:null}:null,wd=async(r,e,t,i)=>{P(r.encryptionInfo);let n=r.encryptionInfo;P(n.defaultKid!==null);let s=n.defaultKid,a,o=r.demuxer.decryptionKeyCache.get(s);if(o)a=await o;else{if(!r.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");let c=(async()=>{let l=r.demuxer.psshBoxes;if(i){l=[...l,...i.psshBoxes].filter(d=>d.keyIds===null||d.keyIds.includes(s));for(let d=0;d<l.length-1;d++)for(let u=d+1;u<l.length;u++)dd(l[d],l[u])&&(l.splice(u,1),u--)}let h=await r.demuxer.input._formatOptions.isobmff.resolveKeyId({keyId:s,psshBoxes:l});if(!(typeof h=="string"&&h.length===32&&Bl.test(h)||h instanceof Uint8Array&&h.byteLength===16))throw new TypeError("resolveKeyId must return a 32-character hex string or a 16-byte Uint8Array containing the decryption key.");return h instanceof Uint8Array?h:Dl(h)})();r.demuxer.decryptionKeyCache.set(s,c),a=await c}return n.scheme==="cenc"||n.scheme==="cens"?ep(a,n,e,t):tp(a,n,e,t)},ep=async(r,e,t,i)=>{let n=new Uint8Array(16);n.set(t.iv,0);let s=await crypto.subtle.importKey("raw",r,{name:"AES-CTR"},!1,["decrypt"]),a=async p=>{let g=await crypto.subtle.decrypt({name:"AES-CTR",counter:n,length:64},s,p);return new Uint8Array(g)};if(!t.subsamples)return a(i);P(e.defaultCryptByteBlock!==null&&e.defaultSkipByteBlock!==null);let o=xd(t.subsamples,e.defaultCryptByteBlock,e.defaultSkipByteBlock),c=0;for(let p of o)for(let g of p.perSubsample)c+=g.length;let l=new Uint8Array(c),h=0;for(let p of o)for(let g of p.perSubsample)l.set(i.subarray(g.offset,g.offset+g.length),h),h+=g.length;let d=await a(l),u=new Uint8Array(i),f=0;for(let p of o)for(let g of p.perSubsample)u.set(d.subarray(f,f+g.length),g.offset),f+=g.length;return u},tp=(r,e,t,i)=>{let n=new wn;n.init({key:r,iv:t.iv});let s=e.defaultCryptByteBlock,a=e.defaultSkipByteBlock;if(P(s!==null&&a!==null),!t.subsamples){let h=new Uint8Array(i),d=Math.floor(i.length/16);for(let u=0;u<d;u++){let f=u*16;n.in.set(i.subarray(f,f+16)),n.decrypt(),h.set(n.out,f)}return h}if(s===0&&a===0)throw new Error("cbcs with subsamples requires pattern encryption.");let o=new Uint8Array(i),c=xd(t.subsamples,s,a),l=new DataView(t.iv.buffer,t.iv.byteOffset,16);for(let h of c){n.iv[0]=l.getUint32(0,!1),n.iv[1]=l.getUint32(4,!1),n.iv[2]=l.getUint32(8,!1),n.iv[3]=l.getUint32(12,!1);for(let d of h.perSubsample){let u=d.length/16;for(let f=0;f<u;f++){let p=d.offset+f*16;n.in.set(i.subarray(p,p+16)),n.decrypt(),o.set(n.out,p)}}}return o},xd=(r,e,t)=>{let i=[],n=e!==0||t!==0,s=0;for(let a of r){s+=a.clearLen;let o=[];if(!n)a.protectedLen>0&&o.push({offset:s,length:a.protectedLen}),s+=a.protectedLen;else{let c=a.protectedLen,l=s;for(;c>0&&!(c<16*e);){let h=16*e;o.push({offset:l,length:h}),l+=h,c-=h;let d=Math.min(16*t,c);l+=d,c-=d}s+=a.protectedLen}i.push({perSubsample:o})}return i};var C;(function(r){r[r.EBML=440786851]="EBML",r[r.EBMLVersion=17030]="EBMLVersion",r[r.EBMLReadVersion=17143]="EBMLReadVersion",r[r.EBMLMaxIDLength=17138]="EBMLMaxIDLength",r[r.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",r[r.DocType=17026]="DocType",r[r.DocTypeVersion=17031]="DocTypeVersion",r[r.DocTypeReadVersion=17029]="DocTypeReadVersion",r[r.Void=236]="Void",r[r.Segment=408125543]="Segment",r[r.SeekHead=290298740]="SeekHead",r[r.Seek=19899]="Seek",r[r.SeekID=21419]="SeekID",r[r.SeekPosition=21420]="SeekPosition",r[r.Duration=17545]="Duration",r[r.Info=357149030]="Info",r[r.TimestampScale=2807729]="TimestampScale",r[r.MuxingApp=19840]="MuxingApp",r[r.WritingApp=22337]="WritingApp",r[r.Tracks=374648427]="Tracks",r[r.TrackEntry=174]="TrackEntry",r[r.TrackNumber=215]="TrackNumber",r[r.TrackUID=29637]="TrackUID",r[r.TrackType=131]="TrackType",r[r.FlagEnabled=185]="FlagEnabled",r[r.FlagDefault=136]="FlagDefault",r[r.FlagForced=21930]="FlagForced",r[r.FlagOriginal=21934]="FlagOriginal",r[r.FlagHearingImpaired=21931]="FlagHearingImpaired",r[r.FlagVisualImpaired=21932]="FlagVisualImpaired",r[r.FlagCommentary=21935]="FlagCommentary",r[r.FlagLacing=156]="FlagLacing",r[r.Name=21358]="Name",r[r.Language=2274716]="Language",r[r.LanguageBCP47=2274717]="LanguageBCP47",r[r.CodecID=134]="CodecID",r[r.CodecPrivate=25506]="CodecPrivate",r[r.CodecDelay=22186]="CodecDelay",r[r.SeekPreRoll=22203]="SeekPreRoll",r[r.DefaultDuration=2352003]="DefaultDuration",r[r.Video=224]="Video",r[r.PixelWidth=176]="PixelWidth",r[r.PixelHeight=186]="PixelHeight",r[r.DisplayWidth=21680]="DisplayWidth",r[r.DisplayHeight=21690]="DisplayHeight",r[r.DisplayUnit=21682]="DisplayUnit",r[r.AlphaMode=21440]="AlphaMode",r[r.Audio=225]="Audio",r[r.SamplingFrequency=181]="SamplingFrequency",r[r.Channels=159]="Channels",r[r.BitDepth=25188]="BitDepth",r[r.SimpleBlock=163]="SimpleBlock",r[r.BlockGroup=160]="BlockGroup",r[r.Block=161]="Block",r[r.BlockAdditions=30113]="BlockAdditions",r[r.BlockMore=166]="BlockMore",r[r.BlockAdditional=165]="BlockAdditional",r[r.BlockAddID=238]="BlockAddID",r[r.BlockDuration=155]="BlockDuration",r[r.ReferenceBlock=251]="ReferenceBlock",r[r.Cluster=524531317]="Cluster",r[r.Timestamp=231]="Timestamp",r[r.Cues=475249515]="Cues",r[r.CuePoint=187]="CuePoint",r[r.CueTime=179]="CueTime",r[r.CueTrackPositions=183]="CueTrackPositions",r[r.CueTrack=247]="CueTrack",r[r.CueClusterPosition=241]="CueClusterPosition",r[r.Colour=21936]="Colour",r[r.MatrixCoefficients=21937]="MatrixCoefficients",r[r.TransferCharacteristics=21946]="TransferCharacteristics",r[r.Primaries=21947]="Primaries",r[r.Range=21945]="Range",r[r.Projection=30320]="Projection",r[r.ProjectionType=30321]="ProjectionType",r[r.ProjectionPoseYaw=30323]="ProjectionPoseYaw",r[r.ProjectionPosePitch=30324]="ProjectionPosePitch",r[r.ProjectionPoseRoll=30325]="ProjectionPoseRoll",r[r.Attachments=423732329]="Attachments",r[r.AttachedFile=24999]="AttachedFile",r[r.FileDescription=18046]="FileDescription",r[r.FileName=18030]="FileName",r[r.FileMediaType=18016]="FileMediaType",r[r.FileData=18012]="FileData",r[r.FileUID=18094]="FileUID",r[r.Chapters=272869232]="Chapters",r[r.Tags=307544935]="Tags",r[r.Tag=29555]="Tag",r[r.Targets=25536]="Targets",r[r.TargetTypeValue=26826]="TargetTypeValue",r[r.TargetType=25546]="TargetType",r[r.TagTrackUID=25541]="TagTrackUID",r[r.TagEditionUID=25545]="TagEditionUID",r[r.TagChapterUID=25540]="TagChapterUID",r[r.TagAttachmentUID=25542]="TagAttachmentUID",r[r.SimpleTag=26568]="SimpleTag",r[r.TagName=17827]="TagName",r[r.TagLanguage=17530]="TagLanguage",r[r.TagString=17543]="TagString",r[r.TagBinary=17541]="TagBinary",r[r.ContentEncodings=28032]="ContentEncodings",r[r.ContentEncoding=25152]="ContentEncoding",r[r.ContentEncodingOrder=20529]="ContentEncodingOrder",r[r.ContentEncodingScope=20530]="ContentEncodingScope",r[r.ContentCompression=20532]="ContentCompression",r[r.ContentCompAlgo=16980]="ContentCompAlgo",r[r.ContentCompSettings=16981]="ContentCompSettings",r[r.ContentEncryption=20533]="ContentEncryption"})(C||(C={}));var rp=[C.EBML,C.Segment],ur=[C.SeekHead,C.Info,C.Cluster,C.Tracks,C.Cues,C.Attachments,C.Chapters,C.Tags],ei=[...rp,...ur];var ua=8,Ce=2,Ve=2*ua,fa=r=>{if(r.remainingLength<1)return null;let e=H(r);if(r.skip(-1),e===0)return null;let t=1,i=128;for(;(e&i)===0;)t++,i>>=1;return r.remainingLength<t?null:t},fr=r=>{if(r.remainingLength<1)return null;let e=H(r);if(e===0)return null;let t=1,i=128;for(;(e&i)===0;)t++,i>>=1;if(r.remainingLength<t-1)return null;let n=e&i-1;for(let s=1;s<t;s++)n*=256,n+=H(r);return n},q=(r,e)=>{if(e<1||e>8)throw new Error("Bad unsigned int size "+e);let t=0;for(let i=0;i<e;i++)t*=256,t+=H(r);return t},kd=(r,e)=>{if(e<1)throw new Error("Bad unsigned int size "+e);let t=0n;for(let i=0;i<e;i++)t<<=8n,t+=BigInt(H(r));return t};var Tn=r=>{let e=fa(r);return e===null||r.remainingLength<e?null:q(r,e)},pa=r=>{if(r.remainingLength<1)return null;if(H(r)===255)return;r.skip(-1);let t=fr(r);if(t===null)return null;if(t!==72057594037927940)return t},He=r=>{P(r.remainingLength>=Ce);let e=Tn(r);if(e===null)return null;let t=pa(r);return t===null?null:{id:e,size:t}},kt=(r,e)=>{let t=K(r,e),i=0;for(;i<e&&t[i]!==0;)i+=1;return String.fromCharCode(...t.subarray(0,i))},pr=(r,e)=>{let t=K(r,e),i=0;for(;i<e&&t[i]!==0;)i+=1;return De.decode(t.subarray(0,i))},mr=(r,e)=>{if(e===0)return 0;if(e!==4&&e!==8)throw new Error("Bad float size "+e);return e===4?Sd(r):Sn(r)},En=async(r,e,t,i)=>{let n=new Set(t),s=e;for(;i===null||s<i;){let a=r.requestSliceRange(s,Ce,Ve);if(V(a)&&(a=await a),!a)break;let o=He(a);if(!o)break;if(n.has(o.id))return{pos:s,found:!0};lt(o.size),s=a.filePos+o.size}return{pos:i!==null&&i>s?i:s,found:!1}},ma=async(r,e,t,i)=>{let s=new Set(t),a=e;for(;a<i;){let o=r.requestSliceRange(a,0,Math.min(65536,i-a));if(V(o)&&(o=await o),!o||o.length<ua)break;for(let c=0;c<o.length-ua;c++){o.filePos=a;let l=Tn(o);if(l!==null&&s.has(l))return a;a++}}return null},Ee={avc:"V_MPEG4/ISO/AVC",hevc:"V_MPEGH/ISO/HEVC",vp8:"V_VP8",vp9:"V_VP9",av1:"V_AV1",prores:"V_PRORES",aac:"A_AAC",mp3:"A_MPEG/L3",opus:"A_OPUS",vorbis:"A_VORBIS",flac:"A_FLAC",ac3:"A_AC3",eac3:"A_EAC3",dts:"A_DTS","pcm-u8":"A_PCM/INT/LIT","pcm-s16":"A_PCM/INT/LIT","pcm-s16be":"A_PCM/INT/BIG","pcm-s24":"A_PCM/INT/LIT","pcm-s24be":"A_PCM/INT/BIG","pcm-s32":"A_PCM/INT/LIT","pcm-s32be":"A_PCM/INT/BIG","pcm-f32":"A_PCM/FLOAT/IEEE","pcm-f64":"A_PCM/FLOAT/IEEE",webvtt:"S_TEXT/WEBVTT"};function lt(r){if(r===void 0)throw new Error("Undefined element size is used in a place where it is not supported.")}var Td=r=>{let t=(r.hasVideo?"video/":r.hasAudio?"audio/":"application/")+(r.isWebM?"webm":"x-matroska");if(r.codecStrings.length>0){let i=[...new Set(r.codecStrings.filter(Boolean))];t+=`; codecs="${i.join(", ")}"`}return t};var dt;(function(r){r[r.None=0]="None",r[r.Xiph=1]="Xiph",r[r.FixedSize=2]="FixedSize",r[r.Ebml=3]="Ebml"})(dt||(dt={}));var vn;(function(r){r[r.Block=1]="Block",r[r.Private=2]="Private",r[r.Next=4]="Next"})(vn||(vn={}));var ti;(function(r){r[r.Zlib=0]="Zlib",r[r.Bzlib=1]="Bzlib",r[r.lzo1x=2]="lzo1x",r[r.HeaderStripping=3]="HeaderStripping"})(ti||(ti={}));var ga=[{id:C.SeekHead,flag:"seekHeadSeen"},{id:C.Info,flag:"infoSeen"},{id:C.Tracks,flag:"tracksSeen"},{id:C.Cues,flag:"cuesSeen"}],Ed=10*2**20,_n=class extends ar{constructor(e){super(e),this.readMetadataPromise=null,this.segments=[],this.currentSegment=null,this.currentTrack=null,this.currentCluster=null,this.currentBlock=null,this.currentBlockAdditional=null,this.currentCueTime=null,this.currentDecodingInstruction=null,this.currentTagTargetIsMovie=!0,this.currentSimpleTagName=null,this.currentAttachedFile=null,this.isWebM=!1,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.segments.flatMap(e=>e.tracks.map(t=>t.trackBacking))}async getMimeType(){await this.readMetadata();let e=await this.getTrackBackings(),t=await Promise.all(e.map(i=>i.getDecoderConfig().then(n=>n?.codec??null)));return Td({isWebM:this.isWebM,hasVideo:this.segments.some(i=>i.tracks.some(n=>n.info?.type==="video")),hasAudio:this.segments.some(i=>i.tracks.some(n=>n.info?.type==="audio")),codecStrings:t.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(let t of this.segments)t.metadataTagsCollected||(this.reader.fileSize!==null&&await this.loadSegmentMetadata(t),t.metadataTagsCollected=!0);let e={};for(let t of this.segments)e={...e,...t.metadataTags};return e}readMetadata(){return this.readMetadataPromise??=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,Ce,Ve);if(V(t)&&(t=await t),!t)break;let i=He(t);if(!i)break;let n=i.id,s=i.size,a=t.filePos;if(n===C.EBML){lt(s);let o=this.reader.requestSlice(a,s);if(V(o)&&(o=await o),!o)break;this.readContiguousElements(o)}else if(n===C.Segment){if(await this.readSegment(a,s),s===void 0||this.reader.fileSize===null)break}else if(n===C.Cluster){if(this.reader.fileSize===null)break;s===void 0&&(s=(await En(this.reader,a,ei,this.reader.fileSize)).pos-a);let o=Pe(this.segments);o&&(o.elementEndPos=a+s)}lt(s),e=a+s}})()}async readSegment(e,t){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:t===void 0?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let i=e;for(;this.currentSegment.elementEndPos===null||i<this.currentSegment.elementEndPos;){let o=this.reader.requestSliceRange(i,Ce,Ve);if(V(o)&&(o=await o),!o)break;let c=i,l=He(o);if(!l||!ur.includes(l.id)&&l.id!==C.Void){let p=await ma(this.reader,c,ur,Math.min(this.currentSegment.elementEndPos??1/0,c+Ed));if(p){i=p;continue}else break}let{id:h,size:d}=l,u=o.filePos,f=ga.findIndex(p=>p.id===h);if(f!==-1){let p=ga[f].flag;this.currentSegment[p]=!0,lt(d);let g=this.reader.requestSlice(u,d);V(g)&&(g=await g),g&&this.readContiguousElements(g)}else if(h===C.Tags||h===C.Attachments){h===C.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,lt(d);let p=this.reader.requestSlice(u,d);V(p)&&(p=await p),p&&this.readContiguousElements(p)}else if(h===C.Cluster){this.currentSegment.clusterSeekStartPos=c;break}if(d===void 0)break;i=u+d}if(this.currentSegment.seekEntries.sort((o,c)=>o.segmentPosition-c.segmentPosition),this.reader.fileSize!==null)for(let o of this.currentSegment.seekEntries){let c=ga.find(p=>p.id===o.id);if(!c||this.currentSegment[c.flag])continue;let l=this.reader.requestSliceRange(e+o.segmentPosition,Ce,Ve);if(V(l)&&(l=await l),!l)continue;let h=He(l);if(!h)continue;let{id:d,size:u}=h;if(d!==c.id)continue;lt(u),this.currentSegment[c.flag]=!0;let f=this.reader.requestSlice(l.filePos,u);V(f)&&(f=await f),f&&this.readContiguousElements(f)}this.currentSegment.timestampScale===-1&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e9/1e6);for(let o of this.currentSegment.tracks)o.defaultDurationNs!==null&&(o.defaultDuration=this.currentSegment.timestampFactor*o.defaultDurationNs/1e9);let n=new Map(this.currentSegment.tracks.map(o=>[o.id,o]));for(let o of this.currentSegment.cuePoints){let c=n.get(o.trackId);c&&c.cuePoints.push(o)}for(let o of this.currentSegment.tracks){o.cuePoints.sort((c,l)=>c.time-l.time);for(let c=0;c<o.cuePoints.length-1;c++){let l=o.cuePoints[c],h=o.cuePoints[c+1];l.time===h.time&&(o.cuePoints.splice(c+1,1),c--)}}let s=null,a=-1/0;for(let o of this.currentSegment.tracks)o.cuePoints.length>a&&(a=o.cuePoints.length,s=o);for(let o of this.currentSegment.tracks)o.cuePoints.length===0&&(o.cuePoints=s.cuePoints);this.currentSegment=null}async readCluster(e,t){if(t.lastReadCluster?.elementStartPos===e)return t.lastReadCluster;let i=this.reader.requestSliceRange(e,Ce,Ve);V(i)&&(i=await i),P(i);let n=e,s=He(i);P(s);let a=s.id;P(a===C.Cluster);let o=s.size,c=i.filePos;o===void 0&&(o=(await En(this.reader,c,ei,t.elementEndPos)).pos-c);let l=this.reader.requestSlice(c,o);V(l)&&(l=await l);let h={segment:t,elementStartPos:n,elementEndPos:c+o,dataStartPos:c,timestamp:-1,trackData:new Map};if(this.currentCluster=h,l){let d=this.readContiguousElements(l,ei);h.elementEndPos=d}for(let[,d]of h.trackData){let u=d.track;P(d.blocks.length>0);let f=!1;for(let w=0;w<d.blocks.length;w++){let m=d.blocks[w];m.timestamp+=h.timestamp,f||=m.lacing!==dt.None}d.presentationTimestamps=d.blocks.map((w,m)=>({timestamp:w.timestamp,blockIndex:m})).sort((w,m)=>w.timestamp-m.timestamp);for(let w=0;w<d.presentationTimestamps.length;w++){let m=d.presentationTimestamps[w],b=d.blocks[m.blockIndex];if(d.firstKeyFrameTimestamp===null&&b.isKeyFrame&&(d.firstKeyFrameTimestamp=b.timestamp),w<d.presentationTimestamps.length-1){let A=d.presentationTimestamps[w+1];b.duration=A.timestamp-b.timestamp}else b.duration===0&&u.defaultDuration!=null&&b.lacing===dt.None&&(b.duration=u.defaultDuration)}f&&(this.expandLacedBlocks(d.blocks,u),d.presentationTimestamps=d.blocks.map((w,m)=>({timestamp:w.timestamp,blockIndex:m})).sort((w,m)=>w.timestamp-m.timestamp));let p=d.blocks[d.presentationTimestamps[0].blockIndex],g=d.blocks[Pe(d.presentationTimestamps).blockIndex];d.startTimestamp=p.timestamp,d.endTimestamp=g.timestamp+g.duration;let y=re(u.clusterPositionCache,d.startTimestamp,w=>w.startTimestamp);(y===-1||u.clusterPositionCache[y].elementStartPos!==n)&&u.clusterPositionCache.splice(y+1,0,{elementStartPos:h.elementStartPos,startTimestamp:d.startTimestamp})}return t.lastReadCluster=h,h}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){let n=e.segment.tracks.find(s=>s.id===t);if(!n)return null;i={track:n,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){for(let i=0;i<e.length;i++){let n=e[i];if(n.lacing===dt.None)continue;n.decoded||(n.data=this.decodeBlockData(t,n.data),n.decoded=!0);let s=St.tempFromBytes(n.data),a=[],o=H(s)+1;switch(n.lacing){case dt.Xiph:{let l=0;for(let h=0;h<o-1;h++){let d=0;for(;s.bufferPos<s.length;){let u=H(s);if(d+=u,u<255){a.push(d),l+=d;break}}}a.push(s.length-(s.bufferPos+l))}break;case dt.FixedSize:{let l=s.length-1,h=Math.floor(l/o);for(let d=0;d<o;d++)a.push(h)}break;case dt.Ebml:{let l=fr(s);P(l!==null);let h=l;a.push(h);let d=h;for(let u=1;u<o-1;u++){let f=s.bufferPos,p=fr(s);P(p!==null);let g=p,w=(1<<(s.bufferPos-f)*7-1)-1,m=g-w;h+=m,a.push(h),d+=h}a.push(s.length-(s.bufferPos+d))}break;default:P(!1)}P(a.length===o),e.splice(i,1);let c=n.duration||o*(t.defaultDuration??0);for(let l=0;l<o;l++){let h=a[l],d=K(s,h),u=n.timestamp+c*l/o,f=c/o;e.splice(i+l,0,{timestamp:u,duration:f,isKeyFrame:n.isKeyFrame,data:d,lacing:dt.None,decoded:!0,postProcessed:!1,mainAdditional:n.mainAdditional})}i+=o,i--}}async loadSegmentMetadata(e){for(let t of e.seekEntries){if(!(t.id===C.Tags&&!e.tagsSeen)){if(!(t.id===C.Attachments&&!e.attachmentsSeen))continue}let i=this.reader.requestSliceRange(e.dataStartPos+t.segmentPosition,Ce,Ve);if(V(i)&&(i=await i),!i)continue;let n=He(i);if(!n||n.id!==t.id)continue;let{size:s}=n;lt(s),P(!this.currentSegment),this.currentSegment=e;let a=this.reader.requestSlice(i.filePos,s);V(a)&&(a=await a),a&&this.readContiguousElements(a),this.currentSegment=null,t.id===C.Tags?e.tagsSeen=!0:t.id===C.Attachments&&(e.attachmentsSeen=!0)}}readContiguousElements(e,t){for(;e.remainingLength>=Ce;){let i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){let i=He(e);if(!i||t&&t.includes(i.id))return!1;let{id:n,size:s}=i,a=e.filePos;switch(lt(s),n){case C.DocType:this.isWebM=kt(e,s)==="webm";break;case C.Seek:{if(!this.currentSegment)break;let o={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(o),this.readContiguousElements(e.slice(a,s)),(o.id===-1||o.segmentPosition===-1)&&this.currentSegment.seekEntries.pop()}break;case C.SeekID:{let o=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!o)break;o.id=q(e,s)}break;case C.SeekPosition:{let o=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!o)break;o.segmentPosition=q(e,s)}break;case C.TimestampScale:{if(!this.currentSegment)break;this.currentSegment.timestampScale=q(e,s),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale}break;case C.Duration:{if(!this.currentSegment)break;this.currentSegment.duration=mr(e,s)}break;case C.TrackEntry:{if(!this.currentSegment||(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...Ji,primary:!1},trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(a,s)),!this.currentTrack))break;if(this.currentTrack.decodingInstructions.some(o=>o.data?.type!=="decompress"||o.scope!==vn.Block||o.data.algorithm!==ti.HeaderStripping)&&(Y._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&this.currentTrack.id!==-1&&this.currentTrack.codecId&&this.currentTrack.info){let o=this.currentTrack.codecId.indexOf("/"),c=o===-1?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,o);if(this.currentTrack.info.type==="video"&&this.currentTrack.info.width!==-1&&this.currentTrack.info.height!==-1){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,this.currentTrack.info.displayWidth!==null&&this.currentTrack.info.displayHeight!==null){let h=this.currentTrack.info.displayWidth*this.currentTrack.info.height,d=this.currentTrack.info.displayHeight*this.currentTrack.info.width;h>0&&d>0&&(h>d?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*h/d):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*d/h))}if(this.currentTrack.codecId===Ee.avc)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===Ee.hevc)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(c===Ee.vp8)this.currentTrack.info.codec="vp8";else if(c===Ee.vp9)this.currentTrack.info.codec="vp9";else if(c===Ee.av1)this.currentTrack.info.codec="av1";else if(c===Ee.prores){let h=this.currentTrack.codecPrivate?De.decode(this.currentTrack.codecPrivate):"";Zr.includes(h)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=h)}let l=this.currentTrack;this.currentTrack.trackBacking=new ya(l),this.currentSegment.tracks.push(this.currentTrack)}else if(this.currentTrack.info.type==="audio"){c===Ee.aac?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===Ee.mp3?this.currentTrack.info.codec="mp3":c===Ee.opus?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=mn):c===Ee.vorbis?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):c===Ee.flac?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):c===Ee.ac3?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):c===Ee.eac3?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):c===Ee.dts?(this.currentTrack.info.codec="dts",this.currentTrack.codecId==="A_DTS/EXPRESS"?this.currentTrack.info.dtsFormat="dtse":this.currentTrack.codecId==="A_DTS/LOSSLESS"&&(this.currentTrack.info.dtsFormat="dtsl")):this.currentTrack.codecId==="A_PCM/INT/LIT"?this.currentTrack.info.bitDepth===8?this.currentTrack.info.codec="pcm-u8":this.currentTrack.info.bitDepth===16?this.currentTrack.info.codec="pcm-s16":this.currentTrack.info.bitDepth===24?this.currentTrack.info.codec="pcm-s24":this.currentTrack.info.bitDepth===32&&(this.currentTrack.info.codec="pcm-s32"):this.currentTrack.codecId==="A_PCM/INT/BIG"?this.currentTrack.info.bitDepth===8?this.currentTrack.info.codec="pcm-u8":this.currentTrack.info.bitDepth===16?this.currentTrack.info.codec="pcm-s16be":this.currentTrack.info.bitDepth===24?this.currentTrack.info.codec="pcm-s24be":this.currentTrack.info.bitDepth===32&&(this.currentTrack.info.codec="pcm-s32be"):this.currentTrack.codecId==="A_PCM/FLOAT/IEEE"&&(this.currentTrack.info.bitDepth===32?this.currentTrack.info.codec="pcm-f32":this.currentTrack.info.bitDepth===64&&(this.currentTrack.info.codec="pcm-f64"));let l=this.currentTrack;this.currentTrack.trackBacking=new wa(l),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null}break;case C.TrackNumber:{if(!this.currentTrack)break;this.currentTrack.id=q(e,s)}break;case C.TrackType:{if(!this.currentTrack)break;let o=q(e,s);o===1?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,horizontalScale:1,verticalScale:1,rotation:0,codec:null,codecDescription:null,colorSpace:{...Gi},alphaMode:!1,proresFormat:null}:o===2&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case C.FlagEnabled:{if(!this.currentTrack)break;q(e,s)||(this.currentTrack=null)}break;case C.FlagDefault:{if(!this.currentTrack)break;this.currentTrack.disposition.default=!!q(e,s)}break;case C.FlagForced:{if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!q(e,s)}break;case C.FlagOriginal:{if(!this.currentTrack)break;this.currentTrack.disposition.original=!!q(e,s)}break;case C.FlagHearingImpaired:{if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!q(e,s)}break;case C.FlagVisualImpaired:{if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!q(e,s)}break;case C.FlagCommentary:{if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!q(e,s)}break;case C.CodecID:{if(!this.currentTrack)break;this.currentTrack.codecId=kt(e,s)}break;case C.CodecPrivate:{if(!this.currentTrack)break;this.currentTrack.codecPrivate=K(e,s)}break;case C.DefaultDuration:{if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=q(e,s)}break;case C.Name:{if(!this.currentTrack)break;this.currentTrack.name=pr(e,s)}break;case C.Language:{if(!this.currentTrack||this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=kt(e,s),Ki(this.currentTrack.languageCode)||(this.currentTrack.languageCode=nr)}break;case C.LanguageBCP47:{if(!this.currentTrack)break;let c=kt(e,s).split("-")[0];c?this.currentTrack.languageCode=c:this.currentTrack.languageCode=nr,this.currentTrack.hasLanguageBcp47=!0}break;case C.Video:{if(this.currentTrack?.info?.type!=="video")break;this.readContiguousElements(e.slice(a,s))}break;case C.PixelWidth:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.width=q(e,s)}break;case C.PixelHeight:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.height=q(e,s)}break;case C.DisplayWidth:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayWidth=q(e,s)}break;case C.DisplayHeight:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayHeight=q(e,s)}break;case C.DisplayUnit:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayUnit=q(e,s)}break;case C.AlphaMode:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.alphaMode=q(e,s)===1}break;case C.Colour:{if(this.currentTrack?.info?.type!=="video")break;this.readContiguousElements(e.slice(a,s))}break;case C.MatrixCoefficients:{if(this.currentTrack?.info?.type!=="video")break;let o=q(e,s),c=Ye[o];this.currentTrack.info.colorSpace.matrix=c}break;case C.Range:{if(this.currentTrack?.info?.type!=="video")break;let o=q(e,s);this.currentTrack.info.colorSpace.fullRange=o===1||o===2?o===2:void 0}break;case C.TransferCharacteristics:{if(this.currentTrack?.info?.type!=="video")break;let o=q(e,s),c=Ke[o];this.currentTrack.info.colorSpace.transfer=c}break;case C.Primaries:{if(this.currentTrack?.info?.type!=="video")break;let o=q(e,s),c=je[o];this.currentTrack.info.colorSpace.primaries=c}break;case C.Projection:{if(this.currentTrack?.info?.type!=="video")break;this.readContiguousElements(e.slice(a,s))}break;case C.ProjectionPoseYaw:{if(this.currentTrack?.info?.type!=="video")break;let o=mr(e,s);try{let c=jr(o);this.currentTrack.info.horizontalScale=Math.round(Math.cos(c*Wi))}catch{}}break;case C.ProjectionPosePitch:{if(this.currentTrack?.info?.type!=="video")break;let o=mr(e,s);try{let c=jr(o);this.currentTrack.info.verticalScale=Math.round(Math.cos(c*Wi))}catch{}}break;case C.ProjectionPoseRoll:{if(this.currentTrack?.info?.type!=="video")break;let c=-mr(e,s);try{this.currentTrack.info.rotation=jr(c)}catch{}}break;case C.Audio:{if(this.currentTrack?.info?.type!=="audio")break;this.readContiguousElements(e.slice(a,s))}break;case C.SamplingFrequency:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.sampleRate=mr(e,s)}break;case C.Channels:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.numberOfChannels=q(e,s)}break;case C.BitDepth:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.bitDepth=q(e,s)}break;case C.CuePoint:{if(!this.currentSegment)break;this.readContiguousElements(e.slice(a,s)),this.currentCueTime=null}break;case C.CueTime:this.currentCueTime=q(e,s);break;case C.CueTrackPositions:{if(this.currentCueTime===null)break;P(this.currentSegment);let o={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(o),this.readContiguousElements(e.slice(a,s)),(o.trackId===-1||o.clusterPosition===-1)&&this.currentSegment.cuePoints.pop()}break;case C.CueTrack:{let o=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!o)break;o.trackId=q(e,s)}break;case C.CueClusterPosition:{let o=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!o)break;P(this.currentSegment),o.clusterPosition=this.currentSegment.dataStartPos+q(e,s)}break;case C.Timestamp:{if(!this.currentCluster)break;this.currentCluster.timestamp=q(e,s)}break;case C.SimpleBlock:{if(!this.currentCluster)break;let o=fr(e);if(o===null)break;let c=this.getTrackDataInCluster(this.currentCluster,o);if(!c)break;let l=Jr(e),h=H(e),d=h>>1&3,u=!!(h&128);c.track.info?.type==="audio"&&c.track.info.codec&&(u=!0);let f=K(e,s-(e.filePos-a)),p=c.track.decodingInstructions.length>0;c.blocks.push({timestamp:l,duration:0,isKeyFrame:u,data:f,lacing:d,decoded:!p,postProcessed:!1,mainAdditional:null})}break;case C.BlockGroup:{if(!this.currentCluster)break;this.readContiguousElements(e.slice(a,s)),this.currentBlock=null}break;case C.Block:{if(!this.currentCluster)break;let o=fr(e);if(o===null)break;let c=this.getTrackDataInCluster(this.currentCluster,o);if(!c)break;let l=Jr(e),d=H(e)>>1&3,u=K(e,s-(e.filePos-a)),f=c.track.decodingInstructions.length>0;this.currentBlock={timestamp:l,duration:0,isKeyFrame:!0,data:u,lacing:d,decoded:!f,postProcessed:!1,mainAdditional:null},c.blocks.push(this.currentBlock)}break;case C.BlockAdditions:this.readContiguousElements(e.slice(a,s));break;case C.BlockMore:{if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(a,s)),this.currentBlockAdditional.data&&this.currentBlockAdditional.addId===1&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null}break;case C.BlockAdditional:{if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=K(e,s)}break;case C.BlockAddID:{if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=q(e,s)}break;case C.BlockDuration:{if(!this.currentBlock)break;this.currentBlock.duration=q(e,s)}break;case C.ReferenceBlock:{if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1}break;case C.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(a,s));break;case C.Targets:this.readContiguousElements(e.slice(a,s));break;case C.TargetTypeValue:q(e,s)!==50&&(this.currentTagTargetIsMovie=!1);break;case C.TagTrackUID:case C.TagEditionUID:case C.TagChapterUID:case C.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case C.SimpleTag:{if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(a,s))}break;case C.TagName:this.currentSimpleTagName=pr(e,s);break;case C.TagString:{if(!this.currentSimpleTagName)break;let o=pr(e,s);this.processTagValue(this.currentSimpleTagName,o)}break;case C.TagBinary:{if(!this.currentSimpleTagName)break;let o=K(e,s);this.processTagValue(this.currentSimpleTagName,o)}break;case C.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(a,s));let o=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(o.raw??={},o.raw[this.currentAttachedFile.fileUid.toString()]=new Zi(this.currentAttachedFile.fileData,this.currentAttachedFile.fileMediaType??void 0,this.currentAttachedFile.fileName??void 0,this.currentAttachedFile.fileDescription??void 0)),this.currentAttachedFile.fileMediaType?.startsWith("image/")&&this.currentAttachedFile.fileData){let c=this.currentAttachedFile.fileName,l="unknown";if(c){let h=c.toLowerCase();h.startsWith("cover.")?l="coverFront":h.startsWith("back.")&&(l="coverBack")}o.images??=[],o.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:l,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case C.FileUID:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=kd(e,s)}break;case C.FileName:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileName=pr(e,s)}break;case C.FileMediaType:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileMediaType=kt(e,s)}break;case C.FileData:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileData=K(e,s)}break;case C.FileDescription:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileDescription=pr(e,s)}break;case C.ContentEncodings:{if(!this.currentTrack)break;this.readContiguousElements(e.slice(a,s)),this.currentTrack.decodingInstructions.sort((o,c)=>c.order-o.order)}break;case C.ContentEncoding:this.currentDecodingInstruction={order:0,scope:vn.Block,data:null},this.readContiguousElements(e.slice(a,s)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case C.ContentEncodingOrder:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=q(e,s)}break;case C.ContentEncodingScope:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=q(e,s)}break;case C.ContentCompression:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:ti.Zlib,settings:null},this.readContiguousElements(e.slice(a,s))}break;case C.ContentCompAlgo:{if(this.currentDecodingInstruction?.data?.type!=="decompress")break;this.currentDecodingInstruction.data.algorithm=q(e,s)}break;case C.ContentCompSettings:{if(this.currentDecodingInstruction?.data?.type!=="decompress")break;this.currentDecodingInstruction.data.settings=K(e,s)}break;case C.ContentEncryption:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}break}return e.filePos=a+s,!0}decodeBlockData(e,t){P(e.decodingInstructions.length>0);let i=t;for(let n of e.decodingInstructions)switch(P(n.data),n.data.type){case"decompress":switch(n.data.algorithm){case ti.HeaderStripping:if(n.data.settings&&n.data.settings.length>0){let s=n.data.settings,a=new Uint8Array(s.length+i.length);a.set(s,0),a.set(i,s.length),i=a}break;default:}break;default:}return i}processTagValue(e,t){if(!this.currentSegment?.metadataTags)return;let i=this.currentSegment.metadataTags;if(i.raw??={},i.raw[e]??=t,typeof t=="string")switch(e.toLowerCase()){case"title":i.title??=t;break;case"description":i.description??=t;break;case"artist":i.artist??=t;break;case"album":i.album??=t;break;case"album_artist":i.albumArtist??=t;break;case"genre":i.genre??=t;break;case"bpm":{let n=Number.parseInt(t,10);Number.isInteger(n)&&n>0&&(i.beatsPerMinute??=n)}break;case"comment":i.comment??=t;break;case"lyrics":i.lyrics??=t;break;case"date":{let n=new Date(t);Number.isNaN(n.getTime())||(i.date??=n)}break;case"track_number":case"part_number":{let n=t.split("/"),s=Number.parseInt(n[0],10),a=n[1]&&Number.parseInt(n[1],10);Number.isInteger(s)&&s>0&&(i.trackNumber??=s),a&&Number.isInteger(a)&&a>0&&(i.tracksTotal??=a)}break;case"disc_number":case"disc":{let n=t.split("/"),s=Number.parseInt(n[0],10),a=n[1]&&Number.parseInt(n[1],10);Number.isInteger(s)&&s>0&&(i.discNumber??=s),a&&Number.isInteger(a)&&a>0&&(i.discsTotal??=a)}break}}async getDurationFromMetadata(e){if(e.duration<=0)return null;let t=null;for(let n of e.tracks){P(n.trackBacking);let s=await n.trackBacking.getFirstPacket({metadataOnly:!0});s&&(t=Math.min(t??1/0,s.timestamp))}let i=e.duration/e.timestampFactor;return i+=t??0,i}},Cn=class{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType(),i=0;for(let n of e.segments)for(let s of n.tracks)if(s.trackBacking.getType()===t&&i++,s===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){return this.performClusterLookup(null,t=>t.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)}intoTimescale(e){return qi(e*this.internalTrack.segment.timestampFactor)}async getPacket(e,t){let i=this.intoTimescale(e);return this.performClusterLookup(null,n=>{let s=n.trackData.get(this.internalTrack.id);if(!s)return{blockIndex:-1,correctBlockFound:!1};let a=re(s.presentationTimestamps,i,l=>l.timestamp),o=a!==-1?s.presentationTimestamps[a].blockIndex:-1,c=a!==-1&&i<s.endTimestamp;return{blockIndex:o,correctBlockFound:c}},i,i,t)}async getNextPacket(e,t){let i=this.packetToClusterLocation.get(e);if(i===void 0)throw new Error("Packet was not created from this track.");return this.performClusterLookup(i.cluster,n=>{if(n===i.cluster){let s=n.trackData.get(this.internalTrack.id);if(i.blockIndex+1<s.blocks.length)return{blockIndex:i.blockIndex+1,correctBlockFound:!0}}else if(n.trackData.get(this.internalTrack.id))return{blockIndex:0,correctBlockFound:!0};return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async getKeyPacket(e,t){let i=this.intoTimescale(e);return this.performClusterLookup(null,n=>{let s=n.trackData.get(this.internalTrack.id);if(!s)return{blockIndex:-1,correctBlockFound:!1};let a=$i(s.presentationTimestamps,l=>s.blocks[l.blockIndex].isKeyFrame&&l.timestamp<=i),o=a!==-1?s.presentationTimestamps[a].blockIndex:-1,c=a!==-1&&i<s.endTimestamp;return{blockIndex:o,correctBlockFound:c}},i,i,t)}async getNextKeyPacket(e,t){let i=this.packetToClusterLocation.get(e);if(i===void 0)throw new Error("Packet was not created from this track.");return this.performClusterLookup(i.cluster,n=>{if(n===i.cluster){let a=n.trackData.get(this.internalTrack.id).blocks.findIndex((o,c)=>o.isKeyFrame&&c>i.blockIndex);if(a!==-1)return{blockIndex:a,correctBlockFound:!0}}else{let s=n.trackData.get(this.internalTrack.id);if(s&&s.firstKeyFrameTimestamp!==null){let a=s.blocks.findIndex(o=>o.isKeyFrame);return P(a!==-1),{blockIndex:a,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,i){if(t===-1)return null;let s=e.trackData.get(this.internalTrack.id).blocks[t];if(P(s),s.decoded||(s.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,s.data),s.decoded=!0),!s.postProcessed){if(this.internalTrack.info?.codec==="prores"&&!(s.data.length>=8&&s.data[4]===105&&s.data[5]===99&&s.data[6]===112&&s.data[7]===102)){let u=new Uint8Array(s.data.length+8);te(u).setUint32(0,u.length,!1),u[4]=105,u[5]=99,u[6]=112,u[7]=102,u.set(s.data,8),s.data=u}s.postProcessed=!0}let a=i.metadataOnly?xt:s.data,o=s.timestamp/this.internalTrack.segment.timestampFactor,c=s.duration/this.internalTrack.segment.timestampFactor,l={};s.mainAdditional&&this.internalTrack.info?.type==="video"&&this.internalTrack.info.alphaMode&&(l.alpha=i.metadataOnly?xt:s.mainAdditional,l.alphaByteLength=s.mainAdditional.byteLength);let h=new Te(a,s.isKeyFrame?"key":"delta",o,c,e.dataStartPos+t,s.data.byteLength,l);return this.packetToClusterLocation.set(h,{cluster:e,blockIndex:t}),h}async performClusterLookup(e,t,i,n,s){let{demuxer:a,segment:o}=this.internalTrack,c=null,l=null,h=-1;if(e){let{blockIndex:w,correctBlockFound:m}=t(e);if(m)return this.fetchPacketInCluster(e,w,s);w!==-1&&(l=e,h=w)}let d=re(this.internalTrack.cuePoints,i,w=>w.time),u=d!==-1?this.internalTrack.cuePoints[d]:null,f=re(this.internalTrack.clusterPositionCache,i,w=>w.startTimestamp),p=f!==-1?this.internalTrack.clusterPositionCache[f]:null,g=Math.max(u?.clusterPosition??0,p?.elementStartPos??0)||null,y;for(e?g===null||e.elementStartPos>=g?(y=e.elementEndPos,c=e):y=g:y=g??o.clusterSeekStartPos;o.elementEndPos===null||y<=o.elementEndPos-Ce;){if(c){let k=c.trackData.get(this.internalTrack.id);if(k&&k.startTimestamp>n)break}let w=a.reader.requestSliceRange(y,Ce,Ve);if(V(w)&&(w=await w),!w)break;let m=y,b=He(w);if(!b||!ur.includes(b.id)&&b.id!==C.Void){let k=await ma(a.reader,m,ur,Math.min(o.elementEndPos??1/0,m+Ed));if(k){y=k;continue}else break}let A=b.id,T=b.size,S=w.filePos;if(A===C.Cluster){c=await a.readCluster(m,o),T=c.elementEndPos-S;let{blockIndex:k,correctBlockFound:E}=t(c);if(E)return this.fetchPacketInCluster(c,k,s);k!==-1&&(l=c,h=k)}T===void 0&&(P(A!==C.Cluster),T=(await En(a.reader,S,ei,o.elementEndPos)).pos-S);let x=S+T;if(o.elementEndPos===null){let k=a.reader.requestSliceRange(x,Ce,Ve);if(V(k)&&(k=await k),!k)break;if(Tn(k)===C.Segment){o.elementEndPos=x;break}}y=x}if(u&&(!l||l.elementStartPos<u.clusterPosition)){let w=this.internalTrack.cuePoints[d-1];P(!w||w.time<u.time);let m=w?.time??-1/0;return this.performClusterLookup(null,t,m,n,s)}return l?this.fetchPacketInCluster(l,h,s):null}},ya=class extends Cn{constructor(e){super(e),this.decoderConfigPromise=null}getType(){return"video"}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getTransformationMatrix(){let e=this.internalTrack.info,t=er(Fl(e.horizontalScale,e.verticalScale),Il(e.rotation));return Pl(t,e.width,e.height)}async getColorSpace(){let e=await this.getDecoderConfig();return e?{primaries:e.colorSpace?.primaries,transfer:e.colorSpace?.transfer,matrix:e.colorSpace?.matrix,fullRange:e.colorSpace?.fullRange}:this.internalTrack.info.colorSpace}async canBeTransparent(){return this.internalTrack.info.alphaMode||this.internalTrack.info.codec==="prores"&&(this.internalTrack.info.proresFormat==="ap4h"||this.internalTrack.info.proresFormat==="ap4x")}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{let e=null;(this.internalTrack.info.codec==="vp9"||this.internalTrack.info.codec==="av1"||this.internalTrack.info.codec==="prores"||this.internalTrack.info.codec==="avc"&&!this.internalTrack.info.codecDescription||this.internalTrack.info.codec==="hevc"&&!this.internalTrack.info.codecDescription)&&(e=await this.getFirstPacket({}));let i={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:this.internalTrack.info.codec==="avc"&&e?on(e.data):null,hevcCodecInfo:this.internalTrack.info.codec==="hevc"&&e?cn(e.data):null,vp9CodecInfo:this.internalTrack.info.codec==="vp9"&&e?ln(e.data):null,av1CodecInfo:this.internalTrack.info.codec==="av1"&&e?Xr(e.data):null,proresCodecInfo:this.internalTrack.info.codec==="prores"&&e?dn(e.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!Yr(this.internalTrack.info.colorSpace)){let s=fn(i);this.internalTrack.info.colorSpace.primaries??=s.primaries,this.internalTrack.info.colorSpace.transfer??=s.transfer,this.internalTrack.info.colorSpace.matrix??=s.matrix,this.internalTrack.info.colorSpace.fullRange??=s.fullRange}let n={codec:un(i),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return(this.internalTrack.info.width!==this.internalTrack.info.squarePixelWidth||this.internalTrack.info.height!==this.internalTrack.info.squarePixelHeight)&&(n.displayAspectWidth=this.internalTrack.info.squarePixelWidth,n.displayAspectHeight=this.internalTrack.info.squarePixelHeight),n})():null}},wa=class extends Cn{constructor(e){super(e),this.decoderConfigPromise=null}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{if(this.internalTrack.info.codec==="dts"&&!this.internalTrack.info.dtsFormat){let e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&hn(e.data)}return{codec:pn({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})():null}};var eb=Uh(_d());Qi();var xa=0,Aa=1/0,ip=null;typeof FinalizationRegistry<"u"&&(ip=new FinalizationRegistry(r=>{r()}));var Oe=class extends yt{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,typeof FinalizationRegistry<"u"&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}async getSizeOrNull(){if(this._disposed)throw new me;return this._sizePromise??=(async()=>{let e=this._getFileSize();return e!==void 0||(await this._read(0,1,xa,Aa),e=this._getFileSize(),P(e!==void 0)),e})()}async getSize(){if(this._disposed)throw new me;let e=await this.getSizeOrNull();if(e===null)throw new Error("Cannot determine the size of an unsized source.");return e}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(t!==void 0&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new Rn(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit("read",{start:e,end:t})}ref(){return new Mt(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,this._refCount===0&&(this._dispose(),this._disposed=!0)}},Mt=class{constructor(e){if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),e._refFinalizationRegistry?.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");let e=this.source;P(e._refCount>0),e._decrementRefCount(),e._refFinalizationRegistry?.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}},ri=class extends Oe{constructor(e,t){if(typeof e!="string")throw new TypeError("rootPath must be a string.");if(typeof t!="function")throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){let t=this.requestHandler(e),i=n=>{if(!(n instanceof Oe||n instanceof Mt))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");let s=n instanceof Oe?n.ref():n;return s.source._usedForHls||=this._usedForHls,s};return V(t)?t.then(i):i(t)}},ka=(r,e)=>r.path===e.path;var Cd=typeof FinalizationRegistry<"u"?new FinalizationRegistry(r=>{r.cancel().catch(()=>{})}):null,ii=class extends Oe{constructor(e,t={}){if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.maxCacheSize!==void 0&&(!sr(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(t.useStreamReader!==void 0&&typeof t.useStreamReader!="boolean")throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(t.handleUnhandledError!==void 0&&typeof t.handleUnhandledError!="function")throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new ba({maxCacheSize:t.maxCacheSize??8*2**20,maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:i=>{let n=this._readers.get(i);n&&(this._readers.delete(i),Cd?.unregister(i),n.cancel().catch(()=>{}))},prefetchProfile:sp.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,n){return this._orchestrator.read(e,t,i,n)}async _runWorker(e){P(e.strictTarget);let t=this._readers.get(e);for(t===void 0&&("stream"in this._blob&&!Js()&&this._options.useStreamReader!==!1?(t=this._blob.slice(e.currentPos).stream().getReader(),Cd?.register(e,t,e)):t=null,this._readers.set(e,t));e.currentPos<e.targetPos&&!e.aborted;)if(t){let{done:i,value:n}=await t.read();if(i)throw this._orchestrator.onWorkerFinished(e),new Error("Blob reader stopped unexpectedly before all requested data was read.");if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+n.length),this._orchestrator.supplyWorkerData(e,n)}else{let i=await this._blob.slice(e.currentPos,e.targetPos).arrayBuffer();if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+i.byteLength),this._orchestrator.supplyWorkerData(e,new Uint8Array(i))}this._orchestrator.signalWorkerStoppedRunning(e),e.aborted&&await t?.cancel().catch(()=>{})}_dispose(){this._orchestrator.dispose()}},np=.5*2**20;var sp={none:(r,e)=>({start:r,end:e}),fileSystem:(r,e)=>(r=Math.floor((r-65536)/65536)*65536,e=Math.ceil((e+65536)/65536)*65536,{start:r,end:e}),network:(r,e,t)=>{r=Math.max(0,Math.floor((r-65536)/65536)*65536);for(let n of t){let a=Math.max((n.startPos+n.targetPos)/2,n.targetPos-8388608);if(Yi(r,e,a,n.targetPos)){let o=n.targetPos-n.startPos,c=Math.ceil((o+1)/8388608)*8388608,l=2**Math.ceil(Math.log2(o+1)),h=Math.min(l,c);e=Math.max(e,n.startPos+h)}}return e=Math.max(e,r+np),{start:r,end:e}}},ba=class{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,n){P(!this.disposed);let s=this.options.prefetchProfile(e,t,this.workers),a=Math.max(s.start,i),o=Math.min(s.end,this.fileSize??1/0,n);P(a<=e&&t<=o);let c=null,l=re(this.cache,e,T=>T.start),h=l!==-1?this.cache[l]:null;h&&h.start<=e&&t<=h.end&&(h.age=this.nextAge++,c={bytes:h.bytes,view:h.view,offset:h.start});let d=re(this.cache,a,T=>T.start),u=c?null:new Uint8Array(t-e),f=0,p=a,g=[];if(d!==-1){for(let T=d;T<this.cache.length;T++){let S=this.cache[T];if(S.start>=o)break;if(S.end<=a)continue;let x=Math.max(a,S.start),k=Math.min(o,S.end);if(P(x<=k),p<x&&g.push({start:p,end:x}),p=k,u){let E=Math.max(e,S.start),_=Math.min(t,S.end);if(E<_){let N=E-e;u.set(S.bytes.subarray(E-S.start,_-S.start),N),N===f&&(f=_-e)}}S.age=this.nextAge++}p<o&&g.push({start:p,end:o})}else g.push({start:a,end:o});if(u&&f>=u.length&&(c={bytes:u,view:te(u),offset:e}),g.length===0)return P(c),c;let{promise:y,resolve:w,reject:m}=Ft(),b=[];for(let T of g){let S=Math.max(e,T.start),x=Math.min(t,T.end);S===T.start&&x===T.end?b.push(T):S<x&&b.push({start:S,end:x})}let A=u&&{start:e,bytes:u,holes:b,resolve:w,reject:m};e:for(let T of g){for(let k of this.workers)if(this.checkHoleAgainstWorker(k,T,A?[A]:[])){this.checkQueuedReadsAgainstWorker(k);continue e}let S=T.end<o||this.fileSize!==null,x=this.createWorker(T.start,T.end,S);if(x)A&&(x.pendingSlices=[A]),this.runWorker(x);else{let k=re(this.queuedReads,T.start,_=>_.hole.start),E=k!==-1?this.queuedReads[k]:null;for(E&&T.start<=E.hole.end?(E.hole.end=Math.max(E.hole.end,T.end),E.strictTarget&&=S,A&&E.pendingSlices.push(A)):(k++,E={hole:{start:T.start,end:T.end},strictTarget:S,pendingSlices:A?[A]:[],age:this.nextAge++},this.queuedReads.splice(k,0,E));k+1<this.queuedReads.length;){let _=this.queuedReads[k+1];if(_.hole.start>E.hole.end)break;E.hole.end=Math.max(E.hole.end,_.hole.end),E.pendingSlices.push(..._.pendingSlices),E.strictTarget&&=_.strictTarget,E.age=Math.min(E.age,_.age),this.queuedReads.splice(k+1,1)}}}return c?y.catch(T=>{if(!this.disposed)if(this.options.handleUnhandledError)this.options.handleUnhandledError(T);else throw T}):(P(u),c=y.then(T=>T&&{bytes:T,view:te(T),offset:e})),c}checkHoleAgainstWorker(e,t,i){if(Yi(t.start-131072,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let s=0;s<i.length;s++){let a=i[s];e.pendingSlices.includes(a)||e.pendingSlices.push(a)}return e.running||this.runWorker(e),!0}return!1}checkQueuedReadsAgainstWorker(e){let t=!1;for(let i=0;i<this.queuedReads.length;i++){let n=this.queuedReads[i];if(this.checkHoleAgainstWorker(e,n.hole,n.pendingSlices))this.queuedReads.splice(i,1),i--,t=!0;else if(t)break}}createWorker(e,t,i){if(this.workers.length>=this.options.maxWorkerCount){let s=null,a=null;for(let o=0;o<this.workers.length;o++){let c=this.workers[o];!c.running&&c.pendingSlices.length===0&&(!s||c.age<s.age)&&(a=o,s=c)}if(s)P(a!==null),P(s.pendingSlices.length===0),this.workers.splice(a,1),this.options.onIdleWorkerRemoved?.(s);else return null}let n={startPos:e,currentPos:e,targetPos:t,strictTarget:i,running:!1,aborted:this.disposed,pendingSlices:[],age:this.nextAge++};return this.workers.push(n),n}runWorker(e){P(!e.running),P(e.currentPos<e.targetPos),e.running=!0,e.age=this.nextAge++,this.options.runWorker(e).catch(t=>{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(i=>i.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed)if(this.options.handleUnhandledError)this.options.handleUnhandledError(t);else throw t}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let t=0;for(let s=1;s<this.queuedReads.length;s++)this.queuedReads[s].age<this.queuedReads[t].age&&(t=s);let i=this.queuedReads[t],n=this.createWorker(i.hole.start,i.hole.end,i.strictTarget);if(!n)return;this.queuedReads.splice(t,1),n.pendingSlices=i.pendingSlices,this.runWorker(n)}})}supplyWorkerData(e,t){P(!e.aborted);let i=e.currentPos,n=i+t.length;this.insertIntoCache({start:i,end:n,bytes:t,view:te(t),age:this.nextAge++}),e.currentPos+=t.length,e.currentPos>e.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let s=0;s<e.pendingSlices.length;s++){let a=e.pendingSlices[s],o=Math.max(i,a.start),c=Math.min(n,a.start+a.bytes.length);o<c&&a.bytes.set(t.subarray(o-i,c-i),o-a.start);for(let l=0;l<a.holes.length;l++){let h=a.holes[l];i<=h.start&&n>h.start&&(h.start=n),h.end<=h.start&&(a.holes.splice(l,1),l--)}a.holes.length===0&&(a.resolve(a.bytes),e.pendingSlices.splice(s,1),s--)}for(let s=0;s<this.workers.length;s++){let a=this.workers[s];e===a||a.running||Yi(i,n,a.currentPos,a.targetPos)&&(this.workers.splice(s,1),this.options.onIdleWorkerRemoved?.(a),s--)}}supplyFileSize(e){P(this.fileSize===null),this.fileSize=e;for(let t of this.workers){t.targetPos=Math.min(t.targetPos,e),t.strictTarget=!0;for(let i=0;i<t.pendingSlices.length;i++){let n=t.pendingSlices[i];for(let s of n.holes)if(s.end>e){n.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t<this.queuedReads.length;t++){let i=this.queuedReads[t];if(i.hole.start>=e){for(let n of i.pendingSlices)n.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let n=0;n<i.pendingSlices.length;n++){let s=i.pendingSlices[n];s.start>=e&&(s.resolve(null),i.pendingSlices.splice(n,1),n--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){let t=this.workers.indexOf(e);P(t!==-1),e.running=!1,this.workers.splice(t,1),this.options.onIdleWorkerRemoved?.(e),this.fileSize===null&&this.supplyFileSize(e.currentPos);for(let i of e.pendingSlices)i.resolve(null)}insertIntoCache(e){if(this.options.maxCacheSize===0)return;let t=re(this.cache,e.start,i=>i.start)+1;if(t>0){let i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){let n=new Uint8Array(e.end-i.start);n.set(i.bytes,0),n.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=n,i.view=te(n),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i<this.cache.length;i++){let n=this.cache[i];if(e.end<=n.start)break;if(e.end>=n.end){this.cache.splice(i,1),this.currentCacheSize-=n.bytes.length,i--;continue}let s=new Uint8Array(n.end-e.start);s.set(e.bytes,0),s.set(n.bytes,n.start-e.start),this.currentCacheSize-=e.end-n.start,e.bytes=s,e.view=te(s),e.end=n.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let i=0,n=this.cache[0];for(let s=1;s<this.cache.length;s++){let a=this.cache[s];a.age<n.age&&(i=s,n=a)}if(this.currentCacheSize-n.bytes.length<=this.options.maxCacheSize)break;this.cache.splice(i,1),this.currentCacheSize-=n.bytes.length}}dispose(){for(let e of this.workers){for(let t of e.pendingSlices)t.reject(new me);e.pendingSlices.length=0,e.aborted=!0,e.running||this.options.onIdleWorkerRemoved?.(e)}for(let e of this.queuedReads)for(let t of e.pendingSlices)t.reject(new me);this.workers.length=0,this.cache.length=0,this.queuedReads.length=0,this.disposed=!0}};var Rn=class extends Oe{constructor(e,t,i){if(super(),this._ref=null,e._disposed)throw new Error("Cannot create a slice of a disposed source.");this._baseSource=e,this._offset=t,this._length=i??null}_getFileSize(){let e=this._baseSource._getFileSize();return e===void 0?this._length!==null?this._length:void 0:e===null?this._length!==null?this._length:null:ir(e-this._offset,0,this._length??1/0)}_read(e,t,i,n){if(this._length!==null&&t>this._length)return null;let s=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+n),a=o=>o?(o.offset-=this._offset,o):null;return V(s)?s.then(a):a(s)}_dispose(){this._ref?.free()}ref(){return this._ref??=this._baseSource.ref(),super.ref()}};var Nt=class{constructor(){this._isIsobmff=!1}},ni=class extends Nt{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(V(t)&&(t=await t),!t)return null;t.skip(4);let i=_e(t,4);return i!=="ftyp"&&i!=="styp"?null:_e(t,4)}_createDemuxer(e){return new bn(e)}},Pn=class extends ni{async _canReadInput(e){let t=await this._getMajorBrand(e);if(t!==null)return t!=="qt ";let i=0;for(let n=0;n<10;n++){let s=e._reader.requestSlice(i,8);if(V(s)&&(s=await s),!s)return!1;let a=D(s),o=8;if(a===1){let l=e._reader.requestSlice(i+8,8);if(V(l)&&(l=await l),!l)return!1;a=Ae(l),o=16}if(a<o)return!1;let c=_e(s,4);if(c==="moof"||c==="sidx")return!0;if(c==="emsg"||c==="prft"||c==="free")i+=a;else return!1}return!1}get name(){return"MP4"}get mimeType(){return"video/mp4"}},In=class extends ni{async _canReadInput(e){return await this._getMajorBrand(e)==="qt "}get name(){return"QuickTime File Format"}get mimeType(){return"video/quicktime"}},Ut=class extends Nt{async isSupportedEBMLOfDocType(e,t){let i=e._reader.requestSlice(0,Ve);if(V(i)&&(i=await i),!i)return!1;let n=fa(i);if(n===null||n<1||n>8||q(i,n)!==C.EBML)return!1;let a=pa(i);if(typeof a!="number")return!1;let o=e._reader.requestSlice(i.filePos,a);if(V(o)&&(o=await o),!o)return!1;let c=i.filePos;for(;o.filePos<=c+a-Ce;){let l=He(o);if(!l)break;let{id:h,size:d}=l,u=o.filePos;if(d===void 0)return!1;switch(h){case C.EBMLVersion:if(q(o,d)!==1)return!1;break;case C.EBMLReadVersion:if(q(o,d)!==1)return!1;break;case C.DocType:if(kt(o,d)!==t)return!1;break;case C.DocTypeVersion:if(q(o,d)>4)return!1;break}o.filePos=u+d}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new _n(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}},Fn=class extends Ut{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}};var Sa=new Pn,Ta=new In,Ea=new Ut,va=new Fn;var Rd=(r,e)=>{if(!r||typeof r!="object")throw new TypeError(`${e}, when provided, must be an object.`);if(r.isobmff!==void 0){if(!r.isobmff||typeof r.isobmff!="object")throw new TypeError(`${e}.isobmff, when provided, must be an object.`);if(r.isobmff.resolveKeyId!==void 0&&typeof r.isobmff.resolveKeyId!="function")throw new TypeError(`${e}.isobmff.resolveKeyId, when provided, must be a function.`)}if(r.hls!==void 0){if(!r.hls||typeof r.hls!="object")throw new TypeError(`${e}.hls, when provided, must be an object.`);if(r.hls.offsetTimestampsByDateTime!==void 0&&typeof r.hls.offsetTimestampsByDateTime!="boolean")throw new TypeError(`${e}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}};var Pd=[],Id=[];var Lt=r=>{if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(r.metadataOnly!==void 0&&typeof r.metadataOnly!="boolean")throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(r.verifyKeyPackets!==void 0&&typeof r.verifyKeyPackets!="boolean")throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(r.verifyKeyPackets&&r.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(r.skipLiveWait!==void 0&&typeof r.skipLiveWait!="boolean")throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},Fd=r=>{if(!sr(r))throw new TypeError("timestamp must be a number.")},_a=(r,e,t)=>t.verifyKeyPackets?e.then(async i=>{if(!i||i.type==="delta")return i;let n=await r.determinePacketType(i);return n&&(i.type=n),i}):e,Tt=class{constructor(e){if(!(e instanceof gr))throw new TypeError("track must be an InputTrack.");this._track=e}async getFirstPacket(e={}){if(Lt(e),this._track.input._disposed)throw new me;return _a(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){Lt(e);let t=await this.getFirstPacket(e);return t?t.type==="key"?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(Fd(e),Lt(t),this._track.input._disposed)throw new me;return _a(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof Te))throw new TypeError("packet must be an EncodedPacket.");if(Lt(t),this._track.input._disposed)throw new me;return _a(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(Fd(e),Lt(t),this._track.input._disposed)throw new me;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);let i=await this._track._backing.getKeyPacket(e,t);return i&&(P(i.type==="key"),await this._track.determinePacketType(i)==="delta"?this.getKeyPacket(i.timestamp-1/await this._track.getTimeResolution(),t):i)}async getNextKeyPacket(e,t={}){if(!(e instanceof Te))throw new TypeError("packet must be an EncodedPacket.");if(Lt(t),this._track.input._disposed)throw new me;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);let i=await this._track._backing.getNextKeyPacket(e,t);return i&&(P(i.type==="key"),await this._track.determinePacketType(i)==="delta"?this.getNextKeyPacket(i,t):i)}packets(e,t,i={}){if(e!==void 0&&!(e instanceof Te))throw new TypeError("startPacket must be an EncodedPacket.");if(e!==void 0&&e.isMetadataOnly&&!i?.metadataOnly)throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(t!==void 0&&!(t instanceof Te))throw new TypeError("endPacket must be an EncodedPacket.");if(Lt(i),this._track.input._disposed)throw new me;let n=[],{promise:s,resolve:a}=Ft(),{promise:o,resolve:c}=Ft(),l=!1,h=!1,d=null,u=!1,f=[],p=()=>Math.max(2,f.length);(async()=>{let y=e??await this.getFirstPacket(i);for(;y&&!h&&!this._track.input._disposed&&!(t&&y.sequenceNumber>=t?.sequenceNumber);){if(n.length>p()){({promise:o,resolve:c}=Ft()),await o;continue}n.push(y),a(),{promise:s,resolve:a}=Ft(),y=await this.getNextPacket(y,i)}l=!0,a()})().catch(y=>{u||(d=y,u=!0,a())});let g=this._track;return{async next(){for(;;){if(g.input._disposed)throw new me;if(h)return{value:void 0,done:!0};if(u)throw d;if(n.length>0){let y=n.shift(),w=performance.now();for(f.push(w);f.length>0&&w-f[0]>=1e3;)f.shift();return c(),{value:y,done:!1}}else{if(l)return{value:void 0,done:!0};await s}}},async return(){return h=!0,c(),a(),{value:void 0,done:!0}},async throw(y){throw y},[Symbol.asyncIterator](){return this}}}};var gr=class r{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof yr}isAudioTrack(){return this instanceof wr}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return oe(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return oe(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return oe(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return oe(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getUnixTimeForTimestamp(e){return this._backing.getUnixTimeForTimestamp(e)}async hasUnixTimeMapping(){return await this._backing.getUnixTimeForTimestamp(await this.getFirstTimestamp())!==null}async getDisposition(){return this._backing.getDisposition()}get disposition(){return oe(this._backing.getDisposition(),"disposition","getDisposition")}async getBitrate(){return this._backing.getBitrate()}async getAverageBitrate(){return this._backing.getAverageBitrate()}async getFirstTimestamp(){return(await this._backing.getFirstPacket({metadataOnly:!0}))?.timestamp??0}async computeDuration(e){let t=await this._backing.getPacket(1/0,{metadataOnly:!0,...e}),i=(t?.timestamp??0)+(t?.duration??0);return Ol(i,await this.getTimeResolution())}async getDurationFromMetadata(e={}){return this._backing.getDurationFromMetadata(e)}async computePacketStats(e=1/0,t){let i=new Tt(this),n=1/0,s=-1/0,a=0,o=0;for await(let c of i.packets(void 0,void 0,{metadataOnly:!0,...t})){if(a>=e&&c.timestamp>=s)break;n=Math.min(n,c.timestamp),s=Math.max(s,c.timestamp+c.duration),a++,o+=c.byteLength}return{packetCount:a,averagePacketRate:a?Number((a/(s-n)).toPrecision(16)):0,averageBitrate:a?Number((8*o/(s-n)).toPrecision(16)):0}}async isLive(){return await this._backing.getLiveRefreshInterval()!==null}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(e){if(!(e instanceof r))throw new TypeError("other must be an InputTrack.");return this.input!==e.input||this===e?!1:(this._backing.getPairingMask()&e._backing.getPairingMask())!==0n}async getPairableTracks(e){return this.input.getTracks(Et({filter:t=>t.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(Et({filter:t=>t.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(Et({filter:t=>t.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(Et({filter:t=>t.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(Et({filter:t=>t.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&=Ca(e);let t=await this.input.getTracks();for(let i of t)if(this.canBePairedWith(i)&&(!e||await e(i)))return!0;return!1}hasPairableVideoTrack(e){return e&&=Ca(e),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&=Ca(e),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}},oe=(r,e,t)=>{if(V(r))throw new Error(`'${e}' is deprecated and not available synchronously for this track. Use the preferred '${t}()' instead.`);return r},Ca=r=>{if(r!==void 0&&typeof r!="function")throw new TypeError("predicate, when provided, must be a function.");return r?e=>{let t=n=>{if(typeof n!="boolean")throw new TypeError("predicate must return or resolve to a boolean value.");return n},i=r(e);return V(i)?i.then(t):t(i)}:void 0},yr=class extends gr{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null}get type(){return"video"}async getCodec(){return this._backing.getCodec()}get codec(){return oe(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??await this._backing.getCodec()==="prores"}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return oe(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return oe(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getTransformationMatrix(){return this._backing.getTransformationMatrix()}async getRotation(){return Kr(await this._backing.getTransformationMatrix())}get rotation(){return Kr(oe(this._backing.getTransformationMatrix(),"rotation","getRotation"))}async getFlip(){return Ws(await this._backing.getTransformationMatrix())}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return oe(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return oe(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??=Xi({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()})}get pixelAspectRatio(){return this._pixelAspectRatioCache??=Xi({num:oe(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*oe(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:oe(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*oe(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")})}async getDisplayWidth(){let e=await this._backing.getMetadataDisplayWidth?.();return e??(await this.getRotation()%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight())}get displayWidth(){let e=this._backing.getMetadataDisplayWidth?.();if(e!==void 0){let n=oe(e,"displayWidth","getDisplayWidth");if(n!==null)return n}let i=Kr(oe(this._backing.getTransformationMatrix(),"displayWidth","getDisplayWidth"))%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return oe(i,"displayWidth","getDisplayWidth")}async getDisplayHeight(){let e=await this._backing.getMetadataDisplayHeight?.();return e??(await this.getRotation()%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth())}get displayHeight(){let e=this._backing.getMetadataDisplayHeight?.();if(e!==void 0){let n=oe(e,"displayHeight","getDisplayHeight");if(n!==null)return n}let i=Kr(oe(this._backing.getTransformationMatrix(),"displayHeight","getDisplayHeight"))%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return oe(i,"displayHeight","getDisplayHeight")}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){let e=await this._backing.getColorSpace();return e.primaries==="bt2020"||e.primaries==="smpte432"||e.transfer==="pq"||e.transfer==="hlg"||e.matrix==="bt2020-ncl"}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){let e=await this._backing.getMetadataCodecParameterString?.();return e??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let e=await this._backing.getDecoderConfig();if(!e)return!1;let t=await this._backing.getCodec();return P(t!==null),Pd.some(n=>n.supports(t,e))?!0:typeof VideoDecoder>"u"?!1:(await VideoDecoder.isConfigSupported(e)).supported===!0}catch(e){return Y._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Te))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");let t=await this.getCodec();if(t===null)return null;let i=await this.getDecoderConfig();return P(i),Jl(t,i,e.data)}async computeFrameRateMetrics(e={}){if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(e.targetPacketCount!==void 0&&(!sr(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");let t=await this.getTimeResolution(),i=e.targetPacketCount??256,n=new Tt(this),s=[],a=-1/0,o=0;for await(let _ of n.packets(void 0,void 0,{metadataOnly:!0})){if(s.length>=i&&_.timestamp>=a)break;s.push(_.timestamp),a=Math.max(a,_.timestamp),o++}let c=new Float64Array(s.length);for(let _=0;_<s.length;_++)c[_]=Math.round(s[_]*t);c.sort();let l=1;for(let _=1;_<c.length;_++)c[_]!==c[l-1]&&(c[l++]=c[_]);if(l<2)return{underlyingFrameRate:null,bestGuessFrameRate:t,minFrameRate:t,maxFrameRate:t,averageFrameRate:t,medianFrameRate:t,frameRateIsConstant:!0,probedPacketCount:o};let h=c.subarray(0,l),d=ap(h,t),u=d??t,f=d!==null?t/d:null,p=new Map,g=1/0,y=-1/0,w=0;for(let _=1;_<l;_++){let N=h[_]-h[_-1],F=f!==null?Math.max(1,Math.round(N/f)):N;p.set(F,(p.get(F)??0)+1),g=Math.min(g,F),y=Math.max(y,F),w+=F}let m=l-1,b=[...p.keys()].sort((_,N)=>_-N),A=m-1>>1,T=m>>1,S=0,x=0,k=0;for(let _ of b)if(k+=p.get(_),S===0&&k>A&&(S=_),k>T){x=_;break}let E=(u/S+u/x)/2;return{underlyingFrameRate:d,bestGuessFrameRate:d!==null?d:op(E),minFrameRate:u/y,maxFrameRate:u/g,averageFrameRate:u*m/w,medianFrameRate:E,frameRateIsConstant:d!==null&&g===1&&y===1,probedPacketCount:o}}},wr=class extends gr{constructor(e,t){super(e,t)}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return oe(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return oe(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return oe(this._backing.getSampleRate(),"sampleRate","getSampleRate")}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){let e=await this._backing.getMetadataCodecParameterString?.();return e??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let e=await this._backing.getDecoderConfig();if(!e)return!1;let t=await this._backing.getCodec();return P(t!==null),Id.some(i=>i.supports(t,e))||Dt.includes(e.codec)?!0:typeof AudioDecoder>"u"?!1:(await AudioDecoder.isConfigSupported(e)).supported===!0}catch(e){return Y._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Te))throw new TypeError("packet must be an EncodedPacket.");return await this.getCodec()===null?null:"key"}};var Ra=r=>-(r??-1/0),br=r=>-r,xr=r=>{if(typeof r!="object"||!r)throw new TypeError("query must be an object.");if(r.filter!==void 0&&typeof r.filter!="function")throw new TypeError("query.filter, when provided, must be a function.");if(r.sortBy!==void 0&&typeof r.sortBy!="function")throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:r.filter?e=>{let t=n=>{if(typeof n!="boolean")throw new TypeError("query.filter must return or resolve to a boolean.");return n},i=r.filter(e);return V(i)?i.then(t):t(i)}:void 0,sortBy:r.sortBy?e=>{let t=n=>{if(typeof n!="number"&&(!Array.isArray(n)||!n.every(s=>typeof s=="number")))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return n},i=r.sortBy(e);return V(i)?i.then(t):t(i)}:void 0}},Et=(r,e)=>({filter:r?.filter||e?.filter?t=>{let i=r?.filter?.(t)??!0,n=s=>s===!1?!1:e?.filter?.(t)??!0;return V(i)?i.then(n):n(i)}:void 0,sortBy:r?.sortBy||e?.sortBy?t=>{let i=r?.sortBy?.(t)??[],n=e?.sortBy?.(t)??[],s=(a,o)=>[...Array.isArray(a)?a:[a],...Array.isArray(o)?o:[o]];return V(i)||V(n)?Promise.all([i,n]).then(([a,o])=>s(a,o)):s(i,n)}:void 0}),Bn=async(r,e)=>{let t=r;if(e?.filter){let a=r.map(c=>e.filter(c));if(a.some(c=>V(c))){let c=await Promise.all(a);t=r.filter((l,h)=>c[h])}else t=r.filter((c,l)=>a[l])}if(!e?.sortBy)return t;let i=t.map(a=>e.sortBy(a)),s=i.some(a=>V(a))?await Promise.all(i):i;return t.map((a,o)=>({track:a,sortValue:s[o]})).sort((a,o)=>{let c=Array.isArray(a.sortValue)?a.sortValue:[a.sortValue],l=Array.isArray(o.sortValue)?o.sortValue:[o.sortValue],h=Math.max(c.length,l.length);for(let d=0;d<h;d++){let u=c[d]??0,f=l[d]??0;if(u!==f)return u-f}return 0}).map(a=>a.track)},ap=(r,e)=>{let n=1.000000001,s=1e3,a=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(r.length<2)return null;let o=new Float64Array(r.length-1);for(let x=1;x<r.length;x++){let k=r[x]-r[x-1];if(!(k>0))return null;o[x-1]=k}let c=o.slice();c.sort();let l=c[Math.floor(c.length*.05)];for(let x=0;x<6;x++){let k=0,E=0;for(let N of o){let F=Math.max(1,Math.round(N/l));Math.abs(N-F*l)>=n||(k+=N,E+=F)}if(E===0)return null;let _=k/E;if(Math.abs(_-l)<=1e-12*Math.max(1,l)){l=_;break}l=_}let h=0,d=0,u=0;for(let x of o){let k=Math.max(1,Math.round(x/l));Math.abs(x-k*l)>=n||(h++,d+=x,u+=k)}if(h/o.length<.98)return null;l=d/u;let f=1/Math.min(u,s),p=Math.max(Number.EPSILON,l-f),g=l+f,y=e/g,w=e/p,m=e/l,b=null,A=1/0;for(let x of a){if(x<y||x>w)continue;let k=Math.abs(x/m-1);k<A&&(b=x,A=k)}if(b===null){let x=Bd(p,g,1e6),k=Bd(y,w,1e6);if(k&&(!x||k.den<x.den||k.den===x.den&&k.num<=x.num))b=k.num/k.den;else if(x)b=e*x.den/x.num;else return null}let T=e/b,S=0;for(let x of o){let k=Math.max(1,Math.round(x/T));Math.abs(x-k*T)<n&&S++}return S/o.length<.98?null:b},Bd=(r,e,t)=>{for(let i=1;i<=t;i++){let n=Math.floor(r*i)+1;if(n/i<e)return Xi({num:n,den:i})}return null},op=r=>{let e=[23.976023976023978,29.970029970029973,59.940059940059946,119.88011988011989],t=[12,15,20,24,25,30,48,50,60,100,120,144,240],i=5e-4,n=.025;for(let o of e)if(Math.abs(o/r-1)<=i)return o;let s=r,a=1/0;for(let o of t){let c=Math.abs(o/r-1);c<=n&&c<a&&(s=o,a=c)}return s};Qi();var cp=1;var si=class r extends yt{get disposed(){return this._disposed}constructor(e){if(super(),this._demuxerPromise=null,this._format=null,this._trackBackingsCache=null,this._backingToTrack=new Map,this._disposed=!1,this._nextSourceCacheAge=0,this._sourceRefs=[],this._sourceCache=[],this._sourceCachePromises=[],this._onFormatDetermined=null,!e||typeof e!="object")throw new TypeError("options must be an object.");if(!Array.isArray(e.formats)||e.formats.some(t=>!(t instanceof Nt)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Oe||e.source instanceof Mt))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Oe&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(e.initInput!==void 0&&!(e.initInput instanceof r))throw new TypeError("options.initInput, when provided, must be an Input.");e.formatOptions!==void 0&&Rd(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof Oe?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){P(this._rootSource instanceof ri);let t=await this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t}_getSourceCached(e,t=cp){let i=this._sourceCache.find(a=>a.cacheGroup===t&&ka(a.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());let n=this._sourceCachePromises.find(a=>a.cacheGroup===t&&ka(a.request,e));if(n)return n.promise.then(a=>a.sourceRef.source.ref());let s=(async()=>{let a=await this._getSourceUncached(e);if(Nl(this._sourceCache,d=>d.cacheGroup===t&&d.sourceRef.source._refCount===1)>=4){let d=Ul(this._sourceCache,f=>f.cacheGroup===t&&f.sourceRef.source._refCount===1?f.age:1/0);P(d!==-1);let u=this._sourceCache[d];this._sourceCache.splice(d,1),u.sourceRef.free(),Xs(this._sourceRefs,u.sourceRef)}this._sourceRefs.push(a);let l=this._sourceCachePromises.findIndex(d=>d.request===e);return P(l!==-1),this._sourceCachePromises.splice(l,1),{request:e,sourceRef:a,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:s}),s.then(a=>{let o=a.sourceRef.source.ref();return this._sourceCache.push(a),o})}_getDemuxer(){return this._demuxerPromise??=(async()=>{this._reader=new Dn(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(let e of this._formats)if(await e._canReadInput(this))return this._format=e,this._onFormatDetermined?.(e),e._createDemuxer(this);throw new ai})()}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),P(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof ai)return!1;throw e}}async getFirstTimestamp(e){e??=await this.getTracks();let t=e.filter(s=>s!==null);if(t.length===0)return 0;let i=await Promise.all(t.map(s=>s._backing.getFirstPacket({metadataOnly:!0}))),n=Math.min(...i.map(s=>s?.timestamp??1/0));return n===1/0?0:n}async computeDuration(e,t){e??=await this.getTracks();let i=e.filter(s=>s!==null);if(i.length===0)return 0;let n=await Promise.all(i.map(s=>s.computeDuration(t)));return Math.max(...n)}async getDurationFromMetadata(e,t){e??=await this.getTracks();let i=e.filter(a=>a!==null),s=(await Promise.all(i.map(a=>a.getDurationFromMetadata(t)))).filter(a=>a!==null);return s.length===0?null:Math.max(...s)}async getTracks(e){e&&=xr(e);let i=(await this._getTrackBackings()).map(n=>this._wrapBackingAsTrack(n));return Bn(i,e)}async getVideoTracks(e){e&&=xr(e);let i=(await this.getTracks()).filter(n=>n.isVideoTrack());return Bn(i,e)}async getAudioTracks(e){e&&=xr(e);let i=(await this.getTracks()).filter(n=>n.isAudioTrack());return Bn(i,e)}async getPrimaryVideoTrack(e){e&&=xr(e);let t=Et(e,{sortBy:async n=>[br((await n.getDisposition()).default),br(await n.hasPairableAudioTrack()),br(!await n.hasOnlyKeyPackets()),Ra(await n.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&=xr(e);let t=await this.getPrimaryVideoTrack(),i=Et(e,{sortBy:async s=>[br(!t||s.canBePairedWith(t)),br((await s.getDisposition()).default),Ra(await s.getBitrate())]});return(await this.getAudioTracks(i))[0]??null}async _getTrackBackings(){let e=await this._getDemuxer();return this._trackBackingsCache??=await e.getTrackBackings()}_wrapBackingAsTrack(e){let t=this._backingToTrack.get(e);if(t)return t;let n=e.getType()==="video"?new yr(this,e):new wr(this,e);return this._backingToTrack.set(e,n),n}async getMimeType(){return(await this._getDemuxer()).getMimeType()}async getMetadataTags(){return(await this._getDemuxer()).getMetadataTags()}dispose(){if(!this._disposed){this._disposed=!0;for(let e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}},ai=class extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}},me=class extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}};var Dn=class{constructor(e){this.source=e}get fileSize(){let e=this.source._getFileSize();if(e===void 0)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(e,t){if(this.source._disposed)throw new me;if(e<0||this.fileSizeNonStrict!==null&&e+t>this.fileSizeNonStrict)return null;if(t===0){let s=new Uint8Array(0);return new St(s,te(s),0,e,e)}let i=e+t,n=this.source._read(e,i,xa,Aa);return V(n)?n.then(s=>s?new St(s.bytes,s.view,s.offset,e,i):null):n?new St(n.bytes,n.view,n.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new me;if(e<0)return null;if(this.fileSizeNonStrict!==null)return this.requestSlice(e,ir(this.fileSizeNonStrict-e,t,i));{let n=this.requestSlice(e,i),s=a=>a||(P(this.fileSizeNonStrict!==null),this.requestSlice(e,ir(this.fileSizeNonStrict-e,t,i)));return V(n)?n.then(s):s(n)}}requestEntireFile(){if(this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let e=1024;return(async()=>{let t=[],i=0;for(;;){if(t.length===1&&this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let a=this.requestSliceRange(i,0,e);if(V(a)&&(a=await a),!a||a.length===0)break;let o=K(a,a.length);t.push(o),i+=a.length}let n=new Uint8Array(i),s=0;for(let a of t)n.set(a,s),s+=a.length;return new St(n,te(n),0,0,i)})()}},St=class r{constructor(e,t,i,n,s){this.bytes=e,this.view=t,this.offset=i,this.start=n,this.end=s,this.bufferPos=n-i}static tempFromBytes(e){return new r(e,te(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(e<this.start||e+t>this.end)throw new RangeError("Slicing outside of original slice.");return new r(this.bytes,this.view,this.offset,e,e+t)}},Xe=(r,e)=>{if(r.filePos<r.start||r.filePos+e>r.end)throw new RangeError(`Tried reading [${r.filePos}, ${r.filePos+e}), but slice is [${r.start}, ${r.end}). This is likely an internal error, please report it alongside the file that caused it.`)},K=(r,e)=>{Xe(r,e);let t=r.bytes.subarray(r.bufferPos,r.bufferPos+e);return r.bufferPos+=e,t},H=r=>(Xe(r,1),r.view.getUint8(r.bufferPos++));var pe=r=>{Xe(r,2);let e=r.view.getUint16(r.bufferPos,!1);return r.bufferPos+=2,e},ct=r=>{Xe(r,3);let e=Qr(r.view,r.bufferPos,!1);return r.bufferPos+=3,e},Jr=r=>{Xe(r,2);let e=r.view.getInt16(r.bufferPos,!1);return r.bufferPos+=2,e};var D=r=>{Xe(r,4);let e=r.view.getUint32(r.bufferPos,!1);return r.bufferPos+=4,e};var at=r=>{Xe(r,4);let e=r.view.getInt32(r.bufferPos,!1);return r.bufferPos+=4,e};var Ae=r=>{let e=D(r),t=D(r);return e*4294967296+t},Ad=r=>{let e=at(r),t=D(r);return e*4294967296+t};var Sd=r=>{Xe(r,4);let e=r.view.getFloat32(r.bufferPos,!1);return r.bufferPos+=4,e},Sn=r=>{Xe(r,8);let e=r.view.getFloat64(r.bufferPos,!1);return r.bufferPos+=8,e},_e=(r,e)=>{Xe(r,e);let t="";for(let i=0;i<e;i++)t+=String.fromCharCode(r.bytes[r.bufferPos++]);return t};var Dd=Symbol.for("mediabunny loaded");globalThis[Dd]&&Y._error(`[WARNING]
70
+ Mediabunny was loaded twice. This will likely cause Mediabunny not to work correctly. Check if multiple dependencies are importing different versions of Mediabunny, or if something is being bundled incorrectly.`);globalThis[Dd]=!0;var Ar=class{file;pageSize;maxPages;pages;bytesRead;constructor(e,t=262144,i=8){this.file=e,this.pageSize=t,this.maxPages=i,this.pages=new Map,this.bytesRead=0}async read(e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<0||e+t>this.file.size)throw new Error(`Truncated media: bytes ${e}..${e+t} exceed ${this.file.size}.`);if(t===0)return new Uint8Array;if(t>this.pageSize)return this.bytesRead+=t,new Uint8Array(await this.file.slice(e,e+t).arrayBuffer());let i=Math.floor(e/this.pageSize)*this.pageSize;if(e+t>i+this.pageSize){let s=await this.read(e,i+this.pageSize-e),a=await this.read(i+this.pageSize,t-s.length),o=new Uint8Array(t);return o.set(s),o.set(a,s.length),o}let n=this.pages.get(i);for(n?(this.pages.delete(i),this.pages.set(i,n)):(n=new Uint8Array(await this.file.slice(i,Math.min(this.file.size,i+this.pageSize)).arrayBuffer()),this.bytesRead+=n.length,this.pages.set(i,n));this.pages.size>this.maxPages;)this.pages.delete(this.pages.keys().next().value);return n.subarray(e-i,e-i+t)}async view(e,t){let i=await this.read(e,t);return new DataView(i.buffer,i.byteOffset,i.byteLength)}async u32(e){return(await this.view(e,4)).getUint32(0)}async u16(e){return(await this.view(e,2)).getUint16(0)}async u64(e){let t=(await this.view(e,8)).getBigUint64(0);if(t>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Media offset exceeds JavaScript safe-integer precision.");return Number(t)}clear(){this.pages.clear()}};var Od=r=>new TextDecoder().decode(r);async function Md(r,e,t){let i=await r.read(e,8),s=new DataView(i.buffer,i.byteOffset,i.byteLength).getUint32(0),a=8,o=Od(i.subarray(4,8));return s===1?(s=await r.u64(e+8),a=16):s===0&&(s=t-e),{type:o,start:e,data:e+a,end:e+s,size:s}}async function Nd(r,e,t=r.file.size){let i=await Md(r,e,t);if(i.size<i.data-i.start||i.end>t)throw new Error(`Invalid MP4 box ${i.type} at ${e}.`);return i}async function lp(r){let e=[];for(let t=0;t+8<=r.file.size;){let i=await Md(r,t,r.file.size).catch(()=>{});if(!i||i.size<i.data-i.start)break;if(i.end>r.file.size)return{boxes:e,cut:i.type==="mdat"||i.type==="moof"?i:void 0};e.push(i),t=i.end}return{boxes:e}}async function*Pa(r,e){for(let t=e.data;t+8<=e.end;){let i=await Nd(r,t,e.end);yield i,t=i.end}}async function Re(r,e,t){for await(let i of Pa(r,e))if(i.type===t)return i}async function Ud(r){let e=new Ar(r),t=await lp(e),i;for(let m of t.boxes)m.type==="moov"&&(i=m);if(!i)throw new Error("MP4/MOV has no movie metadata (moov). The recording may be unfinished.");let n=1,s=await Re(e,i,"mvhd");if(s){let m=(await e.read(s.data,1))[0];n=await e.u32(s.data+(m===1?20:12))||1}let a,o=0;for await(let m of Pa(e,i)){if(m.type!=="trak")continue;let b=await Re(e,m,"mdia"),A=b&&await Re(e,b,"hdlr");if(A&&Od(await e.read(A.data+8,4))==="vide"){a=m;let T=await Re(e,m,"tkhd");if(T){let S=(await e.read(T.data,1))[0];o=await e.u32(T.data+(S===1?20:12))}break}}let c=t.cut&&{box:t.cut.type,declaredEnd:t.cut.end};if(!a)return{signedCttsV0:!1,truncated:c};let l=await Re(e,a,"mdia"),h=l&&await Re(e,l,"mdhd"),d=1,u=0;if(h){let m=(await e.read(h.data,1))[0];d=await e.u32(h.data+(m===1?20:12))||1,u=(m===1?await e.u64(h.data+24):await e.u32(h.data+16))/d}let f=await Re(e,a,"edts"),p=f&&await Re(e,f,"elst");if(p){let m=(await e.read(p.data,1))[0],b=await e.u32(p.data+4),A=m===1?20:12,T=0,S=0;for(let x=0;x<b;x++){let k=await e.view(p.data+8+x*A,A),E=m===1?Number(k.getBigUint64(0)):k.getUint32(0),_=m===1?Number(k.getBigInt64(8)):k.getInt32(4);if(k.getInt16(m===1?16:8)!==1)throw new Error("A non-unit MOV edit playback rate needs compatibility mode.");_===-1?T+=E/n:(u=T+E/n,S++)}if(S>1)throw new Error("Multiple discontinuous movie edits need compatibility mode; they will not be silently flattened.")}let g=l&&await Re(e,l,"minf"),y=g&&await Re(e,g,"stbl"),w=!1;if(y){let m=await Re(e,y,"stsd");if(m&&(await Nd(e,m.data+8,m.end)).type==="encv")throw new Error("Encrypted video is not supported.");let b=await Re(e,y,"stsc");if(b){let T=await e.u32(b.data+4);for(let S=0;S<T;S++)if(await e.u32(b.data+16+S*12)!==1)throw new Error("Sample-description/codec changes require compatibility mode.")}let A=await Re(e,y,"ctts");if(A&&(await e.read(A.data,1))[0]===0){let S=await e.u32(A.data+4);for(let x=0;x<S&&!w;x++)await e.u32(A.data+12+x*8)>=2147483648&&(w=!0)}}for(let m of t.boxes)if(m.type==="moof")for await(let b of Pa(e,m)){if(b.type!=="traf")continue;let A=await Re(e,b,"tfhd");if(!A)continue;let T=await e.view(A.data,8),S=T.getUint32(0)&16777215;if(T.getUint32(4)===o&&S&2&&await e.u32(A.data+8)!==1)throw new Error("Sample-description/codec changes require compatibility mode.")}return{signedCttsV0:w,duration:u,truncated:c}}var dp=[26,69,223,163];async function hp(r){let e=new Uint8Array(await r.slice(0,4).arrayBuffer());return dp.every((t,i)=>e[i]===t)}async function up(r){let e=new Ar(r);async function t(n,s=!1){let a=(await e.read(n,1))[0],o=1,c=128;for(;o<=8&&!(a&c);)o++,c>>=1;let l=await e.read(n,o),h=s?a:a&c-1;for(let d=1;d<o;d++)h=h*256+l[d];return{value:h,length:o}}async function*i(n,s){for(;n<s;){let a=await t(n,!0),o=await t(n+a.length),c=n+a.length+o.length,l=c+o.value;if(l>s)return;yield{id:a.value,data:c,end:l},n=l}}try{for await(let n of i(0,e.file.size))if(n.id===408125543){for await(let s of i(n.data,n.end))if(s.id===374648427)for await(let a of i(s.data,s.end)){if(a.id!==174)continue;let o=0,c="";for await(let l of i(a.data,a.end))l.id===131&&(o=(await e.read(l.data,l.end-l.data))[0]),l.id===134&&(c=new TextDecoder().decode(await e.read(l.data,l.end-l.data)));if(o===1&&c)return c}return}}catch{return}}var On=class{file;config;width;height;rotation;duration;frameCount;warnings;input;sink;constructor(e){this.file=e,this.width=0,this.height=0,this.rotation=0,this.duration=0,this.warnings=[]}async init(){let e=await hp(this.file),t;if(!e){let n=await Ud(this.file);t=n.duration,n.signedCttsV0&&this.warnings.push(R("media.NONSTANDARD_SIGNED_CTTS_V0")),n.truncated&&this.warnings.push(R("media.TRUNCATED_RECORDING",{box:n.truncated.box,declaredEnd:n.truncated.declaredEnd,size:this.file.size}))}let i;try{i=new si({source:new ii(this.file),formats:[Sa,Ta,va,Ea]}),this.input=i;let n;try{n=await i.getPrimaryVideoTrack()}catch{throw new Error(e?"Missing WebM segment.":"MP4/MOV has no movie metadata (moov). The recording may be unfinished.")}if(!n)throw new Error(e?"WebM contains no video track.":"No video track exists in this file.");let s=await n.getDecoderConfig().catch(()=>null),a=s?.codec??await n.getCodec().catch(()=>null)??void 0;if(!a)throw new Error(e?`Unsupported Matroska codec ${await up(this.file)??"(unknown)"}. Compatibility mode may support it.`:"Encrypted video is not supported.");this.config={...s,codec:a,codedWidth:await n.getCodedWidth(),codedHeight:await n.getCodedHeight()},this.config.optimizeForLatency=!1,this.width=await n.getCodedWidth(),this.height=await n.getCodedHeight(),this.rotation=await n.getRotation();let o=await n.getPixelAspectRatio();o.num!==o.den&&this.warnings.push(R("media.PIXEL_ASPECT_RATIO",{num:o.num,den:o.den})),this.sink=new Tt(n);let c=await i.getFormat(),l=await i.getDurationFromMetadata([n]).catch(()=>null);if(l!==null&&c instanceof Ut){this.duration=l;let h=!1;try{h=!(await this.sink.packets(void 0,void 0,{metadataOnly:!0}).next()).done}catch{h=!1}if(!h)throw new Error("No decodable video samples were found.")}else{let h=0,d=0;try{for await(let u of this.sink.packets(void 0,void 0,{metadataOnly:!0})){if(u.byteLength===0)throw new Error("Fragment has no sample size.");h++,d=Math.max(d,u.timestamp+u.duration)}}catch(u){if(h>0||u instanceof Error&&u.message==="Fragment has no sample size.")throw u}if(this.frameCount=h,this.duration=e?l??d:t||d,!h)throw new Error("No decodable video samples were found.")}return this}catch(n){throw i?.dispose(),this.input=void 0,n}}async*packets(){for await(let e of this.sink.packets())yield{data:e.data,timestamp:Math.round(e.timestamp*1e6),duration:Math.round(e.duration*1e6),key:e.type==="key"}}dispose(){this.input?.dispose()}};var kr={format:"RGBA",colorSpace:"srgb"};async function Ia(r,e,t,i){let n=i&&i.length===e*t*4?i:new Uint8ClampedArray(e*t*4),s=await r.copyTo(n,kr);if(s.length!==1||s[0].offset!==0||s[0].stride!==e*4)throw new Error(`unexpected RGBA layout ${JSON.stringify(s)}`);return n}var vt=class{free=[];length=0;outstandingCount=0;get outstanding(){return this.outstandingCount}takeBuffer(e){e!==this.length&&(this.free.length=0,this.length=e);let t=this.free.pop()??new ArrayBuffer(e);return this.outstandingCount++,t}releaseBuffer(e){this.outstandingCount--,e.byteLength===this.length&&this.free.push(e)}take(e,t){let i=this.takeBuffer(e*t*4),n=!1;return{width:e,height:t,data:new Uint8ClampedArray(i),release:()=>{n||(n=!0,this.releaseBuffer(i))}}}};function he(r,...e){!r||e.includes(r)||r.release?.()}function Fa(r,e,t){if(r&&(r.matrix==="rgb"||r.matrix===null&&e==="I444"))return;let i=r?.matrix??(t>=720?"bt709":"smpte170m");if(!(i==="bt2020-ncl"||i==="bt2020-cl"))return(i==="bt709"?0:2)+(r?.fullRange?1:0)}function Me(r,e){for(let t of[r?.transfer,e?.transfer])if(t==="pq"||t==="hlg")return t}function fp(r,e,t){return{sdr:0,pq:8,hlg:16}[t]+{bt709:0,bt601:2,bt2020:4}[r]+(e?1:0)}var Ld={bt709:"bt709",smpte170m:"bt601",bt470bg:"bt601","bt2020-ncl":"bt2020"};function zd(r,e,t){let i=[Ld[e?.matrix??"bt2020-ncl"]??"bt2020",Ld[t?.matrix??""]??"bt2020"],n=t?.fullRange??e?.fullRange??!1,s=[];for(let a of[n,!n])for(let o of i)s.push(fp(o,a,r));return[...new Set(s)]}var pp=8,mp=48,gp=.01;function oi(r){return r.meanDiff<=pp&&r.farShare<=gp}function ci(r,e){let t=0,i=0,n=0;for(let s=0;s<r.length;s+=4)for(let a=0;a<3;a++){let o=Math.abs(r[s+a]-e[s+a]);t+=o,o>mp&&i++,n++}return{meanDiff:t/n,farShare:i/n}}var zt=class r{gl;texture;framebuffer;constructor(e){this.gl=e,this.texture=e.createTexture(),this.framebuffer=e.createFramebuffer(),e.bindTexture(e.TEXTURE_2D,this.texture),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1)}static create(){try{let e=typeof OffscreenCanvas>"u"?null:new OffscreenCanvas(1,1).getContext("webgl2");return e?new r(e):void 0}catch{return}}read(e,t,i,n=new Uint8Array(t*i*4)){let s=this.gl;s.bindTexture(s.TEXTURE_2D,this.texture),s.texImage2D(s.TEXTURE_2D,0,s.RGBA8,s.RGBA,s.UNSIGNED_BYTE,e),s.bindFramebuffer(s.FRAMEBUFFER,this.framebuffer),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,this.texture,0),s.readPixels(0,0,t,i,s.RGBA,s.UNSIGNED_BYTE,n);let a=s.getError();if(a)throw new Error(`WebGL readback failed (${a})`);return n}dispose(){this.gl.deleteTexture(this.texture),this.gl.deleteFramebuffer(this.framebuffer),this.gl.getExtension("WEBGL_lose_context")?.loseContext()}},Ba={identity:0,srgb:1,"srgb-gamut":2},yp=`@group(0) @binding(0) var src: texture_external;
71
+ struct Params { decode: u32 }
72
+ @group(0) @binding(1) var<uniform> params: Params;
73
+ @vertex fn vs(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {
74
+ let p = array(vec2f(-1.0, -1.0), vec2f(3.0, -1.0), vec2f(-1.0, 3.0));
75
+ return vec4f(p[i], 0.0, 1.0);
76
+ }
77
+ // BT.709 \u2192 BT.2020 primaries (ITU-R BT.2087), by columns.
78
+ const TO_2020 = mat3x3f(vec3f(0.627404, 0.069097, 0.016392), vec3f(0.329282, 0.919540, 0.088013), vec3f(0.043314, 0.011361, 0.895595));
79
+ @fragment fn fs(@builtin(position) at: vec4f) -> @location(0) vec4f {
80
+ var c = textureLoad(src, vec2u(at.xy)).rgb;
81
+ if (params.decode >= 1u) {
82
+ // Sign-preserving, so a colour outside BT.709 (negative after the browser's conversion) comes back whole.
83
+ let a = abs(c);
84
+ c = sign(c) * select(pow((a + 0.055) / 1.055, vec3f(2.4)), a / 12.92, a <= vec3f(0.04045));
85
+ }
86
+ if (params.decode == 2u) {
87
+ c = TO_2020 * c;
88
+ }
89
+ return vec4f(clamp(c, vec3f(0.0), vec3f(1.0)), 1.0);
90
+ }`,Oa=class r{device;pipelines;uniforms;staging;queue;constructor(e){this.device=e,this.pipelines=new Map,this.queue=Promise.resolve();let t=i=>{let n=e.createBuffer({size:16,usage:72});return e.queue.writeBuffer(n,0,new Uint32Array([i,0,0,0])),n};this.uniforms={identity:t(Ba.identity),srgb:t(Ba.srgb),"srgb-gamut":t(Ba["srgb-gamut"])}}static async create(e=globalThis.navigator?.gpu){try{let t=await(await e?.requestAdapter())?.requestDevice();return t?new r(t):void 0}catch{return}}read(e,t,i,n,s,a){let o=this.queue.then(()=>this.readNow(e,t,i,n,s,a));return this.queue=o.catch(()=>{}),o}async readNow(e,t,i,n,s,a){let o=this.device,c=s==="rgba8"?"rgba8unorm":"rgb10a2unorm",l=this.pipelines.get(c);if(!l){let m=o.createShaderModule({code:yp});l=o.createRenderPipeline({layout:"auto",vertex:{module:m,entryPoint:"vs"},fragment:{module:m,entryPoint:"fs",targets:[{format:c}]}}),this.pipelines.set(c,l)}let h=Math.ceil(t*4/256)*256,d=`${c} ${t}x${i}`;this.staging?.key!==d&&(this.staging?.buffer.destroy(),this.staging?.texture.destroy(),this.staging={key:d,texture:o.createTexture({size:[t,i],format:c,usage:17}),buffer:o.createBuffer({size:h*i,usage:9})});let{texture:u,buffer:f}=this.staging,p=o.createCommandEncoder(),g=p.beginRenderPass({colorAttachments:[{view:u.createView(),loadOp:"clear",storeOp:"store"}]});g.setPipeline(l),g.setBindGroup(0,o.createBindGroup({layout:l.getBindGroupLayout(0),entries:[{binding:0,resource:o.importExternalTexture({source:e})},{binding:1,resource:{buffer:this.uniforms[n]}}]})),g.draw(3),g.end(),p.copyTextureToBuffer({texture:u},{buffer:f,bytesPerRow:h},[t,i]),o.queue.submit([p.finish()]),await f.mapAsync(1);let y=new Uint8Array(f.getMappedRange()),w=a??new Uint8Array(t*i*4);if(h===t*4)w.set(y.subarray(0,t*i*4));else for(let m=0;m<i;m++)w.set(y.subarray(m*h,m*h+t*4),m*t*4);return f.unmap(),w}dispose(){this.staging?.buffer.destroy(),this.staging?.texture.destroy(),this.device.destroy()}};function wp(r){let e=new Uint8ClampedArray(r.length),t=new Uint32Array(r.buffer,r.byteOffset,r.length/4);for(let i=0;i<t.length;i++){let n=t[i];e[4*i]=(n&1023)>>2,e[4*i+1]=(n>>10&1023)>>2,e[4*i+2]=(n>>20&1023)>>2,e[4*i+3]=255}return e}var bp=.25,Da=async r=>{let e=performance.now();return[await r(),performance.now()-e]};function Vd(r,e="auto",t){let i,n,s,a,o,c=async(l,h,d)=>{if(a=zt.create(),!a){i={name:"2D canvas (unverified)",packing:"rgba8",read:(m,b,A)=>xp(m,b,A)};let[,w]=await Da(()=>i.read(l,h,d));n={route:i.name,ms:w,verified:!1};return}let u=a,[f,p]=await Da(()=>u.read(l,h,d)),g=[];if(l.format&&typeof l.copyTo=="function"&&g.push({name:"copyTo(RGBA)",packing:"rgba8",read:async(w,m,b,A)=>{let T=A??new Uint8Array(m*b*4);return await w.copyTo(T,kr),T}}),e!=="cpu"){o=await Oa.create(t);let w=r?"rgb10a2":"rgba8";for(let m of["identity","srgb-gamut","srgb"])if(o){let b=o;g.push({name:`WebGPU external texture (${m})`,packing:w,read:(A,T,S,x)=>b.read(A,T,S,m,w,x)})}}let y;for(let w of g){try{await w.read(l,h,d);let[m,b]=await Da(()=>w.read(l,h,d)),A=ci(w.packing==="rgb10a2"?wp(m):new Uint8ClampedArray(m.buffer,m.byteOffset,m.length),new Uint8ClampedArray(f.buffer));oi(A)&&(!y||A.meanDiff<y.check.meanDiff-bp)&&(y={route:w,check:A,ms:b})}catch{}if(y?.route.name==="copyTo(RGBA)")break}y?(i=y.route,n={route:i.name,ms:y.ms,check:y.check,verified:!0}):(i={name:"WebGL readback",packing:"rgba8",read:(w,m,b,A)=>u.read(w,m,b,A)},n={route:i.name,ms:p,verified:!0}),i.name.startsWith("WebGPU")||(o?.dispose(),o=void 0),i.name!=="WebGL readback"&&(a.dispose(),a=void 0)};return{async read(l,h,d,u){i||await(s??=c(l,h,d));let f=await i.read(l,h,d,u);return u&&f!==u&&(u.set(f),f=u),{data:f,packing:i.packing}},choice:()=>n,dispose(){o?.dispose(),a?.dispose()}}}function xp(r,e,t){let i=new OffscreenCanvas(e,t),n=i.getContext("2d",{willReadFrequently:!0});if(!n)throw new Error("A 2D offscreen canvas could not be allocated for frame conversion.");n.drawImage(r,0,0,e,t);let s=n.getImageData(0,0,e,t).data;return new Uint8Array(s.buffer,s.byteOffset,s.length)}var Ap=1e4;function kp(){let r,e=null,t,i=(a,o)=>{let c=performance.now();try{return n(a,o)}finally{t??=performance.now()-c}},n=(a,o)=>{if((!r||r.width!==o.width||r.height!==o.height)&&(r=new OffscreenCanvas(o.width,o.height),e=r.getContext("2d",{willReadFrequently:!0}),!e))throw new Error("A 2D offscreen canvas could not be allocated for frame conversion.");let c=e;return c.save(),c.clearRect(0,0,r.width,r.height),c.translate(r.width/2,r.height/2),c.rotate(o.rotation*Math.PI/180),c.drawImage(a,-o.codedWidth/2,-o.codedHeight/2,o.codedWidth,o.codedHeight),c.restore(),{width:r.width,height:r.height,data:c.getImageData(0,0,r.width,r.height).data}},s=()=>"2D canvas drawImage + getImageData";return Object.assign(i,{describe:s,report:()=>({method:s(),ms:t})})}function Ma(r=Na()){let e,t=!1,i=new vt;return Object.assign(async(s,a)=>{if(a.rotation!==0||e===!1||typeof s.copyTo!="function"||Me(a.colour,s.colorSpace))return t=!0,r(s,a);let o=a.codedWidth,c=a.codedHeight,l;try{if(e===void 0){let h=s.allocationSize(kr);if(h!==o*c*4)throw new Error(`allocationSize ${h} \u2260 ${o*c*4}`)}return l=i.take(o,c),await Ia(s,o,c,l.data),e=!0,l}catch(h){if(l?.release(),e===!0)throw h;return e=!1,r(s,a)}},{describe:()=>e?"copyTo(RGBA)":e===!1||t?r.describe?.()??"fallback":"undecided",report:()=>e?{method:"copyTo(RGBA)"}:r.report?.()??{method:r.describe?.()??"fallback"},planes:async(s,a)=>e===!1||Me(a.colour,s.colorSpace)?await r.planes?.(s,a):void 0})}function Sp(r="auto",e){let t,i,n,s=new vt,a=async(c,l)=>{let h=l.codedWidth,d=l.codedHeight,u=s.take(h,d);try{i??=Me(l.colour,c.colorSpace),t??=Vd(!!i,r,e);let{packing:f}=await t.read(c,h,d,new Uint8Array(u.data.buffer,u.data.byteOffset,u.data.length));if(i){let p=G().hdrToRGBA(u.data,f,h,d,i);n??=p/(h*d)}return u}catch(f){throw u.release(),f}},o=()=>Wd(t?.choice(),i)??"undecided";return Object.assign(a,{describe:o,report:()=>Gd(o(),t?.choice(),i,n),dispose:()=>t?.dispose()})}function Wd(r,e){return r&&`${r.route}${e?` + core ${e.toUpperCase()}\u2192sRGB`:""}`}function Gd(r,e,t,i){return{method:r,ms:e?.ms,...t?{hdr:{transfer:t,verified:e?.verified??!1,aboveShare:i}}:{}}}var Mn={I420:0,I422:1,I444:2,NV12:3},Tp=.25;function Na(r=kp(),e=Sp()){let t,i=!1,n,s,a,o,c,l,h,d,u=new vt,f=async(x,k)=>{let E=x.format?Mn[x.format]:void 0,_=x.visibleRect;if(E===void 0||typeof x.copyTo!="function"||_&&(_.width!==k.codedWidth||_.height!==k.codedHeight))return;let N=x.allocationSize(),F=!i;F&&(!t||t.byteLength<N)&&(t=new ArrayBuffer(N)),i||=F;try{let L=F?new Uint8Array(t,0,N):new Uint8Array(N),B=await x.copyTo(L);return{data:L,layout:B,format:E}}finally{F&&(i=!1)}},p=async(x,k,E)=>{if(c=E,k.rotation!==0)return l="canvas",r(x,k);if(a===!1)return e(x,k);let _=k.codedWidth,N=k.codedHeight,F;try{F=await f(x,k)}catch(v){if(typeof a=="number")throw v}if(!F){if(typeof a=="number")throw new Error(`planar HDR conversion cannot take a ${x.format} frame after taking earlier ones`);return a=!1,l="raw",e(x,k)}if(a===void 0){let v=zd(E,k.colour,x.colorSpace),M=zt.create();if(!M)a=v[0];else{let z;try{z=M.read(x,_,N)}finally{M.dispose()}G().hdrToRGBA(z,"rgba8",_,N,E);let U=new Uint8ClampedArray(z.buffer),j;for(let $ of v){let Z=ci(G().frameToRGBA(F.data,F.format,F.layout,_,N,$),U);oi(Z)&&(!j||Z.meanDiff<j.check.meanDiff-Tp)&&(j={code:$,check:Z})}if(!j)return a=!1,l="raw",e(x,k);a=j.code,o=j.check}}let L=u.take(_,N),B={above:0},I=performance.now();return G().frameToRGBA(F.data,F.format,F.layout,_,N,a,L.data,B),h??=performance.now()-I,d??=B.above/(_*N),L},g=async(x,k)=>{let E=Me(k.colour,x.colorSpace);if(E)return p(x,k,E);if(x.format===null&&k.rotation===0&&!n)return l="raw",e(x,k);let _=x.format?Mn[x.format]:void 0,N=k.codedWidth,F=k.codedHeight,L=Fa(x.colorSpace??void 0,x.format??void 0,F);if(n===!1||k.rotation!==0||_===void 0||L===void 0||typeof x.copyTo!="function"){if(n)throw new Error(`planar conversion cannot take a ${x.format} frame after taking earlier ones`);return n=!1,r(x,k)}let B=!i,I;try{let v=x.visibleRect;if(v&&(v.width!==N||v.height!==F))throw new Error(`visible ${v.width}\xD7${v.height} \u2260 ${N}\xD7${F}`);let M=x.allocationSize();B&&(!t||t.byteLength<M)&&(t=new ArrayBuffer(M)),i=!0;let z=B?new Uint8Array(t,0,M):new Uint8Array(M),U=await x.copyTo(z);I=u.take(N,F),G().frameToRGBA(z,_,U,N,F,L,I.data)}catch(v){if(I?.release(),n)throw v;return n=!1,r(x,k)}finally{B&&(i=!1)}if(n===void 0){let v=await r(x,k);if(s=ci(v.data,I.data),n=oi(s),!n)return I.release(),v}return I},y=()=>l==="raw"?e.describe?.()??"raw":l==="canvas"?`${r.describe?.()??"fallback"} (HDR, colours unchecked)`:typeof a=="number"?`planar copyTo + core ${c.toUpperCase()}\u2192sRGB (colour code ${a}, ${o?`first frame ${o.meanDiff.toFixed(2)} from WebGL`:"unchecked: no WebGL"})`:n?`planar copyTo + core YUV\u2192RGBA (first frame ${s.meanDiff.toFixed(2)} from canvas)`:n===!1?`${r.describe?.()??"fallback"}${s?` (planar rejected: ${s.meanDiff.toFixed(1)} from canvas)`:""}`:"undecided",w=()=>{if(l==="raw")return e.report?.()??{method:y()};let x=l==="canvas"||n===!1?r.report?.().ms:h;return{method:y(),ms:x,...c?{hdr:{transfer:c,verified:!!o,aboveShare:d}}:{}}},m=(x,k)=>{let E=x.format?Mn[x.format]:void 0,_=k.codedWidth,N=k.codedHeight,L=Me(k.colour,x.colorSpace)?typeof a=="number"?a:void 0:n===!0?Fa(x.colorSpace??void 0,x.format??void 0,N):void 0,B=x.visibleRect;if(!(k.rotation!==0||E===void 0||L===void 0)&&!(typeof x.copyTo!="function"||B&&(B.width!==_||B.height!==N)))return{format:E,matrix:L,width:_,height:N}},b=x=>{let k=u.take(x.width,x.height);return G().frameToRGBA(x.data,x.format,x.layout,x.width,x.height,x.matrix,k.data),k},A=new vt;return Object.defineProperties(Object.assign(g,{describe:y,report:w,planes:async(x,k)=>{let E=m(x,k);if(!E)return;let _=A.takeBuffer(x.allocationSize());try{let N=new Uint8Array(_),F=await x.copyTo(N);return{data:N,layout:F,...E,release:()=>A.releaseBuffer(_)}}catch{A.releaseBuffer(_);return}},spec:m,fromPlanes:b,takesHdr:(x,k)=>k.rotation===0&&a!==!1&&!!x.format&&Mn[x.format]!==void 0&&typeof x.copyTo=="function",dispose:()=>e.dispose?.()}),{planar:{get:()=>n},check:{get:()=>s}})}var Hd=()=>Math.max(1,Math.min(3,Math.floor((globalThis.navigator?.hardwareConcurrency||4)/4)));function $d(r,e=Ma(),t="auto",i){let n={worker:0,inThread:0,workers:0,planes:0,raw:0},s,a,o,c=new Map,l=new vt,h=[],d=new Map,u=typeof Worker>"u",f=!1,p=!1,g=0,y="copyTo(RGBA)";u&&(n.reason="Worker unavailable");let w=I=>{u||(n.reason=I),u=!0;for(let v of h.splice(0))v.terminate();d.clear();for(let v of c.values())v.reject(new Error(I));c.clear()},m=async(I,v)=>{if(n.inThread++,!f)return e(I,v);let M=v.codedWidth,z=v.codedHeight,U=l.take(M,z);try{return await Ia(I,M,z,U.data),U}catch(j){throw U.release(),j}},b=(I,v)=>{if(u||v.rotation!==0||typeof I.copyTo!="function"||typeof I.clone!="function"||Me(v.colour,I.colorSpace))return!1;try{return I.allocationSize(kr)===v.codedWidth*v.codedHeight*4}catch{return!1}},A=()=>{try{let I=new Worker(r,{type:"module"}),v=!h.length;return I.onmessage=({data:M})=>{let z=c.get(M.id);c.delete(M.id),M.describe&&v&&(y=M.describe,p=!y.startsWith("WebGPU")),M.buffer?z?.resolve({buffer:M.buffer,layout:M.layout,packing:M.packing,choice:M.choice}):z?.reject(new Error(M.error||"no pixels"))},I.onerror=M=>{M.preventDefault(),w(`conversion worker failed: ${M.message||"script error"}`)},I.onmessageerror=()=>w("conversion worker reply could not be deserialized"),h.push(I),d.set(I,0),n.workers=h.length,I}catch(I){w(`conversion worker unavailable: ${I instanceof Error?I.message:String(I)}`);return}},T=()=>{if(!h.length)return A();let I=h.reduce((v,M)=>d.get(v)<=d.get(M)?v:M);return d.get(I)>0&&p&&h.length<Hd()?A()??I:I},S=async(I,v,M)=>{let z=M==="planes",U=M==="raw"?h[0]??A():T();if(!U)throw new Error(n.reason??"conversion worker unavailable");let j=v.codedWidth,$=v.codedHeight,Z=g++,J,We=new Promise((Je,Kn)=>{c.set(Z,{resolve:Je,reject:Kn}),J=setTimeout(()=>w("conversion worker timed out"),Ap)}),Rt=I.clone();try{let Je=M==="raw"?{hdr:!!Me(v.colour,I.colorSpace)}:void 0;U.postMessage({id:Z,frame:Rt,width:j,height:$,planes:z,raw:Je,compute:U===h[0]?t:"cpu"},[Rt])}catch(Je){throw clearTimeout(J),Rt.close(),c.delete(Z),new Error(`VideoFrame could not be transferred: ${Je instanceof Error?Je.message:String(Je)}`)}d.set(U,(d.get(U)??0)+1);try{return{...await We,target:U}}finally{clearTimeout(J),d.has(U)&&d.set(U,d.get(U)-1)}},x=(I,v,M)=>{let z=!1;return()=>{if(!z){z=!0;try{I.postMessage({release:v,planes:M},[v])}catch{}}}},k=async(I,v)=>{let M=u||typeof I.clone!="function"?void 0:i?.spec(I,v);if(M)try{let{buffer:z,layout:U,target:j}=await S(I,v,"planes");if(!U)throw new Error("conversion worker returned planes without their layout");return n.planes++,{data:new Uint8Array(z),layout:U,...M,release:x(j,z,!0)}}catch(z){w(z instanceof Error?z.message:String(z));return}},E=(I,v)=>u||v.rotation!==0||typeof I.clone!="function"?!1:I.format===null?!i?.planar:!!Me(v.colour,I.colorSpace)&&!i?.takesHdr(I,v),_=async(I,v)=>{let M=v.codedWidth,z=v.codedHeight;try{let{buffer:U,target:j,packing:$,choice:Z}=await S(I,v,"raw");if(U.byteLength!==M*z*4||!$)throw new Error(`conversion worker returned ${U.byteLength} bytes`);s=Z;let J=new Uint8ClampedArray(U),We=Me(v.colour,I.colorSpace);if(We){a=We;let Rt=G().hdrToRGBA(J,$,M,z,We);o??=Rt/(M*z)}return n.raw++,Object.assign({width:M,height:z,data:J},{release:x(j,U,!1)})}catch(U){return w(U instanceof Error?U.message:String(U)),m(I,v)}},N=async(I,v)=>{if(E(I,v))return _(I,v);if(!b(I,v)){let U=await k(I,v);if(!U)return m(I,v);try{return i.fromPlanes(U)}finally{U.release()}}let M=v.codedWidth,z=v.codedHeight;try{let{buffer:U,target:j}=await S(I,v,"rgba");if(U.byteLength!==M*z*4)throw new Error(`conversion worker returned ${U.byteLength} bytes`);return f=!0,n.worker++,Object.assign({width:M,height:z,data:new Uint8ClampedArray(U)},{release:x(j,U,!1)})}catch(U){return w(U instanceof Error?U.message:String(U)),m(I,v)}},F=()=>n.raw?`${Wd(s,a)} in a worker (${n.raw} frames, ${n.inThread} in-thread)`:n.worker?`${y} in ${n.workers>1?`${n.workers} workers`:"a worker"} (${n.worker} frames, ${n.inThread} in-thread)`:`${e.describe?.()??"fallback"}${n.planes?` (planes copied in a worker: ${n.planes} frames)`:""}`;return Object.defineProperties(Object.assign(N,{counts:n,describe:F,report:()=>n.raw?Gd(F(),s,a,o):n.worker?{method:F()}:{...e.report?.()??{method:""},method:F()},planes:async(I,v)=>f||b(I,v)?void 0:await k(I,v)??await e.planes?.(I,v),dispose:()=>w("disposed")}),{prefetch:{get:()=>p?Math.max(2,Hd()):!0}})}var Ep=2;async function vp(r){return await new On(r).init()}function La(r="auto"){let e=Na();return $d(new URL("./convert-worker.js",import.meta.url),Ma(e),r,e)}async function za(r,e=La()){if(typeof VideoDecoder>"u")throw new Error("WEBCODECS_UNAVAILABLE: This browser cannot provide frame-accurate decoding. Select the explicitly labelled compatibility mode, or use a browser with WebCodecs.");let t=await vp(r),i;try{i=await VideoDecoder.isConfigSupported(t.config)}catch(n){throw t.dispose(),new Error(`Unsupported codec configuration ${t.config.codec}: ${String(n)}`)}if(!i.supported)throw t.dispose(),new Error(R("media.UNSUPPORTED_CODEC",{codec:t.config.codec,advice:R(`media.UNSUPPORTED_ADVICE.${_p(t.config.codec)}`)}));return new li(r,t,e)}var Ua=class{waiters=[];notify(){for(let e of this.waiters.splice(0))e()}wait(e=1e3){return new Promise(t=>{let i=()=>{clearTimeout(n);let s=this.waiters.indexOf(i);s>=0&&this.waiters.splice(s,1),t()};this.waiters.push(i);let n=setTimeout(i,e)})}},Un=10;function _p(r){return/^(hev1|hvc1)/.test(r)?"hevc":/^(apc[nhso]|ap4[hx])/.test(r)?"prores":/^avc[13]\.(6e|7a|f4)/i.test(r)?"h264":/^av01/.test(r)?"av1":"other"}function Cp(r){let e=Object.fromEntries(["primaries","transfer","matrix","fullRange"].flatMap(t=>r?.[t]===void 0||r?.[t]===null?[]:[[t,r[t]]]));return Object.keys(e).length?{colour:e}:{}}var li=class{demux;convert;info;stats;cancelled;stallTimeout;constructor(e,t,i){this.demux=t,this.convert=i,this.stats={frames:0,converted:0,decodeMS:0,convertMS:0},this.cancelled=!1,this.stallTimeout=3e4;let n=t.rotation===90||t.rotation===270;this.info={name:e.name||"video",size:e.size,width:n?t.height:t.width,height:n?t.width:t.height,codedWidth:t.width,codedHeight:t.height,rotation:t.rotation,duration:t.duration,codec:t.config.codec,frameCount:t.frameCount,mode:"Frame-accurate WebCodecs",noise:Un,warnings:t.warnings,notices:[],...Cp(t.config.colorSpace)}}dispose(){this.cancelled=!0,this.demux.dispose(),this.convert.dispose?.()}conversion(){return this.convert.describe?.()??"custom converter"}conversionReport(){return this.convert.report?.()??(this.stats.converted?{method:this.conversion()}:void 0)}notice(e,t){let i=this.info.notices??=[],n=i.find(s=>s.code===e);n?n.count++:i.push({code:e,message:t,count:1})}checkFrameGeometry(e,t){let i=this.info,n=e.visibleRect?e.visibleRect.width:e.displayWidth,s=e.visibleRect?e.visibleRect.height:e.displayHeight;if(n!==i.codedWidth||s!==i.codedHeight)if(t===0){this.notice("CONTAINER_SIZE_MISMATCH",R("media.CONTAINER_SIZE_MISMATCH",{codedWidth:i.codedWidth,codedHeight:i.codedHeight,bitstreamWidth:n,bitstreamHeight:s})),i.codedWidth=n,i.codedHeight=s;let a=i.rotation===90||i.rotation===270;i.width=a?s:n,i.height=a?n:s}else throw new Error(`FRAME_GEOMETRY_CHANGED: ${n}\xD7${s}; expected ${i.codedWidth}\xD7${i.codedHeight}. The already decoded prefix will be retained; this run does not merge resolution changes.`);(e.displayWidth!==n||e.displayHeight!==s)&&this.notice("NON_SQUARE_PIXELS",R("media.NON_SQUARE_PIXELS",{displayWidth:e.displayWidth,displayHeight:e.displayHeight,bitstreamWidth:n,bitstreamHeight:s}))}async*frames(){yield*this.decode()}async*sparseFrames(e,t={}){yield*this.decode(e,t.planes)}async*decode(e,t=!1){let{demux:i,info:n}=this,s=[],a=new Ua,o=()=>this.convert.prefetch===!0?Ep:this.convert.prefetch||0;n.notices=[];let c=this.stats={frames:0,converted:0,decodeMS:0,convertMS:0},l=!1,h=!1,d=null,u=0,f=0,p=performance.now(),g=new VideoDecoder({output:S=>{f++,p=performance.now(),l?S.close():s.push(S),a.notify()},error:S=>{d=S,a.notify()}});g.configure(i.config),g.ondequeue=()=>a.notify();let y=(async()=>{try{for await(let S of i.packets()){for(;!l&&!d&&(s.length>=Math.max(2,o())||g.decodeQueueSize>=2||u-f>=32);){if(await a.wait(100),!s.length&&performance.now()-p>this.stallTimeout)throw new Error(`DECODER_STALLED: No decoded frame arrived for ${Math.round(this.stallTimeout/1e3)} seconds. The committed prefix is retained.`);this.cancelled&&(l=!0)}if(l||this.cancelled||d)break;let x={type:S.key?"key":"delta",timestamp:S.timestamp,data:S.data};S.duration>0&&(x.duration=S.duration),g.decode(new EncodedVideoChunk(x)),u++}if(!l&&!d&&g.state==="configured"){let S,x=await Promise.race([g.flush().then(()=>"flushed"),new Promise(k=>{S=setTimeout(()=>k("timeout"),this.stallTimeout)})]);if(clearTimeout(S),x==="timeout"){d=new Error(`DECODER_STALLED: flush did not complete within ${Math.round(this.stallTimeout/1e3)} s. The committed prefix is retained.`);try{g.close()}catch{}}}}catch(S){!l&&!this.cancelled&&(d=S)}finally{h=!0,a.notify()}})(),w=0,m=-1/0,b=new Map,A=new Map,T=async S=>await S?.then(x=>x?.release()).catch(()=>{});try{for(;!h||s.length;){if(d)throw d;if(!s.length){if(!h&&performance.now()-p>this.stallTimeout)throw new Error(`DECODER_STALLED: No decoded frame arrived for ${Math.round(this.stallTimeout/1e3)} seconds. The committed prefix is retained.`);let _=performance.now();await a.wait(),c.decodeMS+=performance.now()-_;continue}let S=s.shift(),x=b.get(S),k=A.get(S);b.delete(S),A.delete(S),a.notify();let E=!1;try{if(S.timestamp<0){await x?.then(I=>he(I)).catch(()=>{}),await T(k),this.notice("NEGATIVE_TIMESTAMP_SKIPPED",R("media.NEGATIVE_TIMESTAMP_SKIPPED"));continue}S.timestamp<m?this.notice("NONMONOTONIC_TIMESTAMP",R("media.NONMONOTONIC_TIMESTAMP")):m=S.timestamp,this.checkFrameGeometry(S,w);let _=S.timestamp/1e6,N=(S.duration||0)/1e6;if(e&&!e(w)){await x?.then(I=>he(I)).catch(()=>{}),await T(k),S.close(),E=!0,c.frames++,yield{time:_,duration:N,index:w++};continue}let F=performance.now(),L=t&&!x?await k??await this.convert.planes?.(S,n):void 0;if(L){if(c.convertMS+=performance.now()-F,o()&&!this.cancelled)for(let I=0;I<Math.min(s.length,o());I++){let v=s[I];if(A.has(v)||b.has(v)||e&&!e(w+1+I))continue;let M=this.convert.planes(v,n);M.catch(()=>{}),A.set(v,M)}S.close(),E=!0,c.frames++,c.converted++,yield{planes:L,time:_,duration:N,index:w++};continue}let B=await(x??this.convert(S,n));if(c.convertMS+=performance.now()-F,o()&&!this.cancelled)for(let I=0;I<Math.min(s.length,o());I++){let v=s[I];if(b.has(v)||e&&!e(w+1+I))continue;let M=(async()=>await this.convert(v,n))();M.catch(()=>{}),b.set(v,M)}S.close(),E=!0,c.frames++,c.converted++,yield{image:B,time:_,duration:N,index:w++}}finally{E||S.close()}}if(d)throw d}finally{l=!0,a.notify(),g.state!=="closed"&&g.close();for(let S of s)S.close();s.length=0;for(let S of b.values())await S.then(x=>he(x)).catch(()=>{});for(let S of A.values())await T(S);A.clear(),b.clear(),await y}}},Nn=class{info;fps;request;read;readCoded;cancelled;hdr;coded;report;constructor(e,t,i,n=Pp(),s=Rp()){this.info=e,this.fps=t,this.request=i,this.read=n,this.readCoded=s,this.cancelled=!1,e.mode=`Approximate native seek (${t} Hz)`,e.frameCount=Math.ceil(e.duration*t),e.noise??=Un,e.notices??=[],this.hdr=Me(e.colour)}dispose(){this.cancelled=!0}conversionReport(){return this.report}async*frames(){for(let e=0;e<this.info.frameCount&&!this.cancelled;e++){let t=e/this.fps,{bitmap:i,coded:n}=await this.request(t,!!this.hdr&&this.coded!==!1),s;try{if(i.width!==this.info.width||i.height!==this.info.height)throw new Error(`FRAME_GEOMETRY_CHANGED: native seek returned ${i.width}\xD7${i.height}, expected ${this.info.width}\xD7${this.info.height}. The prefix is retained; no resizing was performed.`);s=this.hdr?this.readHdr(i,n,this.hdr,t):this.read(i)}finally{i.close()}yield{image:s,time:t,duration:1/this.fps,index:e}}}readHdr(e,t,i,n){let{width:s,height:a}=e,o=t&&this.coded!==!1?this.readCoded(e):void 0;if(this.coded===void 0)this.coded=!!o,this.report={method:o?`video snapshot's coded values (WebGL) + core ${i.toUpperCase()}\u2192sRGB`:"video snapshot in the browser's colours",hdr:{transfer:i,verified:!!o}};else if(this.coded!==!!o)throw new Error(`HDR_CAPTURE_CHANGED: the frame at ${n.toFixed(3)} s could not be read the way the first one was. The prefix is retained.`);if(!o)return this.read(e);let c=G().hdrToRGBA(o,"rgba8",s,a,i);return this.report?.hdr&&this.report.hdr.aboveShare===void 0&&(this.report.hdr.aboveShare=c/(s*a)),{width:s,height:a,data:new Uint8ClampedArray(o.buffer,o.byteOffset,o.byteLength)}}};function Rp(){let r;return e=>(r===void 0&&(r=zt.create()??null),r?.read(e,e.width,e.height))}function Pp(){let r,e=null;return t=>((!r||r.width!==t.width||r.height!==t.height)&&(r=new OffscreenCanvas(t.width,t.height),e=r.getContext("2d",{willReadFrequently:!0})),e.drawImage(t,0,0),{width:t.width,height:t.height,data:e.getImageData(0,0,t.width,t.height).data})}function ye(r,e,t,i){let n=R(`diag.prefixOnly.base.${e}`,{frames:t});return{code:r,severity:"error",message:String(i),action:n+(r==="PERSISTENCE_PREFIX_ONLY"?R("diag.prefixOnly.suffixPersistence"):R("diag.prefixOnly.suffixDefault")),...e==="scan"?{}:{detail:{pass:e,frames:t}}}}var Ne=class extends Error{constructor(e){super(e instanceof Error?e.message:String(e)),this.name="StorageError"}},di=class extends Error{constructor(){super("Stop requested."),this.name="StopRequested"}},Ln=class{db;events;project;store;diagnostics;tiles;paused;stopRequested;stopped;phase;partial;lastProgress;lastPersist;consistencyVotedLayers;consistencyThinLayers;scan;pauseWaiters;processed;regions;timings;recordSource(e){let t=this.source.stats;t&&(this.timings[`${e}.decodeMS`]=t.decodeMS,this.timings[`${e}.convertMS`]=t.convertMS,this.timings[`${e}.converted`]=t.converted)}duplicates;skippedPaints;atlas;source;computer;factor;refineRadius;noise;constructor(e,t,i,n){this.db=e,this.events=n,this.paused=!1,this.stopRequested=!1,this.stopped=!1,this.phase="scanning",this.partial=!1,this.lastProgress=0,this.lastPersist=0,this.consistencyVotedLayers=0,this.consistencyThinLayers=0,this.pauseWaiters=[],this.processed=0,this.regions=[],this.timings={},this.duplicates=0,this.skippedPaints=0,this.source=t,this.computer=new Hi(i.compute||"cpu");let s=jt(),a=new Date().toISOString();this.project={id:s,created:a,updated:a,name:t.info.name,settings:i,media:t.info,status:"scanning",frames:0,renderedFrames:0,canvasCount:0,tiles:0,observedPixels:0,diagnostics:{},regions:[],schema:2},this.store=new Wt(e,`run/${s}/`),this.diagnostics=new vi(this.store,o=>n.diagnostic(o)),this.tiles=new Jt(this.store,i.tileSize,i.memoryMB),this.factor=zi(t.info.width,t.info.height,i.analysisSize),this.refineRadius=Math.max(3,Math.ceil(this.factor/2)+1),this.noise=t.info.noise??Un}stop(){this.stopRequested=!0,this.setPaused(!1)}setPaused(e){if(this.paused=e,!e)for(let t of this.pauseWaiters.splice(0))t()}honourStop(){this.partial=!0,this.stopped=!0,this.stopRequested=!1}async checkpoint(){this.paused&&await new Promise(e=>this.pauseWaiters.push(e)),this.stopRequested&&(this.partial=!0),performance.now()-this.lastProgress>100&&await new Promise(e=>setTimeout(e,0))}checkGeometry(e){if(e.width!==this.source.info.width||e.height!==this.source.info.height)throw new Error(`FRAME_GEOMETRY_CHANGED: observation is ${e.width}\xD7${e.height}; the run is ${this.source.info.width}\xD7${this.source.info.height}.`)}async gray(e){return this.checkGeometry(e),this.computer.gray(e,this.factor)}async persist(){this.project.updated=new Date().toISOString(),this.project.diagnostics={...this.diagnostics.counts},this.project.severities={...this.diagnostics.severities};try{await this.db.put(Pt(this.project.id),this.project)}catch(e){throw new Ne(e)}this.events.project(this.project),this.lastPersist=performance.now()}async storagePutMany(e){try{await this.store.putMany(e)}catch(t){throw new Ne(t)}}async commitRows(e){if(!e.length)return;let t=e.slice();await this.storagePutMany(t),e.splice(0,t.length)}async passMismatch(e,t,i){t!==i&&(this.partial=!0,await this.diagnostics.emit({code:"PASS_FRAME_COUNT_MISMATCH",severity:"error",message:R("diag.PASS_FRAME_COUNT_MISMATCH.message",{pass:e,actual:i,expected:t}),action:R("diag.PASS_FRAME_COUNT_MISMATCH.action"),detail:{pass:e,expected:t,actual:i}}))}async report(e,t,i,n,s){let a=performance.now();a-this.lastProgress<100||(this.lastProgress=a,this.events.progress({phase:this.phase,frames:e,total:this.source.info.frameCount,time:t,message:i,fraction:n??Math.min(1,t/Math.max(.001,this.source.info.duration)),canvas:s}),a-this.lastPersist>1200&&await this.persist(),await this.checkpoint())}};var Ip=2e4;async function qd(r,e,t,i,n,s,a){let o=G().framingSession({id:t.id,bounds:t.bounds,tileCount:t.tileCount||0,attached:!!t.attachedTo},i.crop?Co(i.rect,i.crop):i.rect,n.filter(c=>c.kind==="ignore"),e.size,a?.maxTiles??Ip);try{for(;;){let c=o.step(e.engine,performance.now());switch(c.kind){case"reference":{let l=await r.get("frame-reference");o.reference(l&&{frame:l.frame,image:await Li(new Uint8Array(await l.image.arrayBuffer()))});break}case"index":for await(let l of X(r,`tile-index/${t.id}/0/`))o.index(l.value.x,l.value.y,l.value.observed);break;case"next":await s();break;case"tile":await e.load(c.canvas,c.x,c.y,c.level);break;case"save":await e.saveResident(c.id);break;case"saveDetached":await e.save(c.tile);break;case"unframed":return;case"skipped":a?.onSkipped?.(`Framed canvas exceeded the ${c.diagnostics[0].params.maxTiles} tile limit; skipped before allocating output tiles.`);return;case"framed":{let l=c.canvas,h={...t,id:l.id,name:`${t.name} \xB7 \u4FDD\u7559\u5916\u6846`,kind:"presentation",bounds:{x:0,y:0,width:l.width,height:l.height},tileCount:l.tileCount,maxLevel:0,observedPixels:l.observedPixels,provisionalPixels:l.provisionalPixels,uncertainPixels:t.uncertainPixels,conflictPixels:t.conflictPixels,presentation:{sourceCanvas:t.id,sourceRegion:l.sourceRegion,referenceFrame:l.referenceFrame,offset:l.offset,extension:"Native-scale reference chrome shown once; flat background-only extensions are presentation, NOT observed world content. Other panes in the frame are reference snapshots, NOT merged trajectories. Coverage bits mark copied evidence; opaque extension pixels are deliberately not covered."}};return await r.put(`canvas/${h.id}`,h),h}}}}finally{o.free()}}async function jd(r){if(!(r.project.settings.framing!=="context"||r.stopped))try{r.phase="framing";let e=[];for await(let{value:t}of X(r.store,"canvas/"))t.kind==="moving"&&t.tileCount&&!t.attachedTo&&e.push(t);r.events.progress({phase:"framing",fraction:0,frames:r.project.renderedFrames,time:0,message:R("progress.framingStart")});for(let t of e){let i=r.regions.find(s=>s.id===t.layer),n=await qd(r.store,r.tiles,t,i,r.regions,()=>r.checkpoint(),{onSkipped:s=>{r.diagnostics.emit({code:"PRESENTATION_TOO_SPARSE",severity:"warning",message:s,action:R("diag.PRESENTATION_TOO_SPARSE.action")})}});if(n&&(r.project.canvasCount++,r.project.tiles+=n.tileCount),r.stopRequested){r.stopped=!0;break}}e.length&&await r.diagnostics.emit({code:"PRESENTATION_FRAME",severity:"info",message:R("diag.PRESENTATION_FRAME.message")})}catch(e){await r.diagnostics.emit({code:"PRESENTATION_STAGE_FAILED",severity:"warning",message:String(e),action:R("diag.PRESENTATION_STAGE_FAILED.action")})}}async function Kd(r){if(!r.stopped)try{let e=0;for await(let{value:t}of X(r.store,"canvas/"))if(t.tileCount&&await r.tiles.buildPyramid(t,async()=>{await r.checkpoint(),await r.report(r.project.renderedFrames,t.lastTime,R("progress.pyramidBuild"),e/Math.max(1,r.project.canvasCount),t)}),e++,r.stopRequested){r.stopped=!0;break}}catch(e){await r.diagnostics.emit({code:"PYRAMID_FAILED",severity:"warning",message:String(e),action:R("diag.PYRAMID_FAILED.action")})}}var Fp=6,Bp=120,Dp=.05;function Yd(r,e){let t=[{code:"FRAME_CONVERSION",severity:"info",message:R("diag.FRAME_CONVERSION.message",{method:r.method}),detail:r}];r.hdr&&!r.hdr.verified&&t.push({code:"HDR_UNCHECKED",severity:"warning",message:R("diag.HDR_UNCHECKED.message",{transfer:r.hdr.transfer.toUpperCase()}),action:R("diag.HDR_UNCHECKED.action")}),r.hdr?.aboveShare!==void 0&&r.hdr.aboveShare>Dp&&t.push({code:"HDR_ABOVE_WHITE",severity:"warning",message:R("diag.HDR_ABOVE_WHITE.message",{percent:Math.round(r.hdr.aboveShare*100)}),action:R("diag.HDR_ABOVE_WHITE.action"),detail:{aboveShare:r.hdr.aboveShare}});let i=e.frameCount??Math.round(e.duration*30),n=r.ms===void 0?0:r.ms*i*Fp/1e3;return n>Bp&&t.push({code:"SLOW_CONVERSION",severity:"warning",message:R("diag.SLOW_CONVERSION.message",{ms:Math.round(r.ms),minutes:Math.round(n/60)}),action:R("diag.SLOW_CONVERSION.action"),detail:{ms:r.ms,frames:i,estimatedSeconds:Math.round(n)}}),t}var zn=class{regions;width;height;resident;counts;cachedLabels;constructor(e,t,i){if(this.regions=e,this.width=t,this.height=i,e.length>254)throw new Error("Too many regions for the pixel atlas.");let{resident:n,counts:s}=G().labelAtlasResident(e,t,i);this.resident=n,this.counts=s}get labels(){return this.cachedLabels??=this.resident.bytes()}code(e){let t=this.regions.indexOf(e);if(t<0)throw new Error(`Region ${e.id} is not part of this atlas.`);return t+1}contains(e,t,i){return t>=0&&i>=0&&t<this.width&&i<this.height&&this.labels[i*this.width+t]===e}count(e){return this.counts[e]||0}dispose(){this.resident.free()}};var Op=new Set(["LOW_TEXTURE_UNOBSERVABLE","AUTOMATIC_LAYER_MASK"]),Qd=R;function Xd(r){return{code:r.code,severity:r.severity,...r.time!==void 0?{time:r.time}:{},...r.frame!==void 0?{frame:r.frame}:{},message:Qd(`diag.${r.code}.message`,r.params),...Op.has(r.code)?{action:Qd(`diag.${r.code}.action`)}:{},...r.code==="UNRESOLVED_MOTION"?{confidence:0}:{}}}var Va=class{ctx;session;pending;storageFailed;endedNaturally;stop;constructor(e){this.ctx=e,this.pending=[],this.storageFailed=!1,this.endedNaturally=!1,this.stop=!1}async firstFrameFacts(e){await this.ctx.diagnostics.emit({code:"COMPUTE_BACKEND",severity:"info",message:R("diag.COMPUTE_BACKEND.message",{backend:this.ctx.computer.stats.backend,reason:this.ctx.computer.stats.reason,variant:Zt().variant,threads:Zt().threads,coreReason:Zt().reason}),detail:{...this.ctx.computer.stats,core:Zt()}});let t=this.ctx.source.conversionReport?.();if(t)for(let i of Yd(t,this.ctx.source.info))await this.ctx.diagnostics.emit(i);if(this.ctx.project.settings.framing==="context")try{await this.ctx.store.put("frame-reference",{frame:e.index,image:new Blob([await Ui(e.image)],{type:"image/png"})})}catch(i){await this.ctx.diagnostics.emit({code:"PRESENTATION_REFERENCE_FAILED",severity:"warning",message:String(i),action:R("diag.PRESENTATION_REFERENCE_FAILED.action")})}}async analyzeFrame(e){let t=!1,i=()=>{t||he(e.image),t=!0};try{e.index===0&&(this.ctx.factor=zi(this.ctx.source.info.width,this.ctx.source.info.height,this.ctx.project.settings.analysisSize),this.ctx.refineRadius=Math.max(3,Math.ceil(this.ctx.factor/2)+1),this.session=this.ctx.scan=G().scanSession(this.ctx.source.info.width,this.ctx.source.info.height,this.ctx.factor)),this.ctx.checkGeometry(e.image);let n=this.session;n.write(e.image);let s=n.isDuplicate()?void 0:await this.ctx.computer.hostGray(e.image,this.ctx.factor),a=n.push(e.index,e.time,e.duration,s);a.record.duplicate&&this.ctx.duplicates++,a.first&&await this.firstFrameFacts(e),i(),this.pending.push({key:`scan/${ue(e.index)}`,value:a.record}),a.features&&this.pending.push({key:`scan-features/${ue(e.index)}`,value:a.features}),this.pending.length>=24&&await this.ctx.commitRows(this.pending),this.ctx.project.frames=e.index+1;for(let o of a.diagnostics)await this.ctx.diagnostics.emit(Xd(o));await this.ctx.report(e.index+1,e.time,R("progress.scanFrame")),this.ctx.stopRequested&&(this.ctx.honourStop(),this.stop=!0)}catch(n){if(i(),!this.ctx.project.frames)throw n;if(this.ctx.partial=!0,n instanceof Ne){this.storageFailed=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","scan",this.ctx.project.frames,n))}catch{}this.stop=!0;return}if(n instanceof Error&&n.message.startsWith("FRAME_GEOMETRY_CHANGED")){await this.ctx.diagnostics.emit(ye("DECODE_PREFIX_ONLY","scan",this.ctx.project.frames,n)),this.stop=!0;return}await this.ctx.diagnostics.emit(ye("ANALYSIS_PREFIX_ONLY","scan",this.ctx.project.frames,n)),this.stop=!0}}async run(){let e=this.ctx.source.frames();try{for(;;){await this.ctx.checkpoint();let t;try{t=await e.next()}catch(i){if(!this.ctx.project.frames)throw i;this.ctx.partial=!0,await this.ctx.diagnostics.emit(ye("DECODE_PREFIX_ONLY","scan",this.ctx.project.frames,i));break}if(t.done){this.endedNaturally=!0;break}if(await this.analyzeFrame(t.value),this.stop)break}}finally{try{await e.return(void 0)}catch{}}}async trailingCommit(){if(this.pending.length&&!this.storageFailed)try{await this.ctx.commitRows(this.pending)}catch(e){this.ctx.partial=!0,this.storageFailed=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","scan",this.ctx.project.frames,e))}catch{}}if(this.endedNaturally&&this.ctx.source.info.frameCount!==void 0){let e=this.ctx.source.info.notices?.find(t=>t.code==="NEGATIVE_TIMESTAMP_SKIPPED")?.count||0;await this.ctx.passMismatch("scan",this.ctx.source.info.frameCount-e,this.ctx.project.frames)}for(let e of this.ctx.source.info.notices||[])await this.ctx.diagnostics.emit({code:e.code,severity:"warning",message:e.message,count:e.count,detail:{count:e.count}})}async finalizeRegions(){let{width:e,height:t}=this.ctx.source.info;this.session??=this.ctx.scan=G().scanSession(e,t,this.ctx.factor);let{regions:i,diagnostics:n}=this.session.finish(this.ctx.project.settings.regions);this.ctx.regions=i,this.ctx.atlas=new zn(this.ctx.regions,e,t),this.ctx.project.regions=this.ctx.regions.map(({mask:s,...a})=>a),await this.ctx.store.put("regions",this.ctx.regions);for(let s of n)await this.ctx.diagnostics.emit(Xd(s));await this.ctx.diagnostics.flush(),await this.ctx.persist()}async execute(){this.ctx.phase="scanning";try{await this.run(),await this.trailingCommit(),await this.finalizeRegions()}finally{this.session?.free(),this.ctx.scan=void 0}}};async function Zd(r){await new Va(r).execute()}var Mp=1,Sr=class r{db;state;hydrated;constructor(e){this.db=e}static adopt(e,t){let i=new r(e);return i.state=t,i.hydrated=Promise.resolve(t),i}get loops(){return this.state?.loops??0}hydrate(){return this.hydrated??=(async()=>{let e=this.state=G().poseGraph(),t=[];for await(let i of X(this.db,"node/"))t.push({node:i.value});for await(let i of X(this.db,"edge/"))t.push({edge:i});return e.hydrate(t),e})()}async store(e){for(let{many:t,rows:i}of e)t?await this.db.putMany(i):await this.db.put(i[0].key,i[0].value)}async add(e,t,i,n,s=1){let{node:a,writes:o}=(await this.hydrate()).add(e,t,i,n?.id,s);return await this.store(o),a}async get(e){return(await this.hydrate()).get(e)}async connect(e,t,i,n,s,a){await this.store((await this.hydrate()).connect(e,t,i,n,s,a))}async unpin(e){await this.store((await this.hydrate()).unpin(e))}async optimize(e){let t=await this.hydrate();if(!t.optimizeBegin())return{residual:0,iterations:0};let i=!1;try{for(let o=!1;!o;)o=t.optimizeStep(Mp),await e();let{residual:n,iterations:s,writes:a}=t.optimizeFinish();return i=!0,await this.store(a),{residual:n,iterations:s}}finally{i||t.optimizeCancel()}}engine(){return this.hydrate()}async correction(e,t){return(await this.hydrate()).correction(e,t)}free(){this.state?.free()}};var Jd=new FinalizationRegistry(r=>r.free()),Vn=class{db;tiles;policy;emit;atlas;engine;constructor(e,t,i,n,s){this.db=e,this.tiles=t,this.policy=i,this.emit=n,this.atlas=s,this.engine=G().compositor(i==="latest",s.width,s.height),Jd.register(this,this.engine,this)}async flush(){for(let{canvas:e,deleted:t,dirty:i}of this.engine.flush()){for(let n of t)await this.db.delete(`temporal/${e}/${n}`);i.length&&await this.db.putMany(i.map(n=>({key:`temporal/${e}/${n.id}`,value:{id:n.id,canvasId:e,rect:n.rect,chosenFrame:n.chosenFrame,chosenTime:n.chosenTime,complete:n.complete,revisions:n.revisions,blocks:n.blocks}})))}}dispose(){this.engine.dispose()}free(){Jd.unregister(this),this.engine.free()}async loadTemporal(e){let t=[];for await(let{value:i}of X(this.db,`temporal/${e}/`))t.push(i);this.engine.loadTemporal(e,t)}async report(e,t){e.kind==="incomplete"?await this.emit({code:"INCOMPLETE_TEMPORAL_PATCH",severity:"warning",canvasId:t,frame:e.frame,time:e.time,region:e.region,message:R("diag.INCOMPLETE_TEMPORAL_PATCH.message"),action:R("diag.INCOMPLETE_TEMPORAL_PATCH.action")}):await this.emit({code:"TEMPORAL_OR_ALIGNMENT_CONFLICT",severity:"warning",time:e.time,frame:e.frame,canvasId:t,region:e.region,confidence:e.confidence,count:e.regions.length,detail:{regions:e.regions},message:R("diag.TEMPORAL_OR_ALIGNMENT_CONFLICT.message",{conflicts:e.conflicts.toLocaleString()}),action:this.policy==="stable"?R("diag.TEMPORAL_OR_ALIGNMENT_CONFLICT.actionStable"):R("diag.TEMPORAL_OR_ALIGNMENT_CONFLICT.actionRolling")})}async add(e,t,i,n,s,a,o){if(e.width!==this.atlas.width||e.height!==this.atlas.height)throw new Error(`Frame is ${e.width}\xD7${e.height} but the region atlas is ${this.atlas.width}\xD7${this.atlas.height}.`);if(o&&(o.width!==e.width||o.height!==e.height))throw new Error("Resident frame does not match the observation.");let c=this.atlas.code(t);if(this.engine.begin(this.tiles.engine,{canvas:i.canvasId,region:t.rect,code:c,ownedPixels:this.atlas.count(c),x:i.x,y:i.y,frame:n,time:i.time,confidence:i.confidence,uncertain:!!i.uncertain,occlusions:i.occlusions},{image:o??e,labels:this.atlas.resident,consistent:a})===Ri)throw new Error(`Placement (${i.x}, ${i.y}) puts region ${t.id} outside the addressable canvas.`);let h,d;try{for(;;){let u=this.engine.step(this.tiles.engine,performance.now());if(u===Pi)throw new Error(`CORE_BAD_ARGUMENT: temporalIndex(${i.canvasId}) called after dispose() already drained and froze its state.`);if(u.kind==="tile")await this.tiles.load(i.canvasId,u.x,u.y);else if(u.kind==="temporal")await this.loadTemporal(i.canvasId);else{({stats:h,diagnostics:d}=u);break}}}catch(u){throw this.engine.cancel(),u}for(let u of d)await this.report(u,i.canvasId);return s.bounds=_o(s.bounds,h.bounds),s.observedPixels+=h.added,s.uncertainPixels+=h.uncertain,s.conflictPixels+=h.conflicts,s.tileCount+=h.tiles,s.provisionalPixels+=h.provisionalPixels,s.lastTime=i.time,h}};function Np(r){let{bounds:e,tileCount:t,observedPixels:i,uncertainPixels:n,conflictPixels:s,provisionalPixels:a,lastTime:o}=r;return{bounds:e,tileCount:t,observedPixels:i,uncertainPixels:n,conflictPixels:s,provisionalPixels:a,lastTime:o}}var Ha=class{ctx;now;graph;compositor;session;metas;base;pendingObservations;lastFlush;storageFailed;endedNaturally;missingPlan;stop;pending;pendingPrev;constructor(e,t=()=>performance.now()){this.ctx=e,this.now=t,this.metas=new Map,this.pendingObservations=[],this.storageFailed=!1,this.endedNaturally=!1,this.stop=!1}async setup(){let e=this.ctx,t=e.atlas;this.graph=new Sr(e.store),this.compositor=new Vn(e.store,e.tiles,e.project.settings.temporalPolicy,s=>e.diagnostics.emit(s),t);let i=[];for await(let{value:s}of X(e.store,"attach/"))i.push(s);this.session=G().renderSession({width:e.source.info.width,height:e.source.info.height,factor:e.factor,noise:e.noise,regions:e.regions.map(s=>{let a=t.code(s);return{id:s.id,kind:s.kind,rect:s.rect,code:a,ownedPixels:t.count(a)}}),attachments:i}),this.base={skippedPaints:e.skippedPaints,tiles:e.project.tiles,observedPixels:e.project.observedPixels},this.lastFlush=this.now();let n=this.session.configureTiles(e.tiles.engine,e.project.settings.memoryMB);if(n){let{from:s,to:a,mb:o}=n.params;await e.diagnostics.emit({code:"MEMORY_BUDGET_RAISED",severity:"info",message:R("diag.MEMORY_BUDGET_RAISED.message",{from:s,to:a,mb:o}),action:R("diag.MEMORY_BUDGET_RAISED.action"),detail:n.detail})}}async report(e){let{frame:t,time:i,region:n,canvasId:s}=e;if(e.code==="NONFINITE_POSE")await this.ctx.diagnostics.emit({code:"NONFINITE_POSE",severity:"error",time:i,frame:t,canvasId:s,message:R("diag.NONFINITE_POSE.message")});else if(e.code==="INCOMPLETE_TEMPORAL_PATCH")await this.compositor.report({kind:"incomplete",frame:t,time:i,region:n},s);else{let{confidence:a}=e,{regions:o}=e.detail;await this.compositor.report({kind:"conflict",frame:t,time:i,region:n,confidence:a,regions:o,conflicts:e.params.conflicts},s)}}liveMeta(e,t=this.session.meta(e)){let i=this.metas.get(e);return i&&t&&Object.assign(i,t),i}async flushMetas(){let e=this.session.dirtyMetas();e.length&&await this.ctx.storagePutMany(e.map(({canvas:t,meta:i})=>({key:`canvas/${t}`,value:this.liveMeta(t,i)})))}async checkpointFlush(){if(this.now()-this.lastFlush>=1200){let e=this.lastFlush;this.lastFlush=this.now(),await this.ctx.tiles.flush(e),await this.compositor.flush(),await this.ctx.diagnostics.flush(),await this.flushMetas(),this.pendingObservations.length&&await this.ctx.commitRows(this.pendingObservations)}}async composite(e,t,i,n){let s=this.ctx,a=this.session,o=i?await s.store.get(`plan/${ue(e.index-1)}`):void 0,c=n?await s.store.get(`plan/${ue(e.index+1)}`):void 0,l=[];for(let d of a.wantedVotes(e.index,!!i,!!n))l.push({index:d,record:await s.store.get(`consistency/${ue(d)}`)});a.begin({index:e.index,time:e.time,plan:t,hasPrev:!!i,prevPlan:o,hasNext:!!n,nextPlan:c,votes:l});let h=await this.graph.engine();for(;;){let{events:d,counters:u,need:f}=a.step(this.compositor.engine,s.tiles.engine,h,s.atlas.resident,performance.now());s.skippedPaints=this.base.skippedPaints+u.skippedPaints,s.project.tiles=this.base.tiles+u.tiles,s.project.observedPixels=this.base.observedPixels+u.observedPixels;for(let p of d)await this.report(p);switch(f.kind){case"done":return{observation:f.observation,latest:f.latest===void 0?void 0:this.liveMeta(f.latest)};case"error":throw new Error(f.message);case"meta":{let p=await s.store.get(`canvas/${f.canvas}`);p&&this.metas.set(f.canvas,p),a.provideMeta(f.canvas,p&&Np(p));break}case"frame":{let p=f.index===e.index?e.image:f.index<e.index?i:n,{width:g,height:y}=s.source.info;if(p.width!==g||p.height!==y)throw new Error(`CORE_BAD_ARGUMENT: frame ${p.width}\xD7${p.height} does not fit a ${g}\xD7${y} ring.`);a.provideFrame(f.index,p.data);break}case"tile":await s.tiles.load(f.canvas,f.x,f.y);break;case"temporal":await this.compositor.loadTemporal(f.canvas);break}}}async processFrame(e,t,i){try{let n=await this.ctx.store.get(`plan/${ue(e.index)}`);if(!n){this.ctx.partial=!0,this.missingPlan=e.index,await this.ctx.diagnostics.emit({code:"MISSING_PLAN",severity:"error",frame:e.index,message:R("diag.MISSING_PLAN.message",{index:ue(e.index)}),action:R("diag.MISSING_PLAN.action"),detail:{pass:"render",frame:e.index}}),this.stop=!0;return}let{observation:s,latest:a}=await this.composite(e,n,t,i);if(this.pendingObservations.push({key:`observation/${ue(e.index)}`,value:s}),this.pendingObservations.length>=32&&await this.ctx.commitRows(this.pendingObservations),this.ctx.project.renderedFrames=e.index+1,await this.checkpointFlush(),await this.ctx.report(e.index+1,e.time,R("progress.render"),(e.index+1)/Math.max(1,this.ctx.processed),a),this.ctx.stopRequested){this.ctx.honourStop(),this.stop=!0;return}e.index+1>=this.ctx.processed&&(this.stop=!0)}catch(n){if(this.session.cancel(this.compositor.engine),!this.ctx.project.renderedFrames)throw n;if(this.ctx.partial=!0,n instanceof Ne){this.storageFailed=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","render",this.ctx.project.renderedFrames,n))}catch{}this.stop=!0;return}await this.ctx.diagnostics.emit(ye("ANALYSIS_PREFIX_ONLY","render",this.ctx.project.renderedFrames,n)),this.stop=!0}}async run(){let e=this.ctx.source.frames();try{for(;;){await this.ctx.checkpoint();let t;try{t=await e.next()}catch(n){if(this.pending&&(await this.processFrame(this.pending,this.pendingPrev,void 0),he(this.pendingPrev,this.pending.image),he(this.pending.image)),this.pending=void 0,this.pendingPrev=void 0,!this.ctx.project.renderedFrames)throw n;this.ctx.partial=!0,await this.ctx.diagnostics.emit(ye("DECODE_PREFIX_ONLY","render",this.ctx.project.renderedFrames,n));break}if(t.done){this.endedNaturally=!0,this.pending&&(await this.processFrame(this.pending,this.pendingPrev,void 0),he(this.pendingPrev,this.pending.image),he(this.pending.image)),this.pending=void 0,this.pendingPrev=void 0;break}let i=t.value;if(this.pending){let n=this.pendingPrev;await this.processFrame(this.pending,this.pendingPrev,i.image),this.pendingPrev=this.pending.image,he(n,this.pendingPrev,i.image)}if(this.pending=i,this.stop){he(this.pending.image,this.pendingPrev),this.pending=void 0;break}}}finally{try{await e.return(void 0)}catch{}this.compositor.dispose();try{this.pendingObservations.length&&!this.storageFailed&&await this.ctx.commitRows(this.pendingObservations)}catch(t){this.storageFailed=!0,this.ctx.partial=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","render",this.ctx.project.renderedFrames,t))}catch{}}try{this.storageFailed||(await this.compositor.flush(),await this.flushMetas())}catch(t){this.storageFailed=!0,this.ctx.partial=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","render",this.ctx.project.renderedFrames,t))}catch{}}finally{this.compositor?.free(),this.graph?.free(),this.session?.free()}}}async finish(){(this.endedNaturally||this.missingPlan!==void 0)&&this.ctx.project.renderedFrames!==this.ctx.processed&&await this.ctx.passMismatch("render",this.ctx.processed,this.ctx.project.renderedFrames),await this.ctx.tiles.flush(),await this.ctx.diagnostics.flush(),await this.ctx.store.put("memory-stats",{peakResidentTiles:this.ctx.tiles.peakResidentTiles,tileCacheLimit:this.ctx.tiles.maxTiles,budgetMB:this.ctx.project.settings.memoryMB,note:"Codec/browser/GPU allocations are additional, not a hard process-RSS bound. The render pass also holds one extra decoded native RGBA frame: a one-frame lookahead the world-consistency mask compares against (docs/ARCHITECTURE.md \xA7\u4E03)."}),await this.ctx.persist()}async execute(){try{await this.setup()}catch(e){throw this.compositor?.free(),this.graph?.free(),this.session?.free(),e}await this.run(),await this.finish()}};async function eh(r){r.phase="rendering",r.project.status="rendering",await r.persist(),await new Ha(r).execute()}var Up=128*1024*1024;function Lp(r){return{code:r.code,severity:r.severity,message:R("diag.REVEAL_SKIPPED.message",{need:r.params.need}),action:R("diag.REVEAL_SKIPPED.action"),detail:r.detail}}async function ih(r){if(r.stopped||r.partial||!r.atlas||r.processed<2)return;let e=[];for await(let{value:o}of X(r.store,"canvas/"))o.kind==="moving"&&e.push(o);let t=r.atlas,{width:i,height:n}=r.source.info,s=G().revealSession({width:i,height:n,noise:r.noise,tileSize:r.tiles.size,frames:r.processed,layers:r.regions.filter(o=>o.kind==="moving").map(o=>({id:o.id,rect:o.rect,code:t.code(o)})),canvases:e.map(o=>({id:o.id,bounds:o.bounds}))}),a=0;try{for(;;){let o=s.step(r.tiles.engine,performance.now());switch(o.kind){case"memory":a||(a=performance.now(),r.phase="revealing"),s.memory(G().canAllocate(o.bytes+Up),G().memoryBytes);break;case"observations":for await(let{value:c}of X(r.store,"observation/"))s.observation(c.frame,c.decisions);break;case"tile":await r.tiles.load(o.canvas,o.x,o.y,o.level);break;case"checkpoint":await r.checkpoint();break;case"decode":if(!await zp(r,s,o.pass,o.wanted))return;break;case"provenance":await r.store.put(`reveal/${o.canvas}`,{version:1,...o.provenance});break;case"skipped":await r.diagnostics.emit(Lp(o.diagnostic));return;case"revealed":{await r.tiles.flush(),r.timings.revealMS=performance.now()-a,await r.store.put("reveal-summary",{...o.summary,seconds:r.timings.revealMS/1e3});return}case"nothing":return;default:throw new Error(`CORE_BAD_ARGUMENT: reveal step ${o.kind} out of turn.`)}}}finally{s.free()}}async function zp(r,e,t,i){let n=R(`progress.reveal.${t}`),s=Lr.indexOf(t),a=r.atlas.resident,{width:o,height:c}=r.source.info,l=performance.now(),h=0,d=0,u=0,f=0,p=0,g=performance.now(),y=m=>i[m]===1,w=r.source.sparseFrames?r.source.sparseFrames(y,{planes:!0}):r.source.frames();try{for await(let m of w){if(u+=performance.now()-g,m.index>=r.processed){he(m.image);break}let b=performance.now();if("planes"in m){let A=m.planes;try{y(m.index)&&(th(A,o,c),G().planesToCore(A,e.frameBuffer()),p++)}finally{A.release()}}else if(m.image&&y(m.index)){let A=m.image;th(A,o,c);let T=e.frameBuffer();new Uint8Array(G().exports.memory.buffer).set(new Uint8Array(A.data.buffer,A.data.byteOffset,A.data.byteLength),T),p++}if(he(m.image),f+=performance.now()-b,b=performance.now(),e.push(m.index,a),h+=performance.now()-b,b=performance.now(),await rh(r,e,"nextFrame"),d+=performance.now()-b,await r.report(m.index+1,m.time,n,(s+(m.index+1)/Math.max(1,r.processed))/Lr.length),g=performance.now(),r.stopRequested)return r.honourStop(),!1}}finally{try{await w.return(void 0)}catch{}}return e.end(a),await rh(r,e,"passDone"),r.timings[`reveal.${t}MS`]=performance.now()-l,r.timings[`reveal.${t}.coreMS`]=h,r.timings[`reveal.${t}.writeMS`]=d,r.timings[`reveal.${t}.waitMS`]=u,r.timings[`reveal.${t}.uploadMS`]=f,r.timings[`reveal.${t}.frames`]=p,r.recordSource(`reveal.${t}`),!r.stopped&&!r.partial}function th(r,e,t){if(r.width!==e||r.height!==t)throw new Error(`CORE_BAD_ARGUMENT: frame ${r.width}\xD7${r.height} does not fit a ${e}\xD7${t} reveal.`)}async function rh(r,e,t){for(let i=e.step(r.tiles.engine,performance.now());i.kind!==t;i=e.step(r.tiles.engine,performance.now())){if(i.kind!=="tile")throw new Error(`CORE_BAD_ARGUMENT: reveal step ${i.kind} out of turn.`);await r.tiles.load(i.canvas,i.x,i.y,i.level)}}var nh="A highly repetitive visual-word posting exceeded the 96-candidate retrieval budget. Relocalization is approximate here; all image observations remain in the reconstruction journal.";function sh(r){let{code:e,time:t,frame:i,canvasId:n,confidence:s,region:a,detail:o,params:c}=r;switch(e){case"PARTIAL_CONTENT_CHANGE":return{code:e,severity:"info",time:t,frame:i,canvasId:n,message:R("diag.PARTIAL_CONTENT_CHANGE.message",{percent:c.percent})};case"THIN_OVERLAP_STEP":return{code:e,severity:"warning",time:t,frame:i,canvasId:n,confidence:s,message:R("diag.THIN_OVERLAP_STEP.message"),action:R("diag.THIN_OVERLAP_STEP.action")};case"LOW_CONFIDENCE_PLACEMENT":return a?{code:e,severity:"warning",time:t,frame:i,canvasId:n,confidence:s,region:a,message:c.ambiguous?R("diag.LOW_CONFIDENCE_PLACEMENT.messageAmbiguous"):R("diag.LOW_CONFIDENCE_PLACEMENT.messageLowConfidence"),action:R("diag.LOW_CONFIDENCE_PLACEMENT.action")}:{code:e,severity:"warning",time:t,frame:i,canvasId:n,confidence:s,message:R("diag.LOW_CONFIDENCE_PLACEMENT.messageStatic")};case"UNOBSERVABLE_FRAME":return{code:e,severity:"warning",time:t,frame:i,canvasId:n||void 0,message:R("diag.UNOBSERVABLE_FRAME.message"),action:R("diag.UNOBSERVABLE_FRAME.action")};case"RELOCALIZED":return{code:e,severity:"info",canvasId:n,time:t,frame:i,confidence:s,detail:o,message:R("diag.RELOCALIZED.message")};case"SCALE_CHANGE_FRAGMENT":return{code:e,severity:"warning",canvasId:n,time:t,frame:i,confidence:s,detail:o,message:R("diag.SCALE_CHANGE_FRAGMENT.message",{scale:c.scale.toFixed(2)}),action:R("diag.SCALE_CHANGE_FRAGMENT.action")};case"UNPLACED_FRAGMENT":return{code:e,severity:"warning",canvasId:n,time:t,frame:i,confidence:s,detail:void 0,message:R("diag.UNPLACED_FRAGMENT.message"),action:R("diag.UNPLACED_FRAGMENT.action")};case"NONFINITE_POSE":return{code:e,severity:"error",time:t,frame:i,message:R("diag.NONFINITE_POSE.message")};case"STICKY_OCCLUSION":return{code:e,severity:"info",frame:i,time:t,canvasId:n,region:a,message:R("diag.STICKY_OCCLUSION.message")};case"FRAGMENT_ATTACHED":return{code:e,severity:"info",canvasId:n,time:t,frame:i,confidence:s,detail:o,message:R("diag.FRAGMENT_ATTACHED.message")};case"TRAJECTORY_CORRECTED":return{code:e,severity:"warning",time:t,frame:i,canvasId:n,confidence:s,detail:o,message:R("diag.TRAJECTORY_CORRECTED.message",{discrepancy:c.discrepancy.toFixed(1)}),action:R("diag.TRAJECTORY_CORRECTED.action")};case"LOOP_CLOSURE":return{code:e,severity:"info",canvasId:n,time:t,frame:i,confidence:s,message:R("diag.LOOP_CLOSURE.message")};case"INCONSISTENT_LOOP_REJECTED":return{code:e,severity:"warning",time:t,frame:i,canvasId:n,message:R("diag.INCONSISTENT_LOOP_REJECTED.message",{discrepancy:c.discrepancy.toFixed(1)}),confidence:s};case"AMBIGUOUS_LOOP":return{code:e,severity:"warning",time:t,frame:i,canvasId:n,message:R("diag.AMBIGUOUS_LOOP.message")};case"RELOCALIZATION_BUDGET":return{code:e,severity:"warning",message:nh};default:throw new Error(`CORE_BAD_ARGUMENT: unknown solve diagnostic ${e}.`)}}var Wa=class{ctx;session;solved;pending;pendingConsistency;endedNaturally;missingScan;storageFailed;graph;constructor(e){this.ctx=e,this.solved=0,this.pending=[],this.pendingConsistency=[],this.endedNaturally=!1,this.missingScan=!1,this.storageFailed=!1}async setup(){let e=this.ctx;e.phase="solving",e.project.status="solving",await e.persist();let t=e.atlas;this.session=G().solveSession({width:e.source.info.width,height:e.source.info.height,factor:e.factor,radius:e.refineRadius,noise:e.noise,regions:e.regions.filter(i=>i.kind!=="ignore").map(i=>({region:i,code:t.code(i)}))})}async apply(e){let t=this.ctx;for(let i of e)switch(i.kind){case"canvas":await t.store.put(`canvas/${i.meta.id}`,i.meta),i.created&&t.project.canvasCount++;break;case"attach":await t.store.put(`attach/${i.attachment.id}`,i.attachment);break;case"keyframe":await t.store.put(`keyframe/${i.keyframe.id}`,i.keyframe);break;case"graph":i.write.many?await t.store.putMany(i.write.rows):await t.store.put(i.write.rows[0].key,i.write.rows[0].value);break;case"diagnostic":await t.diagnostics.emit(sh(i.diagnostic));break}}async step(e){try{return e()}finally{await this.apply(this.session.effects())}}queueVoting(e){for(let t of e)this.ctx.consistencyVotedLayers+=t.votedLayers,this.ctx.consistencyThinLayers+=t.thinLayers,t.record&&this.pendingConsistency.push({key:`consistency/${ue(t.index)}`,value:t.record})}async frame(e,t){let i=this.ctx,n=this.session,s=n.begin(e.index,e.time,t);if("duplicate"in s){he(e.image);let f={index:e.index,time:e.time,duplicate:!0,placements:s.duplicate};this.pending.push({key:`plan/${ue(e.index)}`,value:f}),this.pending.length>=24&&await i.commitRows(this.pending),this.solved=e.index+1,await i.report(this.solved,e.time,R("progress.duplicateReuse"),this.solved/i.project.frames);return}let a=e.image;if(a.width!==n.width||a.height!==n.height)throw new Error(`FRAME_GEOMETRY_CHANGED: observation is ${a.width}\xD7${a.height}; the run is ${i.source.info.width}\xD7${i.source.info.height}.`);let o=n.frame();o.write(a.data),he(a);let c=s.gray?await i.gray(o):void 0,l=t.duplicate?void 0:await i.store.get(`scan-features/${ue(e.index)}`),h=i.atlas.resident,d=await this.step(()=>n.run(c,l,h));for(;"keyframes"in d;){let f=[];for(let p of d.keyframes)f.push(await i.store.get(`keyframe/${p}`));d=await this.step(()=>n.provide(f,h))}d.joinedRing&&(this.queueVoting(d.voting),this.pendingConsistency.length>=24&&await i.commitRows(this.pendingConsistency));let u={index:e.index,time:e.time,placements:d.placements,duplicate:t.duplicate};this.pending.push({key:`plan/${ue(e.index)}`,value:u}),this.pending.length>=24&&await i.commitRows(this.pending),this.solved=e.index+1,await i.report(this.solved,e.time,R("progress.solveFrame"),this.solved/i.project.frames)}async runLoop(){let e=this.ctx.source.frames();try{for(;;){await this.ctx.checkpoint();let t;try{t=await e.next()}catch(n){if(!this.solved)throw n;this.ctx.partial=!0,await this.ctx.diagnostics.emit(ye("DECODE_PREFIX_ONLY","solve",this.solved,n));break}if(t.done){this.endedNaturally=!0;break}let i=t.value;try{let n=await this.ctx.store.get(`scan/${ue(i.index)}`);if(!n){this.missingScan=!0,this.ctx.partial=!0,await this.ctx.diagnostics.emit({code:"MISSING_SCAN_RECORD",severity:"error",frame:i.index,message:R("diag.MISSING_SCAN_RECORD.message",{index:ue(i.index)}),action:R("diag.MISSING_SCAN_RECORD.action"),detail:{pass:"solve",frame:i.index}});break}if(await this.frame(i,n),this.ctx.stopRequested){this.ctx.honourStop();break}if(this.solved>=this.ctx.project.frames)break}catch(n){if(he(i.image),!this.solved)throw n;if(this.ctx.partial=!0,n instanceof Ne){this.storageFailed=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","solve",this.solved,n))}catch{}break}await this.ctx.diagnostics.emit(ye("ANALYSIS_PREFIX_ONLY","solve",this.solved,n));break}}}finally{try{await e.return(void 0)}catch{}}}async trailingCommitAndMismatch(){if(this.pending.length&&!this.storageFailed)try{await this.ctx.commitRows(this.pending)}catch(e){this.storageFailed=!0,this.ctx.partial=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","solve",this.solved,e))}catch{}}(this.endedNaturally||this.missingScan)&&await this.ctx.passMismatch("solve",this.ctx.project.frames,this.solved)}async drainVoting(){if(!this.storageFailed&&(this.queueVoting(this.session.drain()),this.pendingConsistency.length))try{await this.ctx.commitRows(this.pendingConsistency)}catch(e){this.storageFailed=!0,this.ctx.partial=!0;try{await this.ctx.diagnostics.emit(ye("PERSISTENCE_PREFIX_ONLY","solve",this.solved,e))}catch{}}this.graph=Sr.adopt(this.ctx.store,this.session.takeGraph()),this.session.free()}free(){this.session?.free(),this.graph?.free()}async optimizeAndCleanup(){let e=this.ctx,t=this.graph;e.processed=this.solved,e.events.progress({phase:"optimizing",fraction:0,frames:this.solved,time:0,message:R("progress.optimizing")});let i;try{i=await t.optimize(async()=>{if(await e.checkpoint(),e.stopRequested)throw new di})}catch(n){if(!(n instanceof di))throw n;e.honourStop(),i={residual:0,iterations:0}}i.residual>1&&await e.diagnostics.emit({code:"GRAPH_RESIDUAL",severity:"warning",message:R("diag.GRAPH_RESIDUAL.message",{residual:i.residual.toFixed(2)}),detail:i,action:R("diag.GRAPH_RESIDUAL.action")}),await e.store.put("graph-summary",{loops:t.loops,...i}),await Ue(e.store,"scan-features/"),await Ue(e.store,"keyframe/"),await e.diagnostics.flush(),await e.persist()}};async function ah(r){let e=new Wa(r);try{await e.setup(),await e.runLoop(),await e.trailingCommitAndMismatch(),await e.drainVoting(),await e.optimizeAndCleanup()}finally{e.free()}}var Hn=class{ctx;constructor(e,t,i,n){this.ctx=new Ln(e,t,i,n)}get project(){return this.ctx.project}get store(){return this.ctx.store}get diagnostics(){return this.ctx.diagnostics}get tiles(){return this.ctx.tiles}get factor(){return this.ctx.factor}get refineRadius(){return this.ctx.refineRadius}get noise(){return this.ctx.noise}get paused(){return this.ctx.paused}get stopRequested(){return this.ctx.stopRequested}set stopRequested(e){this.ctx.stopRequested=e}get events(){return this.ctx.events}stop(){this.ctx.stop()}setPaused(e){this.ctx.setPaused(e)}async run(){let e=this.ctx;try{await e.persist(),await this.emitStartupDiagnostics(),await this.runStages()}catch(t){await this.handleFailure(t)}finally{this.releaseRunState()}return e.project}async emitStartupDiagnostics(){let e=this.ctx;await e.diagnostics.emit({code:"MODEL_ASSUMPTIONS",severity:"info",message:R("diag.MODEL_ASSUMPTIONS.message",{noise:e.noise,margin:e.noise?R("diag.MODEL_ASSUMPTIONS.marginLossy"):R("diag.MODEL_ASSUMPTIONS.marginLossless")}),action:R("diag.MODEL_ASSUMPTIONS.action"),detail:{noise:e.noise,lossless:e.noise===0,source:e.source.info.mode,codec:e.source.info.codec}}),e.project.settings.decoder==="compatibility"&&await e.diagnostics.emit({code:"APPROXIMATE_DECODER",severity:"warning",message:R("diag.APPROXIMATE_DECODER.message",{fps:e.project.settings.compatibilityFPS}),action:R("diag.APPROXIMATE_DECODER.action")}),(e.source.info.width>e.project.settings.analysisSize||e.source.info.height>e.project.settings.analysisSize)&&await e.diagnostics.emit({code:"ANALYSIS_PYRAMID",severity:"info",message:R("diag.ANALYSIS_PYRAMID.message",{size:e.project.settings.analysisSize})});for(let t of e.source.info.warnings)await e.diagnostics.emit({code:"MEDIA_NOTICE",severity:"warning",message:t});e.source.info.width*e.source.info.height*4*4>e.project.settings.memoryMB*1024*1024*.8&&await e.diagnostics.emit({code:"FRAME_MEMORY_PRESSURE",severity:"warning",message:R("diag.FRAME_MEMORY_PRESSURE.message"),action:R("diag.FRAME_MEMORY_PRESSURE.action")})}async runStages(){let e=this.ctx,t=performance.now();if(await Zd(e),e.timings.scanMS=performance.now()-t,e.recordSource("scan"),!e.project.frames)throw new Error("No observations could be decoded. Nothing has been marked as reconstructed.");t=performance.now(),await ah(e),e.timings.solveMS=performance.now()-t,e.recordSource("solve"),t=performance.now(),await eh(e),e.timings.renderMS=performance.now()-t,e.recordSource("render"),await ih(e),t=performance.now(),await jd(e),e.timings.framingMS=performance.now()-t,t=performance.now(),e.phase="pyramid",e.project.status="pyramid",await e.persist(),await Kd(e),e.stopRequested&&(e.partial=!0,e.stopRequested=!1),e.timings.pyramidMS=performance.now()-t,await e.store.put("performance",{...e.timings,exactDuplicateFrames:e.duplicates,skippedPaints:e.skippedPaints,tileEncodes:e.tiles.encodedTiles,tileDecodes:e.tiles.decodedTiles,tileEvictions:e.tiles.evictions,compute:e.computer.stats,consistencyVotedLayers:e.consistencyVotedLayers,consistencyThinLayers:e.consistencyThinLayers,note:"Stage timings include decoding, storage and yields; not GPU-only kernel time."}),e.project.status=e.partial?"partial":"complete",await e.diagnostics.flush(),await e.persist(),e.events.progress({phase:e.project.status,fraction:1,frames:e.project.renderedFrames,time:e.source.info.duration,message:e.partial?R("progress.runPartial"):R("progress.runComplete")})}async handleFailure(e){let t=this.ctx;t.project.status=t.project.renderedFrames?"partial":"error",t.project.error=e instanceof Error?e.message:String(e);try{let i=e instanceof Ne?"PERSISTENCE_ERROR":"PROCESSING_ERROR";await t.diagnostics.emit({code:i,severity:"error",message:t.project.error,action:R("diag.RUN_FAILURE.action")}),await t.tiles.flush(),await t.diagnostics.flush(),await t.persist()}catch(i){t.events.diagnostic({code:"PERSISTENCE_ERROR",severity:"error",message:String(i),action:R("diag.PERSISTENCE_ERROR.action")})}}releaseRunState(){let e=this.ctx;e.scan?.free(),e.scan=void 0,e.atlas?.dispose(),e.atlas=void 0,e.tiles.free(),e.computer.dispose(),e.source.dispose(),e.stopped=!1}};var Tr=class r{width;height;data;patches;constructor(e,t,i=[251,250,246]){this.width=e,this.height=t,this.patches=[],this.data=new Uint8ClampedArray(e*t*4);for(let n=0;n<this.data.length;n+=4)this.data[n]=i[0],this.data[n+1]=i[1],this.data[n+2]=i[2],this.data[n+3]=255}set(e,t,i){if(e<0||t<0||e>=this.width||t>=this.height)return;let n=(t*this.width+e)*4;this.data[n]=i[0],this.data[n+1]=i[1],this.data[n+2]=i[2]}fill(e,t){for(let i=Math.max(0,e.y);i<Math.min(this.height,e.y+e.height);i++)for(let n=Math.max(0,e.x);n<Math.min(this.width,e.x+e.width);n++)this.set(n,i,t)}stroke(e,t){this.fill({x:e.x,y:e.y,width:e.width,height:1},t),this.fill({x:e.x,y:e.y+e.height-1,width:e.width,height:1},t),this.fill({x:e.x,y:e.y,width:1,height:e.height},t),this.fill({x:e.x+e.width-1,y:e.y,width:1,height:e.height},t)}picture(e,t){let i=mt(t),n=[90+i()*120,90+i()*120,90+i()*120],s=18+i()*40;for(let a=0;a<e.height;a++)for(let o=0;o<e.width;o++){let c=o/Math.max(1,e.width),l=a/Math.max(1,e.height),h=(i()-.5)*s;this.set(e.x+o,e.y+a,[n[0]+60*c+h,n[1]+50*l+h,n[2]-40*c*l+h].map(d=>Math.max(0,Math.min(255,d))))}for(let a=0;a<6;a++){let o=6+Math.floor(i()*Math.max(6,e.width/5)),c=6+Math.floor(i()*Math.max(6,e.height/5));this.fill({x:e.x+Math.floor(i()*Math.max(1,e.width-o)),y:e.y+Math.floor(i()*Math.max(1,e.height-c)),width:o,height:c},[i()*255,i()*255,i()*255])}}textLine(e,t,i,n,s=[48,50,46],a=1){let o=mt(n),c=e,l=Math.round(12*a);for(;c<e+i;){let h=2+Math.floor(o()*8);for(let d=0;d<h&&c<e+i;d++){let u=Math.round((3+Math.floor(o()*4))*a),f=o()<.3?Math.round(3*a):0,p=o()<.15?Math.round(3*a):0,g=Math.round(6*a)+f,y=[s[0]+o()*30,s[1]+o()*30,s[2]+o()*30];this.fill({x:c,y:t+l-Math.round(3*a)-g,width:u,height:g+p},y),o()<.5&&this.fill({x:c+1,y:t+l-Math.round(5*a),width:Math.max(1,u-2),height:Math.max(1,Math.round(2*a))},[250,250,246]),c+=u+Math.round(a)}c+=Math.round(4*a)}return l+Math.round(6*a)}paragraph(e,t,i,n,s,a=1){let o=t;for(let c=0;c<n;c++)o+=this.textLine(e,o,c===n-1?i*(.4+s%5*.1):i,s*31+c,[48,50,46],a);return o-t}barChart(e,t){let i=mt(t),n=Math.max(2,Math.floor(e.width/14));this.fill(e,[255,255,255]),this.stroke(e,[200,205,195]);for(let s=0;s<n;s++){let a=Math.floor(6+i()*(e.height-12));this.fill({x:e.x+6+s*14,y:e.y+e.height-6-a,width:9,height:a},s%3?[203,211,197]:[214,136,112])}}patch(e,t,i){let n=new r(t.width,t.height);for(let s=0;s<t.height;s++)n.data.set(this.data.subarray(((t.y+s)*this.width+t.x)*4,((t.y+s)*this.width+t.x+t.width)*4),s*t.width*4);i(n),this.patches.push({atFrame:e,rect:t,pixels:n.data})}at(e){let t=this.patches.filter(n=>n.atFrame<=e);if(!t.length)return this.data;let i=this.data.slice();for(let n of t)for(let s=0;s<n.rect.height;s++)i.set(n.pixels.subarray(s*n.rect.width*4,(s+1)*n.rect.width*4),((n.rect.y+s)*this.width+n.rect.x)*4);return i}versions(e,t){let i=[this.rgb(this.data,e,t)];for(let n of this.patches)if(e>=n.rect.x&&t>=n.rect.y&&e<n.rect.x+n.rect.width&&t<n.rect.y+n.rect.height){let s=((t-n.rect.y)*n.rect.width+e-n.rect.x)*4;i.push([n.pixels[s],n.pixels[s+1],n.pixels[s+2]])}return i}rgb(e,t,i){let n=(i*this.width+t)*4;return[e[n],e[n+1],e[n+2]]}};function ie(r,e,t,i="article",n=1){let s=new Tr(r,e),a=mt(t),o=Math.floor(r/n);for(let c=0;c<n;c++){let l=c*o+20,h=o-40,d=24;if(i==="list"){let u=Math.floor(a()*1e6);for(let f=0;d+44<e-200;f++)s.fill({x:l,y:d,width:h,height:40},[255,255,255]),s.stroke({x:l,y:d,width:h,height:40},[214,217,210]),s.fill({x:l+8,y:d+8,width:24,height:24},[110,140,120]),s.textLine(l+42,d+8,h-60,u),s.textLine(l+42,d+22,h*.5,u+1,[140,142,136],.8),d+=44;s.paragraph(l,d+12,h,6,t+77);continue}for(;d<e-40;){let u=a();if(i==="sparse"&&u<.5){d+=120+Math.floor(a()*240);continue}if(i==="comic"){let f=160+Math.floor(a()*220);s.picture({x:l,y:d,width:h,height:Math.min(f,e-d-8)},Math.floor(a()*1e9)),d+=f+12;continue}if(i==="cards"){s.fill({x:l,y:d,width:h,height:150},[255,255,255]),s.stroke({x:l,y:d,width:h,height:150},[230,229,223]),s.fill({x:l+14,y:d+16,width:6,height:18},[[207,103,80],[111,135,116],[102,133,154],[165,130,86]][Math.floor(a()*4)]),s.textLine(l+30,d+14,h-60,Math.floor(a()*1e6),[48,52,47],1.3),s.paragraph(l+14,d+44,h-28,3,Math.floor(a()*1e6),.9),s.barChart({x:l+14,y:d+100,width:Math.min(220,h-28),height:40},Math.floor(a()*1e6)),d+=168;continue}if(u<.15)s.textLine(l,d,h*.7,Math.floor(a()*1e6),[30,34,30],1.8),d+=36;else if(u<.35){let f=90+Math.floor(a()*120);s.picture({x:l,y:d,width:Math.min(h,260+Math.floor(a()*(h-260))),height:Math.min(f,e-d-8)},Math.floor(a()*1e9)),d+=f+14}else u<.42?(s.fill({x:l,y:d+6,width:h,height:1},[205,205,198]),d+=20):d+=s.paragraph(l,d,h,2+Math.floor(a()*5),Math.floor(a()*1e6))+10}}return s}function Vp(r,e,t,i,n,s){for(let a=0;a<s.height;a++){let o=t+a;if(o<0||o>=r.height)continue;let c=s.y+a;if(c<0||c>=i.length/(n*4))continue;let l=Math.max(0,-e),h=Math.min(s.width,r.width-e);h<=l||r.data.set(i.subarray((c*n+s.x+l)*4,(c*n+s.x+h)*4),(o*r.width+e+l)*4)}}function Ze(r,e,t){for(let i=Math.max(0,e.y);i<Math.min(r.height,e.y+e.height);i++)for(let n=Math.max(0,e.x);n<Math.min(r.width,e.x+e.width);n++){let s=(i*r.width+n)*4;r.data[s]=t[0],r.data[s+1]=t[1],r.data[s+2]=t[2],r.data[s+3]=255}}function oh(r,e){let t=r.frames[e],i=t.width??r.width,n=t.height??r.height,s={width:i,height:n,data:new Uint8ClampedArray(i*n*4)};Ze(s,{x:0,y:0,width:i,height:n},r.background);let a={};for(let l of r.layers){let h=l.path[e],d=l.zoom?.[e]??1,u=l.viewport,f=l.world.at(e);a[l.id]=[];for(let p of l.dynamics||[]){if(p.every&&e%p.every)continue;f===l.world.data&&(f=f.slice());let g=new Tr(p.rect.width,p.rect.height);for(let y=0;y<p.rect.height;y++)g.data.set(f.subarray(((p.rect.y+y)*l.world.width+p.rect.x)*4,((p.rect.y+y)*l.world.width+p.rect.x+p.rect.width)*4),y*p.rect.width*4);p.draw(g,e,t.time);for(let y=0;y<p.rect.height;y++)f.set(g.data.subarray(y*p.rect.width*4,(y+1)*p.rect.width*4),((p.rect.y+y)*l.world.width+p.rect.x)*4);a[l.id].push(p.rect)}if(d===1)Vp(s,u.x,u.y,f,l.world.width,{x:h.x,y:h.y,width:u.width,height:u.height});else for(let p=0;p<u.height;p++)for(let g=0;g<u.width;g++){let y=h.x+g/d,w=h.y+p/d,m=Math.floor(y),b=Math.floor(w),A=y-m,T=w-b,S=((u.y+p)*i+u.x+g)*4;if(!(m<0||b<0||m+1>=l.world.width||b+1>=l.world.height)){for(let x=0;x<3;x++){let k=(b*l.world.width+m)*4+x,E=k+l.world.width*4;s.data[S+x]=(f[k]*(1-A)+f[k+4]*A)*(1-T)+(f[E]*(1-A)+f[E+4]*A)*T}s.data[S+3]=255}}}let o=s.data.slice(),c=[];for(let l of r.overlays)c.push(...l.draw(s,e,t.time));return{image:s,beneath:o,overlayRects:c,dynamicRects:a}}function de(r,e){let t=[];for(let i=1;i<r.length;i++){let n=r[i-1],s=r[i],a=Array.isArray(e)?e[i-1]:e;for(let o=0;o<a;o++)t.push({x:Math.round(n.x+(s.x-n.x)*o/a),y:Math.round(n.y+(s.y-n.y)*o/a)})}return t.push(r[r.length-1]),t}var ch=(r,e=30,t=0)=>Array.from({length:r},(i,n)=>({time:t+n/e,duration:1/e}));var ce=(r={})=>({fragments:{},diagnostics:{present:[],absent:["PROCESSING_ERROR","NONFINITE_POSE"]},maxError:0,status:"complete",...r});function ne(r,e,t,i=[38,59,51]){let n=new Tr(e.width,e.height,i);n.textLine(18,Math.max(4,Math.round(e.height/2)-9),Math.min(220,e.width-60),t,[250,249,242],1.2);for(let s=0;s<4;s++)n.fill({x:e.width-40-s*28,y:Math.round(e.height/2)-6,width:12,height:12},[[214,136,112],[203,211,197],[250,249,242],[120,160,140]][s]);return{id:r,kind:"fixed",draw:s=>{for(let a=0;a<e.height;a++)s.data.set(n.data.subarray(a*e.width*4,(a+1)*e.width*4),((e.y+a)*s.width+e.x)*4);return[e]}}}function lh(r){return{id:"fab",kind:"fixed",draw:e=>(Ze(e,r,[207,103,80]),Ze(e,{x:r.x+10,y:r.y+r.height/2-2,width:r.width-20,height:4},[255,255,255]),Ze(e,{x:r.x+r.width/2-2,y:r.y+10,width:4,height:r.height-20},[255,255,255]),[r])}}function dh(r){return{id:"cursor",kind:"dynamic",draw:(e,t)=>{let i=r(t),n={x:i.x,y:i.y,width:10,height:16};for(let s=0;s<16;s++)Ze(e,{x:i.x,y:i.y+s,width:Math.max(1,Math.min(10,Math.round(s*.7))),height:1},s%3?[20,20,20]:[255,255,255]);return[n]}}}function Hp(r,e,t){return{id:"toast",kind:"dynamic",draw:(i,n)=>n<e||n>=t?[]:(Ze(i,r,[40,40,44]),Ze(i,{x:r.x+12,y:r.y+r.height/2-3,width:r.width-24,height:6},[230,230,220]),[r])}}function Wp(r,e="right"){return{id:"scrollbar",kind:"dynamic",draw:(t,i)=>{let n=r(),s=n.viewport,a=n.path[i].y/Math.max(1,n.world.height-s.height),o=Math.max(24,Math.round(s.height*s.height/n.world.height)),c={x:e==="right"?s.x+s.width-8:s.x+2,y:s.y+Math.round(a*(s.height-o)),width:6,height:o};return Ze(t,c,[150,150,150]),[c]}}}function Gp(r,e=8){return{rect:r,draw:(t,i)=>{Math.floor(i/e)%2===0&&t.fill({x:0,y:0,width:r.width,height:r.height},[20,20,20])}}}function $p(r,e=10){return{rect:r,draw:(t,i)=>{t.fill({x:0,y:0,width:r.width,height:r.height},[255,255,255]);let n=Math.floor(i/e);for(let s=0;s<5;s++){let a=Math.floor(n/10**s)%10;t.fill({x:r.width-14-s*14,y:4,width:10,height:r.height-8},[30+a*20,60,90+a*10]),t.fill({x:r.width-12-s*14,y:6+a,width:6,height:3},[255,255,255])}}}}function qp(r){return{rect:r,draw:(e,t,i)=>{e.fill({x:0,y:0,width:r.width,height:r.height},[31,57,66]);let n=Math.round(r.width/2+Math.sin(i*6)*(r.width/2-20));e.fill({x:n-12,y:r.height/2-12,width:24,height:24},[230,191,101])}}}function jp(r,e){return{rect:r,draw:(t,i)=>t.picture({x:0,y:0,width:r.width,height:r.height},e+i*7919)}}function hh(r,e,t=1,i=3){let n=mt(e);return r.map((s,a)=>a%i===1?{x:s.x+Math.round((n()-.5)*2*t),y:s.y+Math.round((n()-.5)*2*t)}:s)}var uh=["traversal","vertical","horizontal","diagonal","fling","revisit","panes","gap","dynamic","lazy-load","zoom","blank","repeated-list","repeated-list-reversal","comic","phone","vfr","retina","factor4","geometry-change","toolbar-collapse","chrome-everything","glimpse"];function fh(r){let n={x:0,y:48,width:640,height:400},s=(o,c=30)=>ch(o,c),a=(o,c,l={})=>({id:"body",viewport:n,world:o,path:c,...l});switch(r){case"traversal":{let o=ie(1400,2200,11,"cards",3),c=de([{x:0,y:0},{x:0,y:350},{x:210,y:560},{x:370,y:240},{x:140,y:160},{x:0,y:0},{x:0,y:350},{x:280,y:540}],[13,11,13,9,8,13,13]);return c.splice(24,0,c[24],c[24],c[24],c[24],c[24]),{name:r,description:"\u4E8C\u7EF4\u975E\u5355\u8C03\u79FB\u52A8\u3001\u6682\u505C\u3001\u56DE\u8BBF\uFF0C\u56FA\u5B9A\u9876\u90E8\u680F\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},5)],frames:s(c.length),expect:ce({fragments:{body:0,header:0},diagnostics:{present:["AUTOMATIC_LAYER_MASK"],absent:["UNPLACED_FRAGMENT","SCALE_CHANGE_FRAGMENT","PROCESSING_ERROR","NONFINITE_POSE"]}})}}case"vertical":{let o=ie(900,3200,21,"article"),c=de([{x:0,y:0},{x:0,y:900},{x:0,y:700},{x:0,y:1900},{x:0,y:2600}],[30,6,20,14]);return c.splice(12,0,c[12],c[12],c[12]),c=hh(c,3,1,4),{name:r,description:"\u7EB5\u5411\u6EDA\u52A8\uFF1A\u975E\u6052\u5B9A\u901F\u5EA6\u3001\u6682\u505C\u3001\u624B\u6296\u3001\u65B9\u5411\u53CD\u8F6C\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},6)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"horizontal":{let o=ie(3e3,600,31,"cards",6),c=de([{x:0,y:40},{x:1200,y:40},{x:900,y:40},{x:2300,y:40}],[28,6,24]);return{name:r,description:"\u6A2A\u5411\u79FB\u52A8\u4E0E\u56DE\u9000\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},7)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"diagonal":{let o=ie(1600,1600,41,"article",2),c=de([{x:0,y:0},{x:700,y:900},{x:900,y:300},{x:200,y:1e3}],[26,14,22]);return{name:r,description:"\u659C\u5411\u4E0E\u5947\u6570\u4F4D\u79FB\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},8)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"fling":{let o=ie(900,4e3,51,"article"),c=[{x:0,y:0}],l=[40,90,160,230,230,200,140,70,20,5,0,0,-30,-120,-220,-220,-160,-60,0,0,250,250,250,250,180,90,30,0];for(let h of l)c.push({x:0,y:Math.max(0,c[c.length-1].y+h)});return{name:r,description:"\u9AD8\u901F fling\u3001\u52A0\u51CF\u901F\u3001\u65B9\u5411\u53CD\u8F6C\uFF1B\u90E8\u5206\u5185\u5BB9\u53EA\u51FA\u73B0 1\u20132 \u5E27\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},9)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"revisit":{let o=ie(900,2600,61,"article"),c=de([{x:0,y:0},{x:0,y:1500},{x:0,y:0},{x:0,y:1500}],[30,30,30]);return{name:r,description:"\u540C\u4E00\u533A\u57DF\u53CD\u590D\u7ECF\u8FC7\u4E09\u6B21\uFF1B\u5185\u5BB9\u53EA\u80FD\u51FA\u73B0\u4E00\u6B21\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},10)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"panes":{let o=ie(318,2400,71,"cards"),c=ie(318,2600,72,"article"),l=75,h=[],d=[];for(let f=0;f<l;f++)h.push({x:0,y:f<35?f*8:280-(f-35)*5}),d.push({x:0,y:f<20?0:(f-20)*7});let u={id:"divider",kind:"fixed",draw:f=>{let p={x:318,y:48,width:4,height:400};return Ze(f,p,[57,67,55]),[p]}};return{name:r,description:"\u4E24\u4E2A\u72EC\u7ACB\u6EDA\u52A8\u7684 pane\uFF0C\u5404\u81EA\u7684\u4F4D\u79FB\u8F68\u8FF9\u3002",width:640,height:448,background:[251,250,246],layers:[{id:"left",viewport:{x:0,y:48,width:318,height:400},world:o,path:h},{id:"right",viewport:{x:322,y:48,width:318,height:400},world:c,path:d}],overlays:[ne("header",{x:0,y:0,width:640,height:48},11),u],frames:s(l),expect:ce({fragments:{left:0,right:0},diagnostics:{present:["MULTIPLE_SCROLL_LAYERS"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"gap":{let o=ie(1400,4600,81,"cards",3),c=de([{x:0,y:0},{x:0,y:350},{x:210,y:560},{x:370,y:240},{x:140,y:160},{x:0,y:0},{x:0,y:350},{x:280,y:540}],[13,11,13,9,8,13,13]);return c.splice(25,0,{x:0,y:4100},{x:0,y:4118}),{name:r,description:"\u65E0\u91CD\u53E0\u8DF3\u8F6C\u540E\u8FD4\u56DE\uFF1A\u8DF3\u8F6C\u89C2\u5BDF\u4FDD\u7559\u4E3A\u72EC\u7ACB\u7247\u6BB5\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},12)],frames:s(c.length),expect:ce({fragments:{body:1},diagnostics:{present:["UNPLACED_FRAGMENT"],absent:["PROCESSING_ERROR"]}})}}case"dynamic":{let o=ie(1400,2200,91,"cards",3),c=de([{x:0,y:0},{x:0,y:350},{x:210,y:560},{x:370,y:240},{x:140,y:160},{x:0,y:0},{x:0,y:350},{x:280,y:540}],[13,11,13,9,8,13,13]);return{name:r,description:"\u9875\u9762\u5185\u52A8\u753B\u7EC4\u4EF6 + \u9F20\u6807\u6307\u9488\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c,{dynamics:[qp({x:200,y:260,width:150,height:70})]})],overlays:[ne("header",{x:0,y:0,width:640,height:48},13),dh(l=>({x:320+Math.round(Math.sin(l/5)*200),y:240+Math.round(Math.cos(l/7)*150)}))],frames:s(c.length),expect:ce({fragments:{body:0},maxContaminatedDynamic:10801,diagnostics:{present:["TEMPORAL_OR_ALIGNMENT_CONFLICT"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"lazy-load":{let o=ie(900,2e3,101,"article");o.fill({x:40,y:700,width:500,height:200},[236,236,230]),o.patch(30,{x:40,y:700,width:500,height:200},l=>l.picture({x:0,y:0,width:500,height:200},4242));let c=de([{x:0,y:300},{x:0,y:900},{x:0,y:300},{x:0,y:1e3}],[22,22,22]);return{name:r,description:"\u61D2\u52A0\u8F7D\u56FE\u7247\u5728\u5F55\u5236\u4E2D\u9014\u51FA\u73B0\uFF1A\u540C\u4E00\u533A\u57DF\u5B58\u5728\u4E24\u4E2A\u7248\u672C\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},14)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:["TEMPORAL_OR_ALIGNMENT_CONFLICT"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"zoom":{let o=ie(1400,1600,111,"cards",3),c=de([{x:0,y:0},{x:0,y:500},{x:120,y:620},{x:120,y:900}],[20,8,16]),l=c.map((h,d)=>d<28?1:1.25);return{name:r,description:"\u5F55\u5236\u4E2D\u9014 pinch zoom\uFF1A\u6BD4\u4F8B\u53D8\u5316\u540E\u7684\u89C2\u5BDF\u6210\u4E3A\u72EC\u7ACB\u7247\u6BB5\uFF0C\u4E0D\u88AB\u7F29\u653E\u6DF7\u5408\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c,{zoom:l})],overlays:[ne("header",{x:0,y:0,width:640,height:48},15)],frames:s(c.length),expect:ce({fragments:{body:1},diagnostics:{present:["SCALE_CHANGE_FRAGMENT"],absent:["PROCESSING_ERROR"]}})}}case"blank":{let o=ie(900,2600,121,"article");o.fill({x:0,y:700,width:900,height:900},[251,250,246]);let c=de([{x:0,y:200},{x:0,y:1400},{x:0,y:2e3}],[30,15]);return{name:r,description:"\u5927\u9762\u79EF\u7EAF\u8272\uFF1A\u5B8C\u5168\u7A7A\u767D\u7684\u5E27\u65E0\u6CD5\u5224\u65AD\u8FD0\u52A8\uFF0C\u53EA\u80FD best guess \u5E76\u7ED9\u51FA\u8B66\u544A\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},16)],frames:s(c.length),expect:ce({fragments:{body:1},diagnostics:{present:["UNOBSERVABLE_FRAME","UNPLACED_FRAGMENT"],absent:["PROCESSING_ERROR"]}})}}case"repeated-list":{let o=ie(900,2800,131,"list"),c=de([{x:0,y:0},{x:0,y:1200},{x:0,y:2300}],[80,44]);return{name:r,description:"\u9AD8\u5EA6\u91CD\u590D\u7684\u76F8\u540C\u5217\u8868\u884C\uFF0C\u5355\u5411\u6EDA\u52A8\uFF1A\u6BCF\u6B65\u90FD\u5C0F\u4E8E\u884C\u9AD8\u7684\u4E00\u534A\u6216\u4E0E\u901F\u5EA6\u8FDE\u7EED\uFF0C\u4F4D\u7F6E\u53EF\u7531\u8FDE\u7EED\u6027\u552F\u4E00\u786E\u5B9A\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},17)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:["LOW_CONFIDENCE_PLACEMENT"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"repeated-list-reversal":{let o=ie(900,2800,131,"list"),c=de([{x:0,y:0},{x:0,y:1500},{x:0,y:1200},{x:0,y:2300}],[100,20,44]);return{name:r,description:"\u76F8\u540C\u5217\u8868\u884C\u4E2D\u9014\u53CD\u5411\uFF1A\u5411\u4E0A 15px \u4E0E\u5411\u4E0B 29px\uFF08\u884C\u9AD8 44\uFF09\u50CF\u7D20\u4E0A\u65E0\u6CD5\u533A\u5206\uFF0C\u53EA\u80FD best guess \u5E76\u660E\u786E\u8B66\u544A\uFF1B\u8BEF\u5DEE\u53EA\u4F1A\u662F\u884C\u9AD8\u7684\u6574\u6570\u500D\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},17)],frames:s(c.length),expect:ce({fragments:{body:0},maxError:1/0,ambiguousPeriod:44,maxInvented:591400,maxMismatched:76700,diagnostics:{present:["LOW_CONFIDENCE_PLACEMENT","AMBIGUOUS_PATTERN"],absent:["PROCESSING_ERROR"]}})}}case"comic":{let o=ie(700,5200,141,"comic"),c=de([{x:0,y:0},{x:0,y:4700}],[46]);return{name:r,description:"\u957F\u6761\u6F2B\u753B\uFF1A\u5927\u5E45\u56FE\u7247\u3001\u5FEB\u901F\u7EB5\u5411\u6EDA\u52A8\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},18)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"phone":{let d=ie(390,3600,151,"cards"),u=de([{x:0,y:0},{x:0,y:1400},{x:0,y:1100},{x:0,y:2600}],[30,8,26]);u=hh(u,5,2,3);let f={id:"body",viewport:{x:0,y:44,width:390,height:736},world:d,path:u};return{name:r,description:"\u624B\u673A\u7AD6\u5C4F\uFF1A\u72B6\u6001\u680F\u3001\u5E95\u90E8\u5BFC\u822A\u3001\u60AC\u6D6E\u6309\u94AE\u3001\u6EDA\u52A8\u6761\u3001\u624B\u6296\u3002",width:390,height:844,background:[251,250,246],layers:[f],overlays:[ne("status",{x:0,y:0,width:390,height:44},19,[20,20,24]),ne("nav",{x:0,y:780,width:390,height:64},20,[245,245,240]),lh({x:314,y:700,width:56,height:56}),Wp(()=>f)],frames:s(u.length),expect:ce({fragments:{body:0},maxContaminatedOverlay:2904,maxContaminatedOverlayUnobservable:1517,maxContaminatedOverlayRecoverable:1311,maxProvisional:1832,diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"vfr":{let o=ie(900,2400,161,"article"),c=de([{x:0,y:0},{x:0,y:1500}],[40]),l=mt(9),h=[],d=0;for(let u=0;u<c.length;u++){let f=u===0?.5:l()<.2?.2:.016666666666666666+l()*.02;h.push({time:d,duration:f}),d+=f}for(let u of[10,11,25])c[u]=c[u-1];return{name:r,description:"\u53EF\u53D8\u5E27\u7387\u3001\u8D85\u957F\u9996\u5E27\u3001\u91CD\u590D\u5E27\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},21)],frames:h,expect:ce({fragments:{body:0},diagnostics:{present:["TEMPORAL_UNDERSAMPLING"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"retina":{let h=ie(2e3,2600,171,"cards",3),d=de([{x:0,y:0},{x:0,y:700},{x:300,y:1100},{x:500,y:400},{x:0,y:0}],[14,10,12,12]);return{name:r,description:"2\xD7 \u9AD8\u5206\u8FA8\u7387\u5F55\u5C4F\uFF1A\u5206\u6790\u5728 1/2 \u5C3A\u5EA6\u8FDB\u884C\uFF0C\u8F93\u51FA\u4FDD\u6301\u539F\u50CF\u7D20\u3002",width:1280,height:896,background:[251,250,246],layers:[{id:"body",viewport:{x:0,y:96,width:1280,height:800},world:h,path:d}],overlays:[ne("header",{x:0,y:0,width:1280,height:96},22)],frames:s(d.length),expect:ce({fragments:{body:0},factor:2,diagnostics:{present:["ANALYSIS_PYRAMID"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"factor4":{let h=ie(2400,2600,181,"cards",4),d=de([{x:0,y:0},{x:200,y:900},{x:400,y:300}],[14,12]);return{name:r,description:"\u684C\u9762\u6A2A\u5C4F 1080p\uFF1B\u4EE5 analysisSize 480 \u8FD0\u884C\u65F6\u5206\u6790\u56E0\u5B50\u4E3A 4\uFF08\u9ED8\u8BA4 640 \u4E0B\u4E3A 3\uFF09\u3002",width:1920,height:1080,background:[251,250,246],layers:[{id:"body",viewport:{x:0,y:80,width:1920,height:1e3},world:h,path:d}],overlays:[ne("header",{x:0,y:0,width:1920,height:80},23)],frames:s(d.length),expect:ce({fragments:{body:0},factor:4,diagnostics:{present:["ANALYSIS_PYRAMID"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}}),settings:{analysisSize:480}}}case"geometry-change":{let o=ie(900,2e3,191,"article"),c=de([{x:0,y:0},{x:0,y:900}],[40]),l=s(c.length).map((h,d)=>d>=20?{...h,width:448,height:640}:h);return{name:r,description:"\u5F55\u5236\u4E2D\u9014\u65B9\u5411/\u5C3A\u5BF8\u6539\u53D8\uFF1A\u4FDD\u7559\u524D\u7F00\uFF0C\u660E\u786E\u62A5\u544A\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},24)],frames:l,expect:ce({fragments:{body:0},status:"partial",frames:20,diagnostics:{present:["DECODE_PREFIX_ONLY"],absent:["NONFINITE_POSE"]}})}}case"toolbar-collapse":{let o=ie(900,2400,201,"article"),c=de([{x:0,y:0},{x:0,y:1400}],[50]),l=ne("header",{x:0,y:0,width:640,height:96},25),h=ne("header",{x:0,y:0,width:640,height:48},25);return{name:r,description:"\u5730\u5740\u680F\u6536\u8D77\uFF1A\u6B63\u6587\u53EF\u89C6\u533A\u5728\u5F55\u5236\u4E2D\u9014\u53D8\u5927\u3002\u5DF2\u77E5\u5C40\u9650\uFF0C\u53EA\u8981\u6C42\u4E0D\u5D29\u6E83\u3001\u4E0D\u4F2A\u9020\u3002",width:640,height:448,background:[251,250,246],layers:[{id:"body",viewport:{x:0,y:96,width:640,height:352},world:o,path:c}],overlays:[{id:"header",kind:"dynamic",draw:(p,g,y)=>g<30?l.draw(p,g,y):h.draw(p,g,y)},{id:"collapse",kind:"dynamic",draw:(p,g)=>{if(g<30)return[];let y={x:0,y:48,width:640,height:48},w=c[g];for(let m=0;m<y.height;m++)p.data.set(o.data.subarray(((w.y-y.height+m)*o.width+w.x)*4,((w.y-y.height+m)*o.width+w.x+640)*4),(y.y+m)*p.width*4);return[y]}}],frames:s(c.length),expect:ce({fragments:{body:-1},limitation:!0,maxInvented:50800,maxProvisional:42759,diagnostics:{present:["TEMPORAL_OR_ALIGNMENT_CONFLICT"],absent:["PROCESSING_ERROR","NONFINITE_POSE"]}})}}case"chrome-everything":{let o=ie(900,2600,211,"article"),c=de([{x:0,y:0},{x:0,y:1200},{x:0,y:900},{x:0,y:1900}],[24,8,20]);return{name:r,description:"\u56FA\u5B9A\u680F\u3001\u60AC\u6D6E\u6309\u94AE\u3001toast\u3001\u95EA\u70C1\u5149\u6807\u3001\u5B9E\u65F6\u8BA1\u6570\u5668\u3001\u64AD\u653E\u4E2D\u7684\u89C6\u9891\u540C\u65F6\u5B58\u5728\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c,{dynamics:[Gp({x:60,y:130,width:2,height:14}),$p({x:700,y:400,width:120,height:28}),jp({x:100,y:1500,width:320,height:180},77)]})],overlays:[ne("header",{x:0,y:0,width:640,height:48},26),lh({x:568,y:376,width:52,height:52}),Hp({x:160,y:358,width:320,height:40},18,34),dh(l=>({x:400+Math.round(Math.sin(l/4)*120),y:300+Math.round(Math.cos(l/6)*90)}))],frames:s(c.length),expect:ce({fragments:{body:0},maxContaminatedOverlay:2064,maxContaminatedOverlayUnobservable:1664,maxContaminatedOverlayRecoverable:317,maxContaminatedDynamic:60436,maxProvisional:33759,diagnostics:{present:["TEMPORAL_OR_ALIGNMENT_CONFLICT"],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"glimpse":{let o=ie(900,3e3,221,"cards"),c=[];for(let l=0;l<12;l++)c.push({x:0,y:l*20});c.push({x:0,y:520},{x:0,y:820},{x:0,y:1100},{x:0,y:1360},{x:0,y:1600},{x:0,y:1820},{x:0,y:2020},{x:0,y:2180},{x:0,y:2300});for(let l=0;l<10;l++)c.push({x:0,y:2300+l*15});return{name:r,description:"\u5FEB\u901F\u626B\u8FC7\uFF1A\u67D0\u4E9B\u5185\u5BB9\u4EC5\u5728\u4E00\u5E27\u53EF\u89C1\uFF0C\u4ECD\u5FC5\u987B\u8FDB\u5165\u7ED3\u679C\u3002",width:640,height:448,background:[251,250,246],layers:[a(o,c)],overlays:[ne("header",{x:0,y:0,width:640,height:48},27)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["UNPLACED_FRAGMENT","PROCESSING_ERROR"]}})}}case"fixture":{let o=ie(900,1300,1337,"cards",3),c=de([{x:0,y:0},{x:0,y:210},{x:100,y:330},{x:20,y:100},{x:0,y:0}],[10,8,10,6]);return c.push({x:0,y:0},{x:0,y:0},{x:1,y:1},{x:0,y:0},{x:0,y:140},{x:0,y:141},{x:0,y:320},{x:120,y:410}),{name:r,description:"\u7F16\u7801\u6D4B\u8BD5\u6837\u672C\uFF1AH.264 / VP9 \u5BB9\u5668\u89E3\u6790\u4E0E\u89E3\u7801\u8DEF\u5F84\u3002",width:320,height:240,background:[251,250,246],layers:[{id:"body",viewport:{x:0,y:32,width:320,height:208},world:o,path:c}],overlays:[ne("header",{x:0,y:0,width:320,height:32},99)],frames:s(c.length),expect:ce({fragments:{body:0},diagnostics:{present:[],absent:["PROCESSING_ERROR"]}})}}default:throw new Error(`Unknown scenario ${r}. Known: ${uh.join(", ")}.`)}}var Wn=class{scenario;info;stopped;constructor(e){this.scenario=e,this.stopped=!1;let t=e.frames[e.frames.length-1];this.info={name:`demo-${e.name}.generated`,size:0,width:e.width,height:e.height,codedWidth:e.width,codedHeight:e.height,rotation:0,duration:t.time+t.duration,frameCount:e.frames.length,codec:"procedural / lossless pixels",mode:"Deterministic test input",noise:0,warnings:["This is synthetic test material, not evidence of accuracy on arbitrary real recordings."],notices:[]}}dispose(){this.stopped=!0}async*frames(){for(let e=0;e<this.scenario.frames.length&&!this.stopped;e++){let t=this.scenario.frames[e];yield{image:oh(this.scenario,e).image,time:t.time,duration:t.duration,index:e},await Promise.resolve()}}};var Gn=class extends Wn{kind;constructor(e="traversal"){super(fh(e)),this.kind=e}get path(){return this.scenario.layers[0].path}};"stream"in Blob.prototype||Object.defineProperty(Blob.prototype,"stream",{value(){return new Response(this).body}}),"setBigUint64"in DataView.prototype||Object.defineProperty(DataView.prototype,"setBigUint64",{value(r,e,t){let i=Number(0xffffffffn&e),n=Number(e>>32n);this.setUint32(r+(t?0:4),i,t),this.setUint32(r+(t?4:0),n,t)}});var vr=r=>new DataView(new ArrayBuffer(r)),ht=r=>new Uint8Array(r.buffer||r),Er=r=>new TextEncoder().encode(String(r)),Vt=r=>Math.min(4294967295,Number(r)),ph=r=>Math.min(65535,Number(r));function Kp(r,e,t){e===void 0||e instanceof Date||(e=new Date(e));let i=r!==void 0;if(t||(t=i?436:509),r instanceof File)return{isFile:i,t:e||new Date(r.lastModified),bytes:r.stream(),mode:t};if(r instanceof Response)return{isFile:i,t:e||new Date(r.headers.get("Last-Modified")||Date.now()),bytes:r.body,mode:t};if(e===void 0)e=new Date;else if(isNaN(e))throw new Error("Invalid modification date.");if(!i)return{isFile:i,t:e,mode:t};if(typeof r=="string")return{isFile:i,t:e,bytes:Er(r),mode:t};if(r instanceof Blob)return{isFile:i,t:e,bytes:r.stream(),mode:t};if(r instanceof Uint8Array||r instanceof ReadableStream)return{isFile:i,t:e,bytes:r,mode:t};if(r instanceof ArrayBuffer||ArrayBuffer.isView(r))return{isFile:i,t:e,bytes:ht(r),mode:t};if(Symbol.asyncIterator in r)return{isFile:i,t:e,bytes:gh(r[Symbol.asyncIterator]()),mode:t};throw new TypeError("Unsupported input format.")}function gh(r,e=r){return new ReadableStream({async pull(t){let i=0;for(;t.desiredSize>i;){let n=await r.next();if(!n.value){t.close();break}{let s=Yp(n.value);t.enqueue(s),i+=s.byteLength}}},async cancel(t){await e.throw?.(t)}})}function Yp(r){return typeof r=="string"?Er(r):r instanceof Uint8Array?r:ht(r)}function Qp(r,e,t){let[i,n]=function(s){return s?s instanceof Uint8Array?[s,1]:ArrayBuffer.isView(s)||s instanceof ArrayBuffer?[ht(s),1]:[Er(s),0]:[void 0,0]}(e);if(r instanceof File)return{i:Ga(i||Er(r.name)),o:BigInt(r.size),u:n};if(r instanceof Response){let s=r.headers.get("content-disposition"),a=s&&s.match(/;\s*filename\*?\s*=\s*(?:UTF-\d+''|)["']?([^;"'\r\n]*)["']?(?:;|$)/i),o=a&&a[1]||r.url&&new URL(r.url).pathname.split("/").findLast(Boolean),c=o&&decodeURIComponent(o),l=t||+r.headers.get("content-length");return{i:Ga(i||Er(c)),o:BigInt(l),u:n}}return i=Ga(i,r!==void 0||t!==void 0),typeof r=="string"?{i,o:BigInt(Er(r).length),u:n}:r instanceof Blob?{i,o:BigInt(r.size),u:n}:r instanceof ArrayBuffer||ArrayBuffer.isView(r)?{i,o:BigInt(r.byteLength),u:n}:{i,o:Xp(r,t),u:n}}function Xp(r,e){return e>-1?BigInt(e):r?void 0:0n}function Ga(r,e=1){if(!r||r.every(t=>t===47))throw new Error("The file must have a name.");if(e)for(;r[r.length-1]===47;)r=r.subarray(0,-1);else r[r.length-1]!==47&&(r=new Uint8Array([...r,47]));return r}var yh=new Uint32Array(256);for(let r=0;r<256;++r){let e=r;for(let t=0;t<8;++t)e=e>>>1^(1&e&&3988292384);yh[r]=e}function mh(r,e=0){e=~e;for(var t=0,i=r.length;t<i;t++)e=e>>>8^yh[255&e^r[t]];return~e>>>0}function wh(r,e,t=0){let i=r.getSeconds()>>1|r.getMinutes()<<5|r.getHours()<<11,n=r.getDate()|r.getMonth()+1<<5|r.getFullYear()-1980<<9;e.setUint16(t,i,1),e.setUint16(t+2,n,1)}function Zp({i:r,u:e},t){return 8*(!e||(t??function(i){try{Jp.decode(i)}catch{return 0}return 1}(r)))}var Jp=new TextDecoder("utf8",{fatal:1});function em(r,e=0){let t=vr(30);return t.setUint32(0,1347093252),t.setUint32(4,754976768|e),wh(r.t,t,10),t.setUint16(26,r.i.length,1),ht(t)}async function*tm(r){let{bytes:e}=r;if("then"in e&&(e=await e),e instanceof Uint8Array)yield e,r.l=mh(e,0),r.o=BigInt(e.length);else{r.o=0n;let t=e.getReader();for(;;){let{value:i,done:n}=await t.read();if(n)break;r.l=mh(i,r.l),r.o+=BigInt(i.length),yield i}}}function rm(r,e){let t=vr(16+(e?8:0));return t.setUint32(0,1347094280),t.setUint32(4,r.isFile?r.l:0,1),e?(t.setBigUint64(8,r.o,1),t.setBigUint64(16,r.o,1)):(t.setUint32(8,Vt(r.o),1),t.setUint32(12,Vt(r.o),1)),ht(t)}function im(r,e,t=0,i=0){let n=vr(46);return n.setUint32(0,1347092738),n.setUint32(4,755182848),n.setUint16(8,2048|t),wh(r.t,n,12),n.setUint32(16,r.isFile?r.l:0,1),n.setUint32(20,Vt(r.o),1),n.setUint32(24,Vt(r.o),1),n.setUint16(28,r.i.length,1),n.setUint16(30,i,1),n.setUint16(40,r.mode|(r.isFile?32768:16384),1),n.setUint32(42,Vt(e),1),ht(n)}function nm(r,e,t){let i=vr(t);return i.setUint16(0,1,1),i.setUint16(2,t-4,1),16&t&&(i.setBigUint64(4,r.o,1),i.setBigUint64(12,r.o,1)),i.setBigUint64(t-8,e,1),ht(i)}function sm(r){return r instanceof File||r instanceof Response?[[r],[r]]:[[r.input,r.name,r.size],[r.input,r.lastModified,r.mode]]}function bh(r,e={}){let t=function(i){let n=i[Symbol.iterator in i?Symbol.iterator:Symbol.asyncIterator]();return{async next(){let s=await n.next();if(s.done)return s;let[a,o]=sm(s.value);return{done:0,value:Object.assign(Kp(...o),Qp(...a))}},throw:n.throw?.bind(n),[Symbol.asyncIterator](){return this}}}(r);return gh(async function*(i,n){let s=[],a=0n,o=0n,c=0;for await(let d of i){let u=Zp(d,n.buffersAreUTF8);yield em(d,u),yield new Uint8Array(d.i),d.isFile&&(yield*tm(d));let f=d.o>=0xffffffffn,p=12*(a>=0xffffffffn)|28*f;yield rm(d,f),s.push(im(d,a,u,p)),s.push(d.i),p&&s.push(nm(d,a,p)),f&&(a+=8n),o++,a+=BigInt(46+d.i.length)+d.o,c||(c=f)}let l=0n;for(let d of s)yield d,l+=BigInt(d.length);if(c||a>=0xffffffffn){let d=vr(76);d.setUint32(0,1347094022),d.setBigUint64(4,BigInt(44),1),d.setUint32(12,755182848),d.setBigUint64(24,o,1),d.setBigUint64(32,o,1),d.setBigUint64(40,l,1),d.setBigUint64(48,a,1),d.setUint32(56,1347094023),d.setBigUint64(64,a+l,1),d.setUint32(72,1,1),yield ht(d)}let h=vr(22);h.setUint32(0,1347093766),h.setUint16(8,ph(o),1),h.setUint16(10,ph(o),1),h.setUint32(12,Vt(l),1),h.setUint32(16,Vt(a),1),yield ht(h)}(t,e),t)}async function*am(r){let e=r.stream().getReader();try{for(;;){let t=await e.read();if(t.done)break;yield t.value}}finally{e.releaseLock()}}async function*om(r){yield r}var cm=new Date(1980,0,1),hi=class{sink;pending;wake;finished;aborted;pump;constructor(e){this.sink=e,this.finished=!1,this.pump=this.run(),this.pump.catch(()=>{})}async*source(){for(;;){if(this.pending){let{entry:e,resolveConsumed:t}=this.pending;this.pending=void 0,yield e,t();continue}if(this.aborted!==void 0)throw this.aborted;if(this.finished)return;await new Promise(e=>{this.wake=e})}}async run(){let e=bh(this.source(),{buffersAreUTF8:!0}).getReader();try{for(;;){let{done:t,value:i}=await e.read();if(t)break;await this.sink.write(i)}}catch(t){throw await e.cancel(t).catch(()=>{}),t}finally{e.releaseLock()}}async add(e,t){if(this.pending)throw new Error("ZipWriter.add() called before the previous entry finished streaming.");let i=t instanceof Blob?am(t):t instanceof Uint8Array?om(t):t;await Promise.race([new Promise(n=>{this.pending={entry:{name:e,input:i,lastModified:cm},resolveConsumed:n},this.wake?.(),this.wake=void 0}),this.pump])}async finish(){this.finished=!0,this.wake?.(),this.wake=void 0,await this.pump,await this.sink.close()}async dispose(){this.finished||(this.aborted=new Error("ZipWriter disposed before finish()."),this.finished=!0,this.wake?.(),this.wake=void 0,await this.pump.catch(()=>{}))}};var lm=1024*1024*1024;function dm(r,e){let t=[],i=0,n;return{sink:{write:async s=>{if(!t)throw new Error("Export is already closed.");if(i+=s.byteLength,i>e)throw t=void 0,new Error(`DISK_EXPORT_UNAVAILABLE: this browser offers no file to write to (no save picker, no OPFS \u2014 e.g. Safari Private Browsing), and the export exceeds the ${Math.round(e/1048576)} MB in-memory limit. Open the page in a normal window to export it.`);t.push(s.slice())},close:async()=>{if(!t)throw new Error("Export is already closed.");n=new Blob(t,{type:r.endsWith(".png")?"image/png":"application/zip"}),t=void 0},abort:async()=>{t=void 0}},result:async()=>{if(!n)throw new Error("Export is not committed.");return{blob:n,name:r}}}}async function $a(r,e,t=lm){if(e){let l=await e.createWritable();return{sink:{write:async h=>{await l.write(h)},close:()=>l.close(),abort:h=>l.abort(h)},result:async()=>({name:r})}}let i=await navigator.storage?.getDirectory?.().catch(()=>{});if(!i)return dm(r,t);let n=await i.getDirectoryHandle("long-screen-exports",{create:!0}),s=`${jt()}-${r}`,a=await n.getFileHandle(s,{create:!0}),o=!1,c;if(a.createSyncAccessHandle){let l=await a.createSyncAccessHandle();l.truncate(0);let h=0;c={write:async d=>{let u=0;for(;u<d.length;){let f=l.write(d.subarray(u),{at:h+u});if(f<=0)throw new Error("Export disk write made no progress.");u+=f}h+=u},close:async()=>{l.flush(),l.close(),o=!0},abort:async()=>{o||l.close(),o=!0,await n.removeEntry(s)}}}else{let l=await a.createWritable();c={write:async h=>{await l.write(h)},close:async()=>{await l.close(),o=!0},abort:async h=>{await l.abort(h),o=!0,await n.removeEntry(s)}}}return{sink:c,result:async()=>{if(!o)throw new Error("Export is not committed.");return{blob:await a.getFile(),name:r,temporary:s}}}}async function xh(r){await(await(await navigator.storage.getDirectory()).getDirectoryHandle("long-screen-exports")).removeEntry(r)}var ui=" \xB7 ",ut=Ti.names,qa=r=>new RegExp(`^${r.replace("{{n}}","(\\d+)")}$`),hm=qa(ut.contentCanvas),um=qa(ut.contentRegion),fm=qa(ut.fragment);var pm=new Map([[ut.fixed,"names.fixed"],[ut.divider,"names.divider"],[ut.unassigned,"names.unassigned"],[ut.ignored,"names.ignored"]]);function mm(r){let e=pm.get(r);if(e)return R(e);let t=hm.exec(r);if(t)return R("names.contentCanvas",{n:t[1]});let i=um.exec(r);return i?R("names.contentRegion",{n:i[1]}):r}function Ah(r){if(Ei()===Ir)return r;let e=[],t=r;t.endsWith(ui+ut.framed)&&(t=t.slice(0,-(ui+ut.framed).length),e.unshift(R("names.framed")));let i=t.lastIndexOf(ui),n=i>=0?fm.exec(t.slice(i+ui.length)):null;return n&&(t=t.slice(0,i),e.unshift(R("names.fragment",{n:n[1]}))),[mm(t),...e].join(ui)}function kh(r){let e=r&&typeof r=="object"&&"canvases"in r&&Array.isArray(r.canvases)?{...r,canvases:r.canvases.map(s=>({...s,name:Ah(s.name)}))}:r,t=JSON.stringify(e).replace(/</g,"\\u003c"),i=s=>s.replace(/&/g,"&amp;").replace(/</g,"&lt;"),n=JSON.stringify({previewLevel:R("offline.previewLevel"),nativeTiles:R("offline.nativeTiles"),footer:R("offline.footer")}).replace(/</g,"\\u003c");return`<!doctype html><html lang="${Eo[Ei()]}"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Long Screen \xB7 ${i(R("offline.title"))}</title>
91
+ <style>*{box-sizing:border-box}body{margin:0;background:#eeeee8;color:#263b33;font:14px system-ui}header{height:64px;display:flex;align-items:center;gap:18px;padding:12px 24px;background:#faf9f4;border-bottom:1px solid #ddd}h1{font-size:19px;white-space:nowrap}select,button{padding:9px;border:1px solid #ccc;background:white;border-radius:8px}canvas{position:absolute;top:64px;left:0;width:100%;height:calc(100% - 100px);touch-action:none}footer{position:fixed;bottom:0;height:36px;left:0;right:0;background:#faf9f4;padding:9px 18px;font-size:12px}small{margin-left:auto}@media(max-width:640px){header{gap:8px;padding:8px}small{display:none}}</style>
92
+ <header><h1>\u25A5 Long Screen</h1><select id="layers"></select><button id="fit">${i(R("offline.fit"))}</button><button id="native">1:1</button><small>${i(R("offline.tip"))}</small></header><canvas id="view"></canvas><footer id="status"></footer>
93
+ <script>const M=${t},T=${n};const C=document.getElementById('view'),X=C.getContext('2d'),S=document.getElementById('layers'),status=document.getElementById('status');let meta,scale=1,ox=0,oy=0,down,cache=new Map(),pending=0,scheduled=false;for(const m of M.canvases){const o=document.createElement('option');o.value=m.id;o.textContent=m.name+' \xB7 '+m.bounds.width+'\xD7'+m.bounds.height;S.append(o)}
94
+ function choose(){meta=M.canvases.find(m=>m.id===S.value);cache.clear();fit()}function fit(){if(!meta)return;scale=Math.min(C.clientWidth/(meta.bounds.width+64),C.clientHeight/(meta.bounds.height+64));ox=(C.clientWidth-meta.bounds.width*scale)/2-meta.bounds.x*scale;oy=(C.clientHeight-meta.bounds.height*scale)/2-meta.bounds.y*scale;draw()}
95
+ function schedule(){if(!scheduled){scheduled=true;requestAnimationFrame(()=>{scheduled=false;draw()})}}
96
+ function draw(){const d=devicePixelRatio||1,w=C.clientWidth,h=C.clientHeight;C.width=Math.round(w*d);C.height=Math.round(h*d);X.scale(d,d);for(let y=0;y<h;y+=20)for(let x=0;x<w;x+=20){X.fillStyle=((x+y)/20)%2?'#e5e6df':'#eeeee8';X.fillRect(x,y,20,20)}if(!meta)return;const level=Math.max(0,Math.min(meta.maxLevel,Math.floor(Math.log2(1/scale)))),unit=M.tileSize*2**level,loX=Math.max(Math.floor(meta.bounds.x/unit),Math.floor(-ox/scale/unit)),hiX=Math.min(Math.floor((meta.bounds.x+meta.bounds.width-1)/unit),Math.floor((w-ox)/scale/unit)),loY=Math.max(Math.floor(meta.bounds.y/unit),Math.floor(-oy/scale/unit)),hiY=Math.min(Math.floor((meta.bounds.y+meta.bounds.height-1)/unit),Math.floor((h-oy)/scale/unit));for(let ty=loY;ty<=hiY;ty++)for(let tx=loX;tx<=hiX;tx++){const key=meta.id+'/'+level+'/'+tx+'_'+ty;let entry=cache.get(key);if(entry===undefined&&pending<8){const im=new Image();cache.set(key,im);pending++;im.onload=()=>{pending--;schedule()};im.onerror=()=>{pending--;cache.set(key,null);schedule()};im.src='tiles/'+key+'.png';entry=im;}if(entry&&entry.complete&&entry.naturalWidth)X.drawImage(entry,ox+tx*unit*scale,oy+ty*unit*scale,unit*scale,unit*scale)}while(cache.size>128)cache.delete(cache.keys().next().value);status.textContent=(scale*100).toFixed(1)+'% \xB7 '+(level?T.previewLevel.replace('{{level}}',level):T.nativeTiles)+' \xB7 '+T.footer}
97
+ C.onwheel=e=>{e.preventDefault();const r=C.getBoundingClientRect(),x=e.clientX-r.left,y=e.clientY-r.top,k=Math.exp(-e.deltaY*.001);scale=Math.min(12,Math.max(.00001,scale*k));ox=x-(x-ox)*k;oy=y-(y-oy)*k;draw()};C.onpointerdown=e=>{down={x:e.clientX,y:e.clientY};C.setPointerCapture(e.pointerId)};C.onpointermove=e=>{if(down){ox+=e.clientX-down.x;oy+=e.clientY-down.y;down={x:e.clientX,y:e.clientY};draw()}};C.onpointerup=()=>down=null;S.onchange=choose;document.getElementById('fit').onclick=fit;document.getElementById('native').onclick=()=>{const x=C.clientWidth/2,y=C.clientHeight/2;ox=x-(x-ox)/scale;oy=y-(y-oy)/scale;scale=1;draw()};window.onresize=draw;choose();<\/script></html>`}async function*ja(r,e,t,i){let n=r.size,s=Math.ceil(t.width),a=Math.ceil(t.height),o=Math.floor(t.x),c=Math.floor(t.y);for(let l=0;l<a;l++){let h=new Uint8Array(s*4),d=c+l,u=Math.floor(d/n),f=d-u*n;for(let p=0;p<s;){let g=o+p,y=Math.floor(g/n),w=g-y*n,m=Math.min(n-w,s-p),b=await r.get(e,y,u);h.set(b.pixels.subarray((f*n+w)*4,(f*n+w+m)*4),p*4),p+=m}l%64===0&&i?.(l),yield h}}var fi="crop/";function $n(r){let e=Math.floor(r.x),t=Math.floor(r.y);return{x:e,y:t,width:Math.ceil(r.x+r.width)-e,height:Math.ceil(r.y+r.height)-t}}function qn(r,e){if(![r.x,r.y,r.width,r.height].every(Number.isFinite))return;let t=$n(e),i=Math.max(t.x,Math.round(r.x)),n=Math.max(t.y,Math.round(r.y)),s=Math.min(t.x+t.width,Math.round(r.x+r.width)),a=Math.min(t.y+t.height,Math.round(r.y+r.height));return s>i&&a>n?{x:i,y:n,width:s-i,height:a-n}:void 0}function Sh(r,e){let t=$n(e);return r.x<=t.x&&r.y<=t.y&&r.x+r.width>=t.x+t.width&&r.y+r.height>=t.y+t.height}async function*gm(r,e){for await(let t of X(r,e))yield Be(JSON.stringify(t.value,(i,n)=>ArrayBuffer.isView(n)?Array.from(n):n)+`
98
+ `)}function ym(r){let e="";for(let t=0;t<r.length;t+=32768)e+=String.fromCharCode(...r.subarray(t,t+32768));return btoa(e)}async function Th(r,e,t,i){let n=await $a("long-screen-project.zip",i),s=new hi(n.sink),a=[];try{for await(let{value:h}of X(r,"canvas/"))a.push(h);let o={format:"long-screen/sparse-canvas",version:2,presentation:"Canvases with kind=presentation are framed views, not independent reconstructed worlds. Their opaque decorative extensions have NO evidence coverage; see canvas.presentation. Original moving and fixed canvases are retained.",tileSize:e.settings.tileSize,coordinates:"Native source pixels. Each independent canvas has its own origin.",holes:"Transparent pixels were not observed; the enclosing bounding rectangle is not a coverage guarantee.",levels:"Level 0 is native resolution; levels 1+ are explicitly downsampled previews.",confidence:"Heuristic, uncalibrated, not a correctness probability.",sourceIncluded:!1,project:e,canvases:a};await s.add("manifest.json",Be(JSON.stringify(o,null,2))),await s.add("index.html",Be(kh(o))),await s.add("README.txt",Be(`Long Screen \u2014 offline reconstruction
99
+
100
+ Unzip everything, then open index.html. Level-zero PNG tiles preserve native output resolution. Missing tiles and transparent pixels are unobserved holes, not white page content. Independent fragments are not asserted to be adjacent. The original video is NOT included: retain it for source-time comparisons. observations.jsonl records every processed source frame and chosen placement; diagnostics.jsonl contains warnings. quality/*.json stores 16px-block heuristic quality, conflict markers, and source-frame ownership. provisional/*.bin marks covered pixels the world-consistency mask could not corroborate against a neighbouring frame (screen-space overlay/dynamic burn-in still awaiting a later consistent observation), same bit layout as coverage/*.bin. Pixel coverage bits are least-significant-bit first. Pyramids are previews only. regions.json holds the full region definitions (including their masks, base64-encoded) that produced canvases[].layer.
101
+ `));let c=await r.get("regions")||[];await s.add("regions.json",Be(JSON.stringify(c.map(h=>({...h,mask:h.mask?ym(h.mask):void 0})),null,2)));let l=0;for await(let h of X(r,"tile-index/")){let d=h.value,u=`${d.canvasId}/${d.level}/${d.x}_${d.y}`,f=await r.get(`tile/${u}`);if(!f)throw new Error(`Missing committed tile ${u}; export was not marked complete.`);await s.add(`tiles/${u}.png`,f.blob),d.level===0&&(await s.add(`coverage/${d.canvasId}/${d.x}_${d.y}.bin`,f.coverage),await s.add(`provisional/${d.canvasId}/${d.x}_${d.y}.bin`,f.provisional||new Uint8Array(f.coverage.length)),await s.add(`quality/${d.canvasId}/${d.x}_${d.y}.json`,Be(JSON.stringify({blockSize:16,quality:[...f.quality||[]],conflicts:[...f.conflicts||[]],frozen:[...f.frozen||[]],ownerFrameEncoding:"0 = unassigned; otherwise zero-based source frame index + 1. Block-level representative, not per-pixel provenance.",ownerFrame:[...f.owner]})))),++l%8===0&&t(R("exports.tilesProgress",{n:l}),Math.min(.9,l/Math.max(1,e.tiles*1.5)))}for(let[h,d]of[["observations","observation/"],["diagnostics","diagnostic/"],["poses","node/"],["pose-edges","edge/"],["analysis","scan/"],["temporal","temporal/"],["attachments","attach/"]])await s.add(`${h}.jsonl`,gm(r,d));for(let h of["graph-summary","memory-stats","performance"])await s.add(`${h}.json`,Be(JSON.stringify(await r.get(h)||{},null,2)));return t(R("exports.zipFinalize"),.98),await s.finish(),{...await n.result(),message:R("exports.projectDone.message")}}catch(o){throw await n.sink.abort?.(o),await s.dispose(),o}}async function Eh(r,e,t,i,n,s="auto",a){let o=a?qn(a,t.bounds):$n(t.bounds);if(!o)throw new Error(`The crop ${JSON.stringify(a)} leaves nothing of this canvas to export.`);let c=Math.min(4096,Math.max(512,Math.floor(e.settings.memoryMB*1024*1024*.2/(e.settings.tileSize*4)/512)*512)),l=8192,h=s==="single"||s==="auto"&&o.width<=c&&o.height<=32767&&o.width*o.height<=1e8,d=h?"long-screen.png":"long-screen-sheets.zip",u=await $a(d,n),f=new Jt(r,e.settings.tileSize,e.settings.memoryMB),p,g;try{if(h){for await(let b of Us(o.width,o.height,ja(f,t.id,o,A=>i(R("exports.encodingSingle",{row:A,total:o.height}),A/o.height))))await u.sink.write(b);return await u.sink.close(),{...await u.result(),message:R("exports.canvasDone.message",{width:o.width,height:o.height})}}let y=32;p=new hi(u.sink),g=`sheet-export/${jt()}/`;let w=g;for await(let{value:b}of X(r,`tile-index/${t.id}/0/`)){let A=Math.floor((b.x*f.size-o.x)/c),T=Math.floor(((b.x+1)*f.size-1-o.x)/c),S=Math.floor((b.y*f.size-o.y)/l),x=Math.floor(((b.y+1)*f.size-1-o.y)/l);for(let k=S;k<=x;k++)for(let E=A;E<=T;E++)E>=0&&k>=0&&await r.put(`${w}${E}_${k}`,{x:E,y:k})}let m=0;for await(let b of X(r,w)){let{x:A,y:T}=b.value,S={x:o.x+A*c,y:o.y+T*l,width:Math.min(c+y,o.width-A*c),height:Math.min(l+y,o.height-T*l)};if(S.width<1||S.height<1){await r.delete(b.key);continue}await p.add(`sheet_${A}_${T}.png`,Us(S.width,S.height,ja(f,t.id,S))),await p.add(`sheet_${A}_${T}.json`,Be(JSON.stringify(S))),await r.delete(b.key),i(R("exports.encodingSheet",{count:++m}),0)}return await p.add("manifest.json",Be(JSON.stringify({canvas:t,tileSize:f.size,sheetWidth:c,sheetHeight:l,overlap:y,notice:"No resizing. Only sheets intersecting observed tiles are emitted. Per-sheet JSON contains native world coordinates. Overlap is intentional; do not append sheets without removing overlap."},null,2))),await p.finish(),{...await u.result(),message:s==="sheets"?R("exports.sheetsDone.messagePaged",{count:m,overlap:y}):R("exports.sheetsDone.messageOversize",{count:m,overlap:y})}}catch(y){throw await u.sink.abort?.(y),await p?.dispose(),g&&await Ue(r,g),y}finally{await f.clear(),f.free()}}var Ka="long-screen-print:";var Rh=globalThis,ft=(r,e=[])=>Rh.postMessage(r,e),Xa,Ie,_t=!1,Ct=!1,pi=!1,wm=0,jn=new Map,bm=()=>Xa??=_r.open(),vh,xm=()=>vh??=Ds()?Promise.resolve():Ms(Os(),new URL("./core-helper.js",import.meta.url)).then(()=>{},r=>{throw vh=void 0,new Error(`CORE_UNAVAILABLE: the reconstruction core (core.wasm) failed to load: ${r instanceof Error?r.message:String(r)}`)});function Am(r,e){return new Promise((t,i)=>{let n=++wm,s=setTimeout(()=>{jn.delete(n),i(new Error("Native video seek did not finish within 30 seconds."))},3e4);jn.set(n,{resolve:t,reject:i,timer:s}),ft({event:"frame-request",id:n,time:r,coded:e})})}var km=24*60*60*1e3,_h=Promise.resolve();async function Ya(){let r=await navigator.locks?.query();return new Set((r?.held??[]).map(e=>e.name??"").filter(e=>e.startsWith(Ka)).map(e=>e.slice(Ka.length)))}function Qa(r){let e=_h.catch(()=>{}).then(r);return _h=e,e}function mi(){throw new Error("A reconstruction, export or probe is already running.")}function Ht(r){if(!r)throw new Error("Project ID is required.");return r}var Ch={async capabilities(r,e){return{worker:!0,offscreen:typeof OffscreenCanvas<"u",webcodecs:typeof VideoDecoder<"u",opfs:!!navigator.storage?.getDirectory,compression:typeof CompressionStream<"u",webgpu:!!navigator.gpu,privateStorage:!e.storesBlobs}},async probe(r){(Ie||_t||Ct||pi)&&mi(),pi=!0;try{let e=await za(r.file);try{for await(let t of e.frames()){let i=await createImageBitmap(new ImageData(t.image.data,t.image.width,t.image.height));return{info:e.info,bitmap:i,conversion:e.conversionReport?.()}}throw new Error("The decoder produced no frames for this file.")}finally{e.dispose()}}finally{pi=!1}},async start(r,e){(Ie||_t||Ct||pi)&&mi(),Ct=!0;try{if(typeof OffscreenCanvas>"u")throw new Error("OFFSCREEN_CANVAS_UNAVAILABLE: This browser cannot run the worker renderer. No silent main-thread fallback is used.");let t={...gi,...r.settings};if(![320,480,640,960,1280].includes(t.analysisSize)||![64,128,256,512].includes(t.memoryMB)||![256,512,1024].includes(t.tileSize))throw new Error("Invalid analysis/cache/tile settings.");if(!["auto","cpu","webgpu"].includes(t.compute||gi.compute)||!["context","region"].includes(t.framing||gi.framing))throw new Error("Invalid compute/framing setting.");await Qa(async()=>yi(e,await Ya()));let i;if(r.demo)i=new Gn(r.demo);else if(t.decoder==="compatibility"){if(!r.info)throw new Error("Native video metadata is missing.");i=new Nn(r.info,t.compatibilityFPS,Am)}else i=await za(r.file,La(t.compute));for(let s of t.regions){let a=s.rect;if(a.x<0||a.y<0||a.width<4||a.height<4||a.x+a.width>i.info.width||a.y+a.height>i.info.height)throw new Error("A manual region is empty or outside the source frame.")}let n=new Hn(e,i,t,{progress:s=>ft({event:"progress",data:{...s,memoryMB:Math.round(G().memoryBytes/1048576),conversion:i instanceof li?i.conversion():"native seek"}}),diagnostic:s=>ft({event:"diagnostic",data:s}),project:s=>ft({event:"project",data:s})});return Ie=n,n.run().then(s=>ft({event:"finished",data:s})).catch(s=>ft({event:"fatal",error:String(s)})).finally(()=>{Ie=void 0}),n.project}finally{Ct=!1}},async pause(r){if(!Ie)throw new Error("No active reconstruction.");return Ie.setPaused(!!r.paused),{paused:Ie.paused}},async stop(){if(!Ie)throw new Error("No active reconstruction.");return Ie.stop(),{requested:!0}},async open(r,e){let t=Ht(r.projectId),i=await e.get(Pt(t));if(!i)throw new Error("Project not found in this browser.");return{project:i,canvases:await pt(e,t).scan("canvas/",{limit:100})}},canvases(r,e){return pt(e,Ht(r.projectId)).scan("canvas/",{after:r.after,limit:100})},diagnostics(r,e){return pt(e,Ht(r.projectId)).scan("diagnostic/",{after:r.after,limit:100})},tile(r,e){return pt(e,Ht(r.projectId)).get(`tile/${Le(r.canvasId,r.level,r.x,r.y)}`).then(t=>t?{blob:t.blob,quality:t.quality,conflicts:t.conflicts,coverage:t.coverage,owner:t.owner,provisional:t.provisional,level:t.level,x:t.x,y:t.y}:null)},async restore(r,e){(Ie||_t||Ct)&&mi();let t=await Qa(async()=>io(e,{maxAgeMs:km,held:await Ya()}));return t?{project:t,interrupted:!["complete","partial","error"].includes(t.status)}:null},async sweep(r,e){return(Ie||_t||Ct)&&mi(),await Qa(async()=>yi(e,await Ya())),!0},async export(r,e){if(Ie||_t||Ct||pi)throw new Error("Finish processing before exporting committed tiles.");_t=!0;try{let t=Ht(r.projectId),i=await e.get(Pt(t));if(!i)throw new Error("Project not found.");let n=pt(e,t),s=(l,h)=>ft({event:"export-progress",data:{message:l,fraction:h}});if(r.format==="project")return await Th(n,i,s,r.handle);let a=await n.get(`canvas/${r.canvasId}`);if(!a||!a.tileCount)throw new Error("This canvas has no committed pixels.");let o=r.layout==="single"||r.layout==="sheets"?r.layout:"auto",c=await n.get(`${fi}${a.id}`);return await Eh(n,i,a,s,r.handle,o,c)}finally{_t=!1}},async crops(r,e){let t={};for await(let{key:i,value:n}of X(pt(e,Ht(r.projectId)),fi))t[i.slice(fi.length)]=n;return t},async crop(r,e){(Ie||_t||Ct)&&mi();let t=pt(e,Ht(r.projectId)),i=`${fi}${r.canvasId}`,n=await t.get(`canvas/${r.canvasId}`);if(!n)throw new Error("Canvas not found.");let s=r.rect?qn(r.rect,n.bounds):void 0;if(r.rect&&!s)throw new Error(`The crop ${JSON.stringify(r.rect)} leaves nothing of this canvas.`);return!s||Sh(s,n.bounds)?(await t.delete(i),null):(await t.put(i,s),s)},async"cleanup-export"(r){return await xh(r.key),!0}};async function Sm(r,e){await xm();let t=await bm();if(!Object.hasOwn(Ch,r))throw new Error(`Unknown worker command: ${r}`);return Ch[r](e,t)}Rh.onmessage=r=>{let e=r.data;if(e.type==="storage"){Xa||(Xa=_r.open(e.name));return}if(e.type==="locale"){cs(e.locale)&&vo(e.locale);return}if(e.type==="frame-response"){let t=jn.get(e.id);if(!t){"bitmap"in e&&e.bitmap?.close();return}jn.delete(e.id),clearTimeout(t.timer),"error"in e?t.reject(new Error(e.error)):t.resolve({bitmap:e.bitmap,coded:!!e.coded});return}Sm(e.type,e.payload??{}).then(t=>{let i=[];t&&typeof t=="object"&&"bitmap"in t&&t.bitmap instanceof ImageBitmap&&i.push(t.bitmap),ft({id:e.id,result:t},i)}).catch(t=>ft({id:e.id,error:t instanceof Error?t.message:String(t)}))};
102
+ /*!
103
+ * Copyright (c) 2026-present, Vanilagy and contributors
104
+ *
105
+ * This Source Code Form is subject to the terms of the Mozilla Public
106
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
107
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
108
+ */