video-fps-probe 0.2.0 → 0.3.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/CHANGELOG.md +51 -0
- package/README.md +26 -14
- package/dist/api/errors.js +1 -1
- package/dist/api/guards.d.ts +2 -0
- package/dist/api/guards.js +2 -1
- package/dist/check/index.js +12 -2
- package/dist/client/compare.js +2 -2
- package/dist/client/create.d.ts +3 -0
- package/dist/client/create.js +8 -0
- package/dist/client/fallback.js +2 -2
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/inline.js +1 -1
- package/dist/client/lazy.js +1 -1
- package/dist/client/probe-client.js +4 -0
- package/dist/client/probe.js +23 -22
- package/dist/client/route.js +20 -0
- package/dist/client/split.js +9 -0
- package/dist/client/stub.js +2 -2
- package/dist/client/types.d.ts +1 -0
- package/dist/core/analyze.js +4 -78
- package/dist/core/dispatch.js +76 -0
- package/dist/core/isobmff/boxes.js +4 -7
- package/dist/core/isobmff/index.js +8 -5
- package/dist/core/isobmff/model.js +1 -1
- package/dist/core/isobmff/moov.js +12 -7
- package/dist/core/isobmff/track.js +4 -2
- package/dist/core/matroska/ebml.js +1 -1
- package/dist/core/reader.d.ts +0 -12
- package/dist/core/reader.js +10 -27
- package/dist/engines/common.js +6 -0
- package/dist/engines/mediabunny.js +17 -4
- package/dist/engines/mp4box.js +2 -1
- package/dist/plugins/own.js +5 -2
- package/dist/presets/index.d.ts +1 -0
- package/dist/presets/sources.json +8 -0
- package/dist/probe.js +2 -1
- package/dist/react/store.js +1 -1
- package/dist/standalone/own-isobmff.worker.js +1 -0
- package/dist/standalone/own-matroska.worker.js +1 -0
- package/dist/standalone/own.worker.js +1 -1
- package/dist/worker/own-isobmff.worker.js +4 -0
- package/dist/worker/own-matroska.worker.js +4 -0
- package/dist/worker/runtime.d.ts +2 -3
- package/dist/worker/runtime.js +2 -97
- package/dist/worker/serve.d.ts +3 -0
- package/dist/worker/serve.js +97 -0
- package/dist/worker/single.js +13 -0
- package/package.json +8 -2
- package/dist/client/inline.d.ts +0 -19
- package/dist/client/pool.d.ts +0 -29
- package/dist/client/probe.d.ts +0 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){var e=Object.defineProperty,t=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},n=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};function r(e){if(e?.aborted)throw e.reason??new DOMException(`Aborted`,`AbortError`)}var i=t((()=>{}));function a(e,t){let n={...e};if(!t)return n;for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return n}function o(e={}){return{signal:e.signal??null,matroskaMode:e.matroskaMode??`auto`,exactBudgetMs:e.exactBudgetMs??150,readAhead:a(c,e.readAhead),costModel:a(l,e.costModel),maxExpandedSamples:e.maxExpandedSamples??5e6,onProgress:e.onProgress??null}}function s(e,t,n){return t*e.perReadMs+n/e.bytesPerMs}var c,l,u=t((()=>{c={head:65536,fragment:1048576,matroskaScan:1048576,tail:262144},l={perReadMs:.8,bytesPerMs:5e5,perBlockMs:2e-4}}));function d(e,t){if(!Number.isSafeInteger(e)||e<0)throw RangeError(`${t} must be a non-negative safe integer, got ${e}`)}function f(e,t){return e.getUint8(t)*65536+e.getUint16(t+1)}function p(e,t,n){let r=``;for(let i=0;i<n;i++)r+=String.fromCharCode(e.getUint8(t+i));return r}function m(e,t){return p(e,t,4)}var h,g,_=t((()=>{i(),h=class extends Error{constructor(e){super(e),this.name=`EndOfFileError`}},g=class{size;headWindow;maxWindows;signal;#e;#t=[];#n=[];#r=0;#i=0;#a=0;constructor(e,t={}){d(e.size,`blob size`),this.#e=e,this.size=e.size,this.headWindow=t.headWindow??65536,this.maxWindows=Math.max(1,t.maxWindows??4),this.signal=t.signal??null,d(this.headWindow,`headWindow`)}get reads(){return this.#r}get bytesFetched(){return this.#i}get bytesTransferred(){return this.#a}stats(){return{reads:this.#r,bytesFetched:this.#i,bytesTransferred:this.#a}}checkAbort(){r(this.signal)}async read(e,t){if(d(e,`offset`),d(t,`length`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let n=Math.min(this.size,e+t);if(n===e)return new Uint8Array;this.checkAbort();let r=await this.#e.slice(e,n).arrayBuffer();if(this.checkAbort(),this.#r++,this.#a+=r.byteLength,r.byteLength!==n-e)throw new h(`short read at ${e}: expected ${n-e} bytes, got ${r.byteLength}`);return this.#o(e,n),new Uint8Array(r)}async readMany(e,t=4){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let t=r++,[i,a]=e[t],o=this.peek(i,a);n[t]=o?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):await this.read(i,a)}},a=[];for(let n=0;n<Math.max(1,Math.min(t,e.length));n++)a.push(i());return await Promise.all(a),n}peek(e,t){let n=Math.min(this.size,e+t);for(let t=0;t<this.#t.length;t++){let r=this.#t[t];if(e>=r.off&&n<=r.off+r.buf.length)return t>0&&(this.#t.splice(t,1),this.#t.unshift(r)),new DataView(r.buf.buffer,r.buf.byteOffset+(e-r.off),n-e)}return null}async view(e,t,n=this.headWindow){if(d(e,`offset`),d(t,`length`),d(n,`readAhead`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let r=Math.min(this.size,e+t);if(r===e)return new DataView(new ArrayBuffer(0));let i=this.peek(e,r-e);if(i)return i;let a=Math.min(this.size,Math.max(r,e+n)),o=this.#t.find(t=>e>=t.off&&e<t.off+t.buf.length),s;if(o){let t=o.buf.subarray(e-o.off),n=await this.read(o.off+o.buf.length,a-(o.off+o.buf.length));s=new Uint8Array(t.length+n.length),s.set(t,0),s.set(n,t.length)}else s=await this.read(e,a-e);return this.#t.unshift({off:e,buf:s}),this.#t.length>this.maxWindows&&(this.#t.length=this.maxWindows),new DataView(s.buffer,s.byteOffset,r-e)}async viewExact(e,t,n=this.headWindow){let r=await this.view(e,t,n);if(r.byteLength<t)throw new h(`unexpected end of file: wanted ${t} bytes at ${e}, file size ${this.size}`);return r}async bytes(e,t,n=this.headWindow){let r=await this.view(e,t,n);return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}clearCache(){this.#t=[]}#o(e,t){let n=this.#n,r=0,i=n.length;for(;r<i;){let t=r+i>>>1;n[t].end<e?r=t+1:i=t}let a=r,o=e,s=t,c=0;for(;a<n.length&&n[a].start<=t;){let r=n[a],i=Math.min(t,r.end)-Math.max(e,r.start);i>0&&(c+=i),r.start<o&&(o=r.start),r.end>s&&(s=r.end),a++}n.splice(r,a-r,{start:o,end:s}),this.#i+=t-e-c}}}));function v(e,t=null){return{container:e,brand:null,formatDurationSec:null,scan:null,videoTracks:[],audioTrackCount:0,primaryTrackId:null,error:t,warnings:[]}}function y(e){return{trackId:e,fourccOrCodecId:``,codecName:``,width:0,height:0,rotation:0,timescale:0,frames:null,presentedFrames:null,durationSec:null,startSec:null,avgFps:null,avgFpsFfprobe:null,rFpsFfprobe:null,nominalFps:null,dominantFps:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,isStill:!1,rateProfile:null,provenance:{},warnings:[]}}var b=t((()=>{}));u(),_(),b();let x=new Set([`ftyp`,`moov`,`mdat`,`free`,`skip`,`wide`,`pnot`,`uuid`,`moof`,`styp`,`sidx`]),S=[26,69,223,163],C=[{bytes:[137,80,78,71,13,10,26,10],offset:0,label:`PNG image`},{bytes:[255,216,255],offset:0,label:`JPEG image`},{bytes:[71,73,70,56],offset:0,label:`GIF image`},{bytes:[82,73,70,70],offset:0,label:`RIFF file (AVI/WAV/WebP)`},{bytes:[79,103,103,83],offset:0,label:`Ogg file`},{bytes:[70,76,86,1],offset:0,label:`FLV file`},{bytes:[0,0,1,186],offset:0,label:`MPEG program stream`},{bytes:[37,80,68,70],offset:0,label:`PDF document`},{bytes:[80,75,3,4],offset:0,label:`ZIP archive`},{bytes:[73,68,51],offset:0,label:`MP3 file`}];function w(e,t,n){if(e.length<n+t.length)return!1;for(let r=0;r<t.length;r++)if(e[n+r]!==t[r])return!1;return!0}function T(e){for(let t=4;t<8;t++){let n=e[t];if(n<32||n>126)return!1}return!0}function E(e){let t=Math.min(e.length,512);if(t===0)return!1;for(let n=0;n<t;n++){let t=e[n];if(t!==9&&t!==10&&t!==13&&(t<32||t===127))return!1}return!0}function D(e){for(let t of C)if(w(e,t.bytes,t.offset))return t.label;return e.length>=188&&e[0]===71&&e[188]===71?`MPEG transport stream`:E(e)?`text file`:`no known signature`}function O(e){if(e.length===0)return{kind:`unknown`,reason:`empty file`};if(w(e,S,0))return{kind:`matroska`,reason:`EBML header 1A45DFA3`};if(e.length>=8&&T(e)){let t=String.fromCharCode(e[4],e[5],e[6],e[7]);if(x.has(t)){let n=e[0]*16777216+e[1]*65536+e[2]*256+e[3];if(n===0)return{kind:`isobmff`,reason:`top-level '${t}' box running to end of file`};if(n>=8)return{kind:`isobmff`,reason:`top-level '${t}' box`};if(n===1){if(e.length<16)return{kind:`unknown`,reason:`'${t}' box with a truncated 64-bit size`};let n=0;for(let t=8;t<16;t++)n=n*256+e[t];if(n>=16)return{kind:`isobmff`,reason:`top-level '${t}' box with 64-bit size`}}return{kind:`unknown`,reason:`'${t}' box with invalid size ${n}`}}}return e.length<8?{kind:`unknown`,reason:`too small (${e.length} bytes)`}:{kind:`unknown`,reason:D(e)}}async function k(e){let{kind:t}=O(new Uint8Array(await e.slice(0,Math.min(1024,e.size)).arrayBuffer()));return t===`unknown`?null:t}function ee(e){return e<0n?-e:e}function te(e,t){for(;t!==0n;){let n=e%t;e=t,t=n}return e}function ne(e,t){if(typeof e==`bigint`)return e;if(!Number.isSafeInteger(e))throw RangeError(`${t} must be a safe integer, got ${e}`);return BigInt(e)}function A(e,t,n=P){let r=ne(e,`num`),i=ne(t,`den`),a=ne(n,`max`),o=0n,s=1n,c=1n,l=0n,u=r<0n!=i<0n,d=te(ee(r),ee(i));for(d!==0n&&(r=ee(r)/d,i=ee(i)/d),r<=a&&i<=a&&(c=r,l=i,i=0n);i!==0n;){let e=r/i,t=r-i*e,n=e*c+o,u=e*l+s;if(n>a||u>a){if(c!==0n&&(e=(a-o)/c),l!==0n){let t=(a-s)/l;t<e&&(e=t)}i*(2n*e*l+s)>r*l&&(c=e*c+o,l=e*l+s);break}o=c,s=l,c=n,l=u,r=i,i=t}let f=Number(c);return{num:u?-f:f,den:Number(l),exact:i===0n}}function re(e){return e.den===0?0:e.num/e.den}function j(e){return e?`${e.num}/${e.den}`:`0/0`}function M(e,t){return{num:e,den:t,value:re({num:e,den:t})}}function N(e,t,n=P){let r=A(e,t,n);return M(r.num,r.den)}function ie(e,t,n){return t<=0||n<=0||e<=0?null:N(BigInt(e)*BigInt(t),n,P)}var P,F=t((()=>{P=2147483647})),ae=n({CUSUM_ALARM_PERIODS:()=>2,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>Je,MAX_ANOMALIES:()=>50,MAX_BUCKETS:()=>120,MAX_SEGMENTS:()=>50,MIN_SEGMENT_FRAMES:()=>5,MIN_SEGMENT_SEC:()=>I,UNEVEN_DOMINANT_SHARE:()=>se,rateProfile:()=>ue});function oe(e,t,n){e.t0=Math.min(e.t0,t.t0),e.t1=Math.max(e.t1,t.t1),e.frames+=t.frames,n?(e.n+=t.n,e.sum+=t.sum,e.ex+=t.ex):e.ex+=t.t1-t.t0}var I,se,L,ce,le,ue,de=t((()=>{z(),I=.5,se=.8,L=1+Ke,ce=e=>String(+e.toPrecision(4)),le=e=>({t0:e,t1:e,n:0,sum:0,frames:0,ex:0,d:0,kind:`steady`}),ue=(e,t,n,r)=>{let i=t,a=Je*i,o=e=>i*e.n/e.sum,s=e=>e.n>=5&&e.t1-e.t0>=.5*i,c=[],l=e=>{let t=c[c.length-1];s(e)?c.push(e):t?.kind===`short`?oe(t,e,!0):c.push({...e,kind:`short`})},u=le(0),d=le(0),f=le(0),p=0,m=0,h=0,g=0,_=0,v=!1,y=()=>{u.t1=p,v?c.push({...u,kind:`hold`}):l(u),u=le(p),v=!1,g=_=0},b=Math.min(120,Math.floor(n/2)),x=r/b,S=new Float64Array(b),C=(e,t)=>{u.n+=e,u.sum+=e*t,u.frames+=e,p+=e*t},w=(e,t)=>{let n=e;if(t<=0)u.frames+=n,h+=n;else{for(let e=p,r=e+n*t,i=Math.floor(e/x);e<r&&i<b;i++){let n=Math.min(r,(i+1)*x);n>e&&(S[i]+=(n-e)/t),e=Math.max(e,n)}for(;n>0;){let e=u.sum/u.n;if(u.n&&t>=Math.max(a,4*e)){y(),v=!0,C(1,t),n--;continue}if(v&&Math.abs(t-e)>.075*e&&y(),v=!1,!u.n){C(n,t);return}let r=t-e,i=qe*e,o=2*e,s=Math.abs(r)>i,c=s?1:n;if(s&&(r>0?!g||r-i>o:!_)){let e={...u,t1:p,d:t};r>0?d=e:f=e}if(g=Math.max(0,g+c*(r-i)),_=Math.max(0,_-c*(r+i)),C(c,t),n-=c,g>o||_>o){let e=g>o?d:f,t=u.n-e.n-1;t>0&&Math.abs(Math.log(e.d*e.n/e.sum))<Math.abs(Math.log(e.d*t/(u.sum-e.sum-e.d)))&&(e.t1+=e.d,e.n++,e.sum+=e.d,e.frames++),u.t0=e.t1,u.n-=e.n,u.sum-=e.sum,u.frames-=e.frames,l(e),g=_=0}}}},T=0,E=0;if(e((e,t)=>{e>0&&(m+=e,T&&t!==E&&(w(T,E),T=0),T+=e,E=t)}),T&&w(T,E),!(p>0))return null;u.n?y():c[c.length-1].frames+=u.frames;let D=[],O=(e,t,n,r,a=t.t1-t.t0)=>{D.push({kind:e,atSec:t.t0/i,durationSec:a/i,fromFps:n,toFps:r})},k=[],ee=(e,t)=>e?Math.abs(Math.log(o(e)/t)):1/0;c.forEach((e,t)=>{let n=k[k.length-1];if(e.kind===`short`||e.kind===`hold`){let r=o(e),i=c[t+1]?.kind===`steady`?c[t+1]:void 0,l=ee(n,r)<=ee(i,r)?n:i;if(e.kind=s(e)?`variable`:`steady`,e.kind===`steady`&&l){let t=o(l),n=e.sum>=e.n*Math.max(a,4*l.sum/l.n)?`freeze`:r*L<t?`gap`:r>t*L?`burst`:null;n&&O(n,e,t,r),oe(l,e,!n);return}}let r=n?o(e)/o(n):0;n?.kind===`steady`&&e.kind===`steady`&&r<L&&r*L>1?oe(n,e,!0):k.push(e)});let te=k[k.length-1],ne=p+te.sum/te.n;te.frames+=n-m,te.t1=ne;for(let e=1;e<k.length;e++){let t=k[e-1],n=k[e],r=o(n)/o(t);(t.kind===`steady`&&n.kind===`steady`||r>=L||r*L<=1)&&O(`rate-change`,n,o(t),o(n),0)}D.sort((e,t)=>e.atSec-t.atSec);let A=k.filter(e=>e.kind===`steady`).map(e=>[o(e),e.t1-e.t0-e.ex,e.n]).sort((e,t)=>e[0]-t[0]),re=0,j=0,M=0,N=0,ie=0;for(let[e,t,n]of A){for(M+=t,N+=n;e>=A[ie][0]*L;ie++)M-=A[ie][1],N-=A[ie][2];re=Math.max(re,M),j=Math.max(j,N)}let P=re/ne,F=P<.8||j<.8*(m-h)||A.length>1&&A[A.length-1][0]>=A[0][0]*L,ae=k.slice(0,3).map(e=>`${e.kind===`variable`?`~`:``}${ce(o(e))} fps for ${ce((e.t1-e.t0)/i)} s`);k.length>3&&ae.push(`+${k.length-3} more`);let I=``,se=(e,t)=>{e&&(I+=`${I?`, `:`; `}${e} ${t}${e>1?`s`:``}`)};for(let e of[`freeze`,`gap`,`burst`])se(D.filter(t=>t.kind===e).length,e);return se(h,`duplicate timestamp`),{segments:k.slice(0,50).map(e=>({startSec:e.t0/i,endSec:e.t1/i,frames:e.frames,fps:o(e),kind:e.kind})),moreSegments:Math.max(0,k.length-50),anomalies:D.slice(0,50),moreAnomalies:Math.max(0,D.length-50),buckets:{bucketSec:x/i,fps:Array.from(S,e=>e*i/x)},uneven:F,dominantShare:P,summary:`${F?`Uneven`:I?`Mostly steady`:`Steady`}: ${ae.join(`, `)}${I}`}}})),fe=n({CUSUM_DRIFT:()=>qe,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>Je,MAX_REORDER_DEPTH:()=>16,RATE_CHANGE_RELATIVE:()=>Ke,SNAP_RELATIVE_TOLERANCE:()=>We,VFR_RELATIVE_TOLERANCE:()=>Ge,analyzeTimeline:()=>ve,msGridTicks:()=>me,rateFromTicks:()=>R,rateProfileOf:()=>je,reorderDepthFromCts:()=>ge,snapToStandardRate:()=>pe,vfrTolerance:()=>he});function pe(e,t=We){if(!(e>0))return null;let n=null,r=1/0;for(let t of Ye){let i=Math.abs(e-t.value)/t.value;i<r&&(r=i,n=t)}return r<=t?n:null}function me(e,t){if(!(e>1e3)||t.length===0)return 0;for(let n of t){let t=n*1e3;if(!Number.isSafeInteger(t)||t%e!==0)return 0}return e/1e3}function he(e,t,n){return Math.max(1,Math.round(Ge*e),me(t,n))}function ge(e,t,n){return!(t>e)||!(n>0)?0:Math.min(16,Math.ceil((t-e)/n))}function _e(e){if(Number.isInteger(e)||!(e>0))return null;let t=1e9/e,n=Math.round(t);return n>0&&Math.abs(t-n)<=1e-6*n?n:null}function R(e,t){let n=_e(e);return n!==null&&t>0&&Number.isSafeInteger(n*t)?N(1e9,n*t,2**53-1):xe(e,t,2**53-1)}function ve(e){let t=[],n=Ce(e.timescale,t);return`segments`in e?ze(e,n,t):Ue(e,n,t)}function ye(e){return`counts`in e&&`deltas`in e?{n:Math.min(e.counts.length,e.deltas.length),counts:e.counts,values:e.deltas}:{n:e.length,counts:null,values:e}}function be(e){return e?`counts`in e&&`offsets`in e?{n:Math.min(e.counts.length,e.offsets.length),counts:e.counts,values:e.offsets}:{n:e.length,counts:null,values:e}:null}function xe(e,t,n=P){if(!(e>0)||!(t>0))return null;if(Number.isSafeInteger(e)&&Number.isSafeInteger(t))return N(e,t,n);let r=1e6,i=Math.round(e*r),a=Math.round(t*r);return Number.isSafeInteger(i)&&Number.isSafeInteger(a)?N(i,a,n):M(e/t,1)}function Se(e,t,n){if(!(t>0)||!(n>0))return null;let r=_e(e);return r!==null&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?N(BigInt(t)*1000000000n,BigInt(r)*BigInt(n),P):Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?N(BigInt(e)*BigInt(t),n,P):xe(e*t,n)}function Ce(e,t){return e>0&&Number.isFinite(e)?e:(t.push(`invalid timescale ${e}, using 1`),1)}function we(e){return e?{ws:e.start,we:e.end>e.start?e.end:1/0}:{ws:-1/0,we:1/0}}function Te(e,t){return{timescale:e,sampleCount:0,durationSum:0,avgFps:null,avgFpsString:`0/0`,presentedAvgFps:null,presentedFrames:null,firstPts:null,lastPts:null,deltaCount:0,excludedTailDeltas:0,reorderDepth:0,duplicateTimestamps:0,discontinuities:0,histogram:[],distinctDeltas:0,minDelta:null,maxDelta:null,medianDelta:null,meanDelta:null,tolerance:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,nominalFps:null,dominantFps:null,timestampsQuantized:!1,profile:null,fastPath:!1,warnings:t}}function Ee(e,t,n,r,i,a){let o=e.timescale,s=e.isVfr===!1&&n-t<=(e.tolerance??0)&&n<2*t;return n>t*1.075&&!s?e=>e(r,o,i,a):null}function De(e,t){let n=e.medianDelta,r=e.timescale;!n||!t||t<4*n||t<.5*r||e.warnings.push(`last frame held ${(t/r).toFixed(3)} s (${(t/n).toFixed(1)}x the median frame interval): the average is below the frame rate`)}function Oe(e,t){if(De(e,t),e.presentedFrames===null||e.presentedFrames<=0||e.firstPts===null||e.lastPts===null)return;let n=t>0?t:e.medianDelta??0;e.presentedAvgFps=Se(e.timescale,e.presentedFrames,e.lastPts-e.firstPts+n)}function ke(e,t){let n=0;for(let[r,i]of Ie(e)){if(t<n+r)return i;n+=r}return 0}async function Ae(){try{let{rateProfile:e}=await Promise.resolve().then(()=>(de(),ae));return e}catch{return null}}async function je(e){let t=e&&await Ae();return t?e(t):null}function Me(e,t){return e-t>=2?e-t:e}function Ne(e,t,n){let r=e.timescale,i=[...t.keys()].sort((e,t)=>e-t),a=i.map(e=>[e,t.get(e)??0]),o=0,s=0;for(let[e,t]of a)o+=t,s+=e*t;if(e.histogram=a,e.distinctDeltas=i.length,o===0)return;let c=0,l=i[0];for(let[e,t]of a)if(c+=t,c*2>=o){l=e;break}let u=i[0],d=0;for(let[e,t]of a)t>d&&(u=e,d=t);let f=me(r,i),p=Math.max(1,Math.round(Ge*l),f),m=0;for(let[e,t]of a)Math.abs(e-l)>p&&(m+=t);let h=i[0],g=i[i.length-1],_=o>=2&&m>0;if(e.minDelta=h,e.maxDelta=g,e.medianDelta=l,e.meanDelta=s/o,e.tolerance=p,e.minFps=R(r,g),e.maxFps=R(r,h),e.isVfr=_,e.vfrRatio=m/o,i.length===1){let t=R(r,h);t&&(e.nominalFps={...t,kind:`exact`})}else if(_&&d*2>=o){let t=R(r,u);t&&(e.dominantFps={rate:t,share:d/o})}e.timestampsQuantized=(n||f>0)&&!_&&i.length>1}function Pe(e){if(e.nominalFps||e.isVfr!==!1||e.distinctDeltas<2||!e.avgFps)return;let t=pe(e.meanDelta?e.timescale/e.meanDelta:e.avgFps.value);t&&(e.nominalFps={...t,kind:`snapped`})}function Fe(e){let t={n:0,d:0,constantCts:!0,ctsValue:0,ctsMin:1/0,ctsMax:-1/0,firstDelta:0,negativeDurations:!1,discontinuities:0,startDts:0,ctsMismatch:0},n=!1,r=e=>{n?e!==t.ctsValue&&(t.constantCts=!1):(t.ctsValue=e,n=!0),e<t.ctsMin&&(t.ctsMin=e),e>t.ctsMax&&(t.ctsMax=e)},i=0;for(let n=0;n<e.length;n++){let a=e[n];a.baseDts!==void 0&&a.baseDts!==null&&(n===0?t.startDts=a.baseDts:a.baseDts!==i&&t.discontinuities++,i=a.baseDts);let o=ye(a.durations),s=0;for(let e=0;e<o.n;e++){let n=o.counts?o.counts[e]:1;if(n<=0)continue;let r=o.values[e];s+=n,t.d+=n*r,i+=n*r,r<0&&(t.negativeDurations=!0),t.firstDelta===0&&r>0&&(t.firstDelta=r)}t.n+=s;let c=be(a.cts),l=0,u=0;if(c){for(let e=0;e<c.n;e++){let t=c.counts?c.counts[e]:1;if(t<=0)continue;u+=t;let n=Math.min(t,s-l);n<=0||(l+=n,r(c.values[e]))}u!==s&&t.ctsMismatch++}l<s&&r(0)}return n||(t.ctsMin=0,t.ctsMax=0),t}function*Ie(e){for(let t of e){let e=ye(t.durations);for(let t=0;t<e.n;t++){let n=e.counts?e.counts[t]:1;n>0&&(yield[n,e.values[t]])}}}function Le(e,t,n,r){if(n===-1/0)return 0;if(n===1/0)return r;let i=t,a=0;for(let[t,r]of Ie(e)){if(r===0){if(i<n){a+=t;continue}return a}if(i+(t-1)*r<n)a+=t,i+=t*r;else return a+Math.max(0,Math.min(t,Math.ceil((n-i)/r)))}return a}function Re(e,t,n){let r=t,i=0;for(let[t,a]of Ie(e)){if(n<i+t)return r+(n-i)*a;i+=t,r+=t*a}return r}function ze(e,t,n){let r=e.segments,i=Fe(r);i.ctsMismatch>0&&n.push(`composition offsets do not match the sample count in ${i.ctsMismatch} segment(s)`),i.discontinuities>0&&n.push(`decode timestamp discontinuities: ${i.discontinuities}`),i.negativeDurations&&n.push(`negative sample durations`),Number.isSafeInteger(i.d)||n.push(`duration sum exceeds 2^53-1`);let a=Te(t,n);if(a.sampleCount=i.n,a.durationSum=i.d,a.discontinuities=i.discontinuities,a.avgFps=Se(t,i.n,i.d),a.avgFpsString=j(a.avgFps),i.n===0)return a.presentedFrames=0,a;let o=e.reorderDepth??ge(i.ctsMin,i.ctsMax,i.firstDelta);a.reorderDepth=o;let s=1+o,{ws:c,we:l}=we(e.editWindow),u=e.tickQuantized??!1;if(!e.forceExpand&&i.constantCts&&i.discontinuities===0&&!i.negativeDurations){a.fastPath=!0;let e=i.startDts+i.ctsValue,t=Le(r,e,c,i.n),n=Math.max(t,Le(r,e,l,i.n));if(a.presentedFrames=n-t,n===t)return a;let o=Re(r,e,t),d=Re(r,e,n-1);a.firstPts=o,a.lastPts=d;let f=n-t-1,p=Me(f,s),m=new Map,h=0,g=1/0,_=0;for(let[e,n]of Ie(r)){if(h>=t+f)break;let r=Math.max(h,t),i=Math.min(h+e,t+f);if(i>r){if(n===0)a.duplicateTimestamps+=i-r;else{g=Math.min(g,n),_=Math.max(_,n);let i=Math.min(h+e,t+p);i>r&&(m.set(n,(m.get(n)??0)+(i-r)),a.deltaCount+=i-r)}}h+=e}return a.excludedTailDeltas=f-p,Ne(a,m,u),Pe(a),Oe(a,ke(r,n-1)),a.profile=Ee(a,g,_,e=>{let n=0;for(let[i,a]of Ie(r)){if(n>=t+f)break;let r=Math.max(n,t),o=Math.min(n+i,t+f);o>r&&e(o-r,a),n+=i}},n-t,d-o),a}let d=e.maxExpandedSamples??5e6;if(i.n>d)return n.push(`per-sample analysis skipped: ${i.n} samples exceed the limit of ${d}`),a;let f=new Float64Array(i.n),p=0,m=0;for(let e of r){e.baseDts!==void 0&&e.baseDts!==null&&(m=e.baseDts);let t=p,n=ye(e.durations);for(let e=0;e<n.n;e++){let t=n.counts?n.counts[e]:1,r=n.values[e];for(let e=0;e<t;e++)f[p++]=m,m+=r}let r=be(e.cts);if(r){let e=t;for(let t=0;t<r.n&&e<p;t++){let n=r.counts?r.counts[t]:1,i=r.values[t];for(let t=0;t<n&&e<p;t++)f[e++]+=i}}}let h=-1;for(let e=0;e<f.length;e++){let t=f[e];t>=c&&t<l&&(h<0||t>=f[h])&&(h=e)}let g=h>=0?ke(r,h):0;return Ve(a,Be(f,c,l),s,u),Oe(a,g),Pe(a),a}function Be(e,t,n){let r=e.length;if(t!==-1/0||n!==1/0){r=0;for(let i=0;i<e.length;i++){let a=e[i];a>=t&&a<n&&(e[r++]=a)}}let i=e.subarray(0,r);for(let e=1;e<r;e++)if(i[e]<i[e-1]){i.sort();break}return i}function Ve(e,t,n,r){let i=t.length;if(e.presentedFrames=i,i===0)return;e.firstPts=t[0],e.lastPts=t[i-1];let a=i-1,o=Me(a,n),s=new Map,c=1/0,l=0;for(let n=1;n<=a;n++){let r=t[n]-t[n-1];r<=0?e.duplicateTimestamps++:(c=Math.min(c,r),l=Math.max(l,r),n<=o&&(s.set(r,(s.get(r)??0)+1),e.deltaCount++))}e.excludedTailDeltas=a-o,Ne(e,s,r),e.profile=Ee(e,c,l,e=>{for(let n=1;n<=a;n++)e(1,t[n]-t[n-1])},i,t[a]-t[0])}function He(e){let t=-1/0,n=0;for(let r=0;r<e.length;r++){let i=e[r];i>t?t=i:t-i>n&&(n=t-i)}return n}function Ue(e,t,n){let r=e.pts,i=r.length,a=Te(t,n);if(a.sampleCount=i,i===0)return a.presentedFrames=0,a;let o=1/0,s=-1/0;for(let e=0;e<i;e++){let t=r[e];t<o&&(o=t),t>s&&(s=t)}let{ws:c,we:l}=we(e.editWindow),u=Be(Float64Array.from(r),c,l),d=e.reorderDepth;if(d===void 0){let t=0;for(let e=1;e<u.length;e++){let n=u[e]-u[e-1];if(n>0){t=n;break}}d=e.ctsRange?ge(e.ctsRange.min,e.ctsRange.max,t):ge(0,He(r),t)}a.reorderDepth=d,Ve(a,u,1+d,e.tickQuantized??!1),De(a,e.lastDuration);let f=e.lastDuration??a.medianDelta??0;return a.durationSum=s-o+f,a.avgFps=Se(t,i,a.durationSum),a.avgFpsString=j(a.avgFps),a.presentedAvgFps=a.avgFps,Pe(a),a}var We,Ge,Ke,qe,Je,Ye,z=t((()=>{F(),We=.001,Ge=.005,Ke=.15,qe=Ke/2,Je=.5,Ye=(()=>{let e=[];for(let t of[24,30,48,60,120,240])e.push(M(t*1e3,1001));for(let t=1;t<=240;t++)e.push(M(t,1));return e})()}));function Xe(e){return e.replace(/[^\x20-\x7e]/g,`?`)}function B(e,t,n,r=0){let i=Math.min(e.byteLength,n);if(t+8>i)return null;let a=e.getUint32(t),o=m(e,t+4),s=8,c=a;if(a===1){if(t+16>i)return null;let n=e.getBigUint64(t+8);if(n>BigInt(2**53-1))throw new H(`corrupt file: box '${Xe(o)}' at ${r+t} has a size above 2^53-1`);c=Number(n),s=16}else a===0&&(c=n-t);if(o===`uuid`&&(s+=16),c<s)throw new H(`corrupt file: box '${Xe(o)}' at ${r+t} is smaller than its header`);let l=t+c;return{type:o,start:t,size:c,headerSize:s,end:Math.min(l,n),truncated:l>n}}function*Ze(e,t,n,r){let i=t;for(;i+8<=n;){let t;try{t=B(e,i,n)}catch(e){r?.push(e.message.replace(/^corrupt file: /,`ignored invalid child: `));return}if(!t)return;yield t,i=t.start+t.size}}function V(e,t,n,r){let i=e.getBigUint64(t);if(i>BigInt(2**53-1))throw new H(`unsupported: box '${Xe(n)}' at ${r} holds a value above 2^53-1`);return Number(i)}function Qe(e,t,n,r){let i=e.getBigInt64(t);if(i>BigInt(2**53-1)||i<-BigInt(2**53-1))throw new H(`unsupported: box '${Xe(n)}' at ${r} holds a value beyond 2^53-1`);return Number(i)}function $e(e,t,n,r,i){let a=Math.max(0,Math.floor(t/n));return e>a?(i.push(`${r} declares ${e} entries but its box holds only ${a}`),a):e}var H,et=t((()=>{H=class extends Error{constructor(e){super(e),this.name=`IsoBmffError`}}}));function tt(){if(U)return U;U=new Map;for(let e of it.split(`|`)){let t=e.indexOf(`:`),n=e.slice(0,t);for(let r=t+1;r+4<=e.length;r+=4)U.set(e.slice(r,r+4),n)}return U}function nt(e){return tt().has(e)}function rt(e,t=null,n=!1){return t!==null&&at[t]?at[t]:e===`dvh1`&&n?`hevc`:tt().get(e)??`unknown`}var it,U,at,ot=t((()=>{it=`rawvideo:raw yuv22vuyyuvs|v210:v210|mjpeg:jpegmjpaAVDJAVRndmb1|mpeg4:mp4vDIVXXVID3IV2|h263:h263s263H263|dvvideo:dvcpdvc dvppdv5pdv5nAVdvAVd1dvhqdvhpdvh1dvh2dvh3dvh4dvh5dvh6|qtrle:rle |cinepak:cvid|svq1:SVQ1svq1svqi|svq3:SVQ3|vvc:vvc1vvi1|hevc:hev1hvc1dvhe|h264:avc1avc2avc3avc4ai5pai5qai52ai53ai55ai56ai1pai1qai12ai13ai15ai16AVinaivxdva1dvav|evc:evc1|vp8:vp08|vp9:vp09|av1:av01|mpeg1video:m1v m1v1mpegmp1v|mpeg2video:m2v1hdv1hdv2hdv3hdv4hdv5hdv6hdv7hdv8hdv9hdvamx5nmx5pmx4nmx4pmx3nmx3pxd51xd54xd55xd59xd5axd5bxd5cxd5dxd5exd5fxdv1xdv2xdv3xdv4xdv5xdv6xdv7xdv8xdv9xdvaxdvbxdvcxdvdxdvexdvfxdhdxdh2AVmpmp2v|jpeg2000:mjp2|png:png MNG |gif:gif |tiff:tiff|vc1:vc-1|cavs:avs2|avs3:avs3|dirac:drac|dnxhd:AVdnAVdh|prores:apchapcnapcsapcoap4hap4x|prores_raw:aprnaprh|hap:Hap1Hap5HapYHapAHapM|cfhd:CFHD|lcevc:lvc1|apv:apv1`,U=null,at={32:`mpeg4`,33:`h264`,35:`hevc`,51:`vvc`,96:`mpeg2video`,97:`mpeg2video`,98:`mpeg2video`,99:`mpeg2video`,100:`mpeg2video`,101:`mpeg2video`,106:`mpeg1video`,108:`mjpeg`,109:`png`,110:`jpeg2000`,163:`vc1`,164:`dirac`,177:`vp9`}}));function st(e){return{fileSize:e,brand:null,compatibleBrands:[],hasFtyp:!1,hasMvhd:!1,timescale:1,duration:0,matrix:Int32Array.from(lt),tracks:[],chapterTrackIds:new Set,hasMvex:!1,trex:new Map,mehdDuration:null,moofCount:0,topLevel:[],truncated:!1,ffprobeMoofLimit:1/0,ffprobeReject:null,warnings:[]}}function ct(){return{id:0,enabled:!1,handler:``,timescale:0,hasMdhd:!1,mdhdDuration:0,matrix:Int32Array.from(lt),sampleEntry:``,originalFormat:null,stsdCount:0,width:0,height:0,esdsObjectType:null,hasHvcc:!1,sttsCounts:new Uint32Array,sttsDeltas:new Uint32Array,cttsCounts:null,cttsOffsets:null,dtsShift:0,sampleCount:null,sampleSize:0,overruns:[],edits:[],fragments:[],warnings:[],dv:null,stss:null,stsz:null,stz2:null,stsc:null,stco:null,co64:null}}var lt,ut=t((()=>{lt=[65536,0,0,0,65536,0,0,0,1<<30]}));function dt(e){let t=0;for(let n=256;n<=2048;n<<=1)e&n&&(t+=4);return t}function ft(e,t,n,r,i,a,o=i+t-8){if(t+8>n)return null;let s=f(e,t+1),c=e.getUint32(t+4),l=r.trex.get(c),u=t+8,d=e=>u+e<=n,p=s&131072?i:a;if(s&1){if(!d(8))return null;p=V(e,u,`tfhd`,o),u+=8}s&2&&(u+=4);let m=l?l.duration:null;if(s&8){if(!d(4))return null;m=e.getUint32(u),u+=4}let h=l?l.size:0;if(s&16){if(!d(4))return null;h=e.getUint32(u)}return{flags:s,trackId:c,baseDataOffset:p,defaultDuration:m,defaultSize:h,trexMissing:!l}}function pt(e,t,n,r,i,a,o,s){let c=f(e,t+1),l=e.getUint32(t+4),u=t+8,d=i;c&1&&(d=r.baseDataOffset+e.getInt32(u),u+=4),c&4&&(u+=4);let p=dt(c),m;p>0?m=$e(l,n-u,p,`trun`,o):(m=l,m>s&&(o.push(`trun count ${l} limited to ${s}`),m=s));let h=p>0&&m<l,g=!!(c&256);if(!g&&r.defaultDuration===null&&m>0)throw new H(`corrupt file: no sample duration for track ${r.trackId}`);let _=r.defaultDuration??0,v=g?new Uint32Array(m):null,y=c&2048?new Int32Array(m):null,b=!!(c&512),x=g?0:_*m,S=d,C=0,w=0;if(p>0)for(let t=0;t<m;t++){if(g){let n=e.getUint32(u);v[t]=n,x+=n,u+=4}let n=r.defaultSize;b&&(n=e.getUint32(u),u+=4),c&1024&&(u+=4),y&&(y[t]=e.getInt32(u),u+=4),S<a&&C++,w===t&&S+n<=a&&w++,S+=n}if(!b){let e=r.defaultSize,t=Math.max(0,a-d);C=e>0?Math.min(m,Math.ceil(t/e)):Math.min(m,t),w=e>0?Math.min(m,Math.floor(t/e)):C,S=d+e*m}return{fragment:{moofIndex:0,baseDts:null,count:m,durations:v,defaultDuration:_,cts:y,durationSum:x,present:C,complete:w,trexMissing:r.trexMissing,overrun:h},dataEnd:S}}function mt(e,t,n,r,i,a){let o=n,s=!1,c=e=>{i.ffprobeReject||={moof:r,reason:e}},l=new Map;for(let e of i.tracks)l.has(e.id)||l.set(e.id,e);for(let u of Ze(e,t.start+t.headerSize,t.end,i.warnings)){if(u.type!==`traf`)continue;let t=null,d,f=null,p=0;for(let m of Ze(e,u.start+u.headerSize,u.end,i.warnings)){let u=m.start+m.headerSize;if(m.type===`tfhd`){if(t=ft(e,u,m.end,i,n,o,n+m.start),!t)continue;t.trackId===0?c(`rejects this file: tfhd with track_ID 0`):t.trexMissing||(s=!0),p=t.baseDataOffset,d=l.get(t.trackId),d||i.warnings.push(`fragment for unknown track ${t.trackId}`)}else if(m.type===`tfdt`&&u+8<=m.end)f=e.getUint8(u)===1&&u+12<=m.end?V(e,u+4,`tfdt`,n+m.start):e.getUint32(u+4);else if(m.type===`trun`&&u+8<=m.end){if(s?(!t||t.trexMissing)&&c(`misreads this file: a traf without trex is read as another track`):c(`rejects this file: trun without a tfhd that has a trex`),!t||!d)continue;let n=d,{fragment:l,dataEnd:h}=pt(e,u,m.end,t,p,i.fileSize,n.warnings,a);l.moofIndex=r,l.baseDts=f,f=null,p=h,o=h,l.trexMissing&&!n.warnings.includes(gt)&&n.warnings.push(gt),n.fragments.push(l)}}}}function ht(e,t,n){let r=t.start+t.headerSize,i=r<t.end&&e.getUint8(r)===1;if(r+(i?32:24)>t.end)throw new H(`corrupt file: box 'sidx' at ${n} is truncated`);let a=r+12,o=i?V(e,a,`sidx`,n):e.getUint32(a),s=i?V(e,a+8,`sidx`,n):e.getUint32(a+4);a+=i?16:8;let c=e.getUint16(a+2);a+=4;let l=n+(t.end-t.start),u=l+s,d=0,f=!1,p=[];for(let n=0;n<c&&a+12<=t.end;n++,a+=12){let t=e.getUint32(a);t&2147483648&&(f=!0);let n=t&2147483647;p.push([u,n]),u+=n,d+=e.getUint32(a+4)}return{start:n,end:l,referenceId:e.getUint32(r+4),timescale:e.getUint32(r+8),earliestPts:o,firstOffset:s,coverageEnd:u,durationSum:d,subsegments:p,hierarchical:f}}var gt,_t=t((()=>{_(),et(),gt=`no trex: sample defaults taken from tfhd`}));function W(e,t,n,r=0){return vt(Ze(e,t.start+t.headerSize+r,t.end,n.warnings),n,t.type)}function*vt(e,t,n){for(let r of e){if(r.truncated){if(t.strict)throw new H(`incomplete file: moov is truncated`);t.warnings.push(`'${r.type}' overruns '${n}'`)}yield r}}function G(e){return e.start+e.headerSize}function yt(e,t){let n=new Int32Array(9);for(let r=0;r<9;r++)n[r]=e.getInt32(t+r*4);return n}function bt(e){return e>0&&e<=2147483647?e:1}function xt(e){return{start:G(e),end:e.end}}function St(e,t,n){let r=G(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=$e(i,t.end-r-8,8,`stts`,n.warnings);a<i&&n.overruns.push(`stts`);let o=new Uint32Array(a),s=new Uint32Array(a),c=!1;for(let t=0;t<a;t++)o[t]=e.getUint32(r+8+t*8),s[t]=e.getUint32(r+12+t*8),s[t]>4294487295&&(c=!0);c&&Ct(o,s,n.warnings),n.sttsCounts=o,n.sttsDeltas=s}function Ct(e,t,n){let r=0n,i=0n;for(let a=0;a<e.length;a++){let o=BigInt(e[a]),s=t[a];if(s>4294487295){n.push(`stts delta ${s} clipped to 1`);let e=s|0;s=1,i+=BigInt(e<0?e:1)*o}else i+=BigInt(s)*o;if(r+=BigInt(s)*o,r>i){let e=(r-i)/(o>0n?o:1n),t=BigInt(s)>e?e:BigInt(s-1>>>0);r-=t*o,s=Number(BigInt(s)-t&4294967295n)}t[a]=s}}function wt(e,t,n){let r=G(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=$e(i,t.end-r-8,8,`ctts`,n.warnings);if(a<i&&n.overruns.push(`ctts`),a===0)return;let o=[],s=[],c=0;for(let t=0;t<a;t++){let n=e.getInt32(r+8+t*8),a=e.getInt32(r+12+t*8);n<=0||(o.push(n),s.push(a),t+2<i&&a<0&&(c=Math.max(c,a===-2147483648?2147483647:-a)))}n.cttsCounts=Uint32Array.from(o),n.cttsOffsets=Int32Array.from(s),n.dtsShift=c}function Tt(e,t,n,r){let i=G(t);if(i+8>t.end)return;let a=e.getUint8(i),o=a===1?20:12,s=e.getUint32(i+4),c=t.end-i-8,l=s*o===c?s:Math.floor(c/o);if(l!==s&&n.warnings.push(`elst declares ${s} entries but its box holds ${l}`),l===0)return;n.edits.length&&(n.warnings.push(`duplicated elst: the last one is used`),n.edits=[]);let u=r.base+t.start;for(let t=0;t<l;t++){let r=i+8+t*o;a===1?n.edits.push({duration:V(e,r,`elst`,u),mediaTime:Qe(e,r+8,`elst`,u),rate:e.getInt32(r+16)/65536}):n.edits.push({duration:e.getUint32(r),mediaTime:e.getInt32(r+4),rate:e.getInt32(r+8)/65536})}}function Et(e,t,n){let r=t+4,i=()=>{if(r+2>n)return null;let t=e.getUint8(r++),i=0;for(let t=0;t<4&&r<n;t++){let t=e.getUint8(r++);if(i=i*128+(t&127),!(t&128))break}return[t,i]},a=i();if(a&&a[0]===3){if(r+3>n)return null;let t=e.getUint8(r+2);r+=3,t&128&&(r+=2),t&64&&r<n&&(r+=1+e.getUint8(r)),t&32&&(r+=2),a=i()}return a&&a[0]===4&&r<n?e.getUint8(r):null}function Dt(e,t,n,r){let i=G(t);if(i+8>t.end||(n.stsdCount=e.getUint32(i+4),n.stsdCount===0))return;let a;try{a=B(e,i+8,t.end)}catch(e){n.warnings.push(e.message);return}if(a&&(n.sampleEntry=a.type,!(n.handler===`soun`||a.start+86>a.end))){n.width=e.getUint16(a.start+32),n.height=e.getUint16(a.start+34);for(let t of Ze(e,a.start+86,a.end,r.warnings))if(t.type===`esds`)n.esdsObjectType=Et(e,G(t),t.end);else if(t.type===`hvcC`)n.hasHvcc=!0;else if(t.type===`sinf`)for(let i of Ze(e,G(t),t.end,r.warnings))i.type===`frma`&&G(i)+4<=i.end&&(n.originalFormat=m(e,G(i)))}}function Ot(e,t,n,r){n.dv=e;for(let i of W(e,t,r)){let t=G(i);switch(i.type){case`stsd`:Dt(e,i,n,r);break;case`stts`:St(e,i,n);break;case`ctts`:wt(e,i,n);break;case`stsz`:case`stz2`:t+12<=i.end&&(n.sampleCount=e.getUint32(t+8),n.sampleSize=i.type===`stsz`?e.getUint32(t+4):0),i.type===`stsz`?n.stsz=xt(i):n.stz2=xt(i);break;case`stss`:n.stss=xt(i),t+8<=i.end&&e.getUint32(t+4)>Math.floor((i.end-t-8)/4)&&n.overruns.push(`stss`);break;case`stsc`:n.stsc=xt(i);break;case`stco`:n.stco=xt(i);break;case`co64`:n.co64=xt(i)}}}function kt(e,t,n,r){for(let i of W(e,t,r)){let t=G(i);if(i.type===`mdhd`&&t+24<=i.end){let r=e.getUint8(t)===1;if(r&&t+32>i.end)continue;n.hasMdhd=!0;let a=e.getUint32(t+(r?20:12));if(n.timescale=bt(a),n.timescale!==a&&n.warnings.push(`invalid mdhd timescale ${a}, using 1`),r){let r=e.getBigUint64(t+24);n.mdhdDuration=r===18446744073709551615n?0:Number(r)}else{let r=e.getUint32(t+16);n.mdhdDuration=r===Mt?0:r}}else if(i.type===`hdlr`&&t+12<=i.end)n.handler=m(e,t+8);else if(i.type===`minf`)for(let t of W(e,i,r))t.type===`stbl`&&Ot(e,t,n,r)}}function At(e,t,n,r){let i=ct();for(let a of W(e,t,r)){let t=G(a);if(a.type===`tkhd`&&t+84<=a.end){let n=e.getUint8(t)===1;if(n&&t+96>a.end)continue;i.enabled=(e.getUint8(t+3)&1)==1,i.id=e.getUint32(t+(n?20:12)),i.matrix=yt(e,t+(n?52:40))}else if(a.type===`edts`)for(let t of W(e,a,r))t.type===`elst`&&Tt(e,t,i,r);else if(a.type===`mdia`)kt(e,a,i,r);else if(a.type===`tref`){for(let t of W(e,a,r))if(t.type===`chap`)for(let r=G(t);r+4<=t.end;r+=4)n.chapterTrackIds.add(e.getUint32(r))}}return i}function jt(e,t,n,r,i=0){let a={strict:r,warnings:n.warnings,base:i};for(let r of W(e,t,a)){let t=G(r);switch(r.type){case`mvhd`:{if(t+24>r.end)break;let i=e.getUint8(t)===1;if(i&&t+84>r.end)break;n.hasMvhd=!0,n.timescale=bt(e.getUint32(t+(i?20:12))),n.duration=i?Number(e.getBigUint64(t+24)):e.getUint32(t+16),t+(i?84:72)<=r.end&&(n.matrix=yt(e,t+(i?48:36)));break}case`trak`:n.tracks.push(At(e,r,n,a));break;case`mvex`:n.hasMvex=!0;for(let t of W(e,r,a)){let r=G(t);t.type===`trex`&&r+24<=t.end?n.trex.set(e.getUint32(r+4),{duration:e.getUint32(r+12),size:e.getUint32(r+16)}):t.type===`mehd`&&r+8<=t.end&&(n.mehdDuration=e.getUint8(r)===1&&r+12<=t.end?V(e,r+4,`mehd`,i+t.start):e.getUint32(r+4))}break;case`cmov`:throw new H(`unsupported: compressed movie header (cmov)`)}}}var Mt,Nt=t((()=>{_(),et(),ut(),Mt=4294967295}));function Pt(){return{windows:[],hints:[],next:0,mfraTried:!1}}function Ft(e,t,n){for(let[r,i]of e.windows)if(t>=r&&t+n<=r+i.byteLength)return new DataView(i.buffer,i.byteOffset+t-r,n);return null}async function It(e,t,n,r){for(;t.next<t.hints.length&&t.hints[t.next]<=n;)t.next++;let i=[];for(let n=t.next;n<t.hints.length&&i.length<8;n++)t.hints[n]<e.size&&i.push([t.hints[n],Math.min(r,e.size-t.hints[n])]);if(t.next+=i.length,!i.length)return;let a=await e.readMany(i,4);t.windows=i.map(([e],t)=>[e,new DataView(a[t].buffer,a[t].byteOffset,a[t].byteLength)]),t.windows.every(([,e])=>Lt(e))||(t.hints=[],t.next=0)}function Lt(e){return e.byteLength>=8&&e.getUint32(0)>=8&&Ut.has(m(e,4))}function Rt(e,t,n,r,i=2**53-1){for(let a of Ze(e,t,n)){let t=a.start+a.headerSize;if(a.type!==`tfra`||t+16>a.end)continue;let n=e.getUint8(t)===1,o=e.getUint32(t+8),s=(n?16:8)+(o>>4&3)+(o>>2&3)+(o&3)+3,c=Math.min(e.getUint32(t+12),Math.floor((a.end-t-16)/s));for(let a=0;a<c;a++){let o=t+16+a*s,c=n?e.getBigUint64(o+8):BigInt(e.getUint32(o+4));c>0n&&c<BigInt(i)&&r.add(Number(c))}}}async function zt(e){try{return await Bt(e)}catch(t){if(e.signal?.aborted||t?.name===`AbortError`)throw t;return[]}}async function Bt(e){let t=e.size,n=Math.min(t,Vt);if(n<16)return[];let r=await e.view(t-n,n,0);if(m(r,n-12)!==`mfro`)return[];let i=r.getUint32(n-4);if(i<24||i>Math.min(t,Ht))return[];let a=i<=n?new DataView(r.buffer,r.byteOffset+n-i,i):await e.view(t-i,i,0),o;try{o=B(a,0,i)}catch{return[]}if(!o||o.type!==`mfra`)return[];let s=new Set;return Rt(a,o.headerSize,o.end,s,t),[...s].sort((e,t)=>e-t)}var Vt,Ht,Ut,Wt=t((()=>{_(),et(),Vt=65536,Ht=16777216,Ut=new Set([`moof`,`styp`,`sidx`,`ssix`,`emsg`,`prft`,`free`,`skip`,`uuid`])}));function Gt(e,t,n){if(!(n>0))return 0;let r=BigInt(Math.abs(e))*BigInt(t),i=BigInt(n),a=Number((r+i/2n)/i);return e<0?-a:a}function Kt(e){let t=0,n=0;for(let r=0;r<e.sttsCounts.length;r++)t+=e.sttsCounts[r],n+=e.sttsCounts[r]*e.sttsDeltas[r];let r=0;for(let t of e.fragments)r+=t.count;return{moovSamples:t,moovDuration:n,fragmentSamples:r}}function qt(e,t,n){let r=0n,i=0n;if(n){for(let t=0;t<e.sttsCounts.length;t++)r+=BigInt(e.sttsCounts[t]),i+=BigInt(e.sttsCounts[t])*BigInt(e.sttsDeltas[t]);i<=0n&&(r=0n,i=0n)}for(let n of e.fragments)t(n.moofIndex,n.trexMissing)&&(r+=BigInt(n.count),i+=BigInt(n.durationSum));return[r,i]}function Jt(e,t,n){return t<=0n||n<=0n?null:N(BigInt(e)*t,n,P)}function Yt(e,t){let n=e.timescale,r=(e,n)=>e<t.ffprobeMoofLimit&&!n,[i,a]=qt(e,()=>!0,!0),[o,s]=qt(e,r,!0),c=e.overruns.includes(`stts`)||e.fragments.some(e=>e.overrun&&r(e.moofIndex,e.trexMissing))?null:Jt(n,o,s);return{avg:Jt(n,i,a),ffprobe:c?j(c):null}}function Xt(e){let t=e.dv,n=e=>t&&e&&e.start+8<=e.end?t.getUint32(e.start+4):0,r=n(e.co64??e.stco),i=e.sttsCounts.length>0||e.overruns.includes(`stts`),a=e.sampleCount??0;return r>0&&(!i||n(e.stsc)===0||e.sampleSize===0&&a===0)||a>0&&r===0}function Zt(e,t){let n=0,r=0,i=0,a=null;for(let o of e.edits){let s=Gt(o.duration,e.timescale,t);r+=s,o.mediaTime===-1?a||(n+=s):(i++,a||={mediaTime:o.mediaTime,duration:s,rate:o.rate})}return{emptyBefore:n,firstMedia:a,editSum:r,mediaEdits:i}}function Qt(e,t,n,r){let i=e.mdhdDuration;n.moovDuration>0&&(i=Math.min(i,n.moovDuration));let a=e.edits.length>0&&n.moovSamples>0;a&&(i=Math.min(i,r.editSum));let o=n.moovDuration,s=null,c=en(e,t);for(let t of e.fragments)t.baseDts!==null&&(o=t.baseDts),s===null&&t.count>0&&(s=o-c+(t.cts?t.cts[0]:0)),o+=t.durationSum,o>i&&(i=o);let l=$t(e,t);l!==null&&l>i&&(i=l);let u=null;return u=a?r.emptyBefore:n.moovSamples>0?e.cttsOffsets&&e.cttsOffsets.length?e.cttsOffsets[0]:0:s,{durationTs:i,startPts:u}}function $t(e,t){if(t.ffprobeMoofLimit===1/0)return null;let n=0,r=null;for(let i of t.topLevel){if(i.type===`moof`&&++n>t.ffprobeMoofLimit)break;let a=i.sidx;a&&!a.hierarchical&&a.referenceId===e.id&&a.timescale===e.timescale&&(r=a.earliestPts+a.durationSum)}return r}function en(e,t){let n=0,r=0,i=0;return e.edits.forEach((e,t)=>{t===0&&e.mediaTime===-1?(n=e.duration,i=1):t===i&&e.mediaTime>=0&&(r=e.mediaTime)}),!n&&!r?0:r-Gt(n,e.timescale,t.timescale)}function tn(e,t,n){let r=new Float64Array(e.length+1),i=new Float64Array(e.length),a=0,o=0;for(let s=0;s<e.length&&o<n;s++)e[s]<=0||(r[a]=o,i[a]=t[s],o+=Math.min(e[s],n-o),a++);return r[a]=o,{count:a,starts:r,values:i,total:o}}function nn(e){let t=e.starts,n=0;return r=>{if(r>=t[n]&&r<t[n+1])return n;let i=0,a=e.count-1;for(;i<a;){let e=Math.ceil((i+a)/2);t[e]<=r?i=e:a=e-1}return n=i,i}}function rn(e,t){let n=e.stss;if(!n||!e.dv)return{all:!0,list:new Float64Array};let r=e.dv,i=n.start+8<=n.end?Math.min(r.getUint32(n.start+4),Math.floor((n.end-n.start-8)/4)):0;if(i===0)return{all:!1,list:Float64Array.of(0)};let a=+(r.getUint32(n.start+8)>0),o=new Float64Array(i),s=0,c=-1;for(let e=0;e<i;e++){let i=r.getUint32(n.start+8+e*4)-a;if(i<=c||i>=t)break;o[s++]=i,c=i}return{all:!1,list:o.subarray(0,s)}}function an(e,t,n){if(n>=t)return-1;if(e.all)return n;let r=e.list,i=0,a=r.length;for(;i<a;){let e=Math.floor((i+a)/2);r[e]<n?i=e+1:a=e}return i<r.length?r[i]:-1}function on(e,t){if(t<0)return-1;if(e.all)return t;let n=e.list,r=0,i=n.length;for(;r<i;){let e=Math.floor((r+i)/2);n[e]<=t?r=e+1:i=e}return r>0?n[r-1]:-1}function sn(e,t,n){let r=n;r<=0||e.len===0&&(e.first=t,e.last=t,e.len=1,r--,r===0)||((e.len>=2&&e.last!==e.first||r>=2&&t!==e.first)&&(e.bad=!0),e.last=t,e.len+=r)}function cn(e,t,n,r,i){let a=r,o=Math.min(i,t.total-r),s=0;for(;o>0&&!e.bad;){let r=n(a),i=Math.min(t.starts[r+1]-a,o);sn(e,t.values[r],i),a+=i,o-=i,s++}return s}function ln(e,t){return e.bad||e.len===0||!(e.first>0)?null:N(t,e.first,P)}function un(e,t,n,r,i){let a=Math.min(n,e.sampleCount??0);if(a<=0||e.sttsCounts.length===0||e.overruns.length>0)return null;let o=e.timescale,s=tn(e.sttsCounts,e.sttsDeltas,a),c=nn(s),l={len:0,first:0,last:0,bad:!1};if(e.edits.length===0)return cn(l,s,c,0,a),ln(l,o);if(!e.edits.some(e=>e.mediaTime!==-1))return null;let u=!0;for(let e=1;e<s.count&&u;e++)u=s.values[e]===s.values[0];if(u)return s.values[0]>0?N(o,s.values[0],P):null;let d=Math.min(r,gn),f=0,p=!1,m=e=>(f+=e,f>d&&(p=!0),p),h=new Float64Array(s.count+1);for(let e=0;e<s.count;e++)h[e+1]=h[e]+(s.starts[e+1]-s.starts[e])*s.values[e];let g=e=>{let t=c(e);return h[t]+(e-s.starts[t])*s.values[t]},_=e=>s.values[c(e)],v=!!e.cttsCounts&&e.cttsCounts.length>0,y=v?tn(e.cttsCounts,e.cttsOffsets,a):null,b=y?nn(y):null,x=e=>y&&e<y.total?y.values[b(e)]:0,S=rn(e,a),C=e=>an(S,a,e),w=e=>on(S,e),T=e.dtsShift,E=(e,t)=>{let n=0,r=t;for(;n<r;){let t=Math.floor((n+r)/2);g(t)>=e?r=t:n=t+1}return n},D=(e,t)=>{let n=T>0?e-T:e,r=-1,i=a;for(g(a-1)-T<n&&(r=a-1);i-r>1;){let e=Math.floor((r+i)/2),t=g(e)-T;t>=n&&(i=e),t<=n&&(r=e)}let o=t?r:w(r);if(o>0){let e=E(g(o),o);if(e<o){if(t)o=e;else{let t=C(e);t>=0&&t<o&&(o=t)}}}if(v&&o>=0){let e=w(o);for(;e>=0&&!m(1)&&g(e)-T+x(e)>n;)e=w(e-1);o=e}return o},O=0,k=!1;for(let n of e.edits){let r=n.mediaTime;if(!k&&r===-1)continue;if(k=!0,m(64))break;let i=Gt(n.duration,e.timescale,t.timescale),o=D(r,!1);if(o<0&&!p&&(o=D(r,!0)),p)break;o<0&&(o=0,O=0),v&&(O=o);let u=-1;if(v){let e=!1;for(let t=C(o);t>=0&&!m(1);t=C(t+1)){let n=t+1<a?_(t):i;if(g(t)+x(t)+n>=i+r){if(e){u=t;break}e=!0}}if(p)break}else{let e=o,t=a;for(;e<t;){let n=Math.floor((e+t)/2);(n+1<a?g(n+1):g(a-1)+i)>=i+r?t=n:e=n+1}e<a&&(u=C(e))}let d=u<0?a-o:u-o+1,f=Math.min(d,a-O);if(f>0&&(m(cn(l,s,c,O,f)),O+=f),l.bad)return null;if(p)break}return p?(i?.push(`r_frame_rate not reproduced: edit list walk limit reached`),null):ln(l,o)}function dn(e,t,n){let r=[],i=[],a=n;for(let n=0;n<e.length&&a>0;n++){let o=Math.min(e[n],a);o<=0||(r.push(o),i.push(t[n]),a-=o)}return{counts:r,values:i}}function fn(e,t){let n=[];if(t>0){let r=dn(e.sttsCounts,e.sttsDeltas,t),i=e.cttsCounts&&e.cttsOffsets?dn(e.cttsCounts,e.cttsOffsets,t):null;n.push({durations:{counts:r.counts,deltas:r.values},cts:i?{counts:i.counts,offsets:i.values}:null})}for(let t of e.fragments){let e=t.complete;n.push({baseDts:t.baseDts,durations:t.durations?t.durations.subarray(0,e):{counts:[e],deltas:[t.defaultDuration]},cts:t.cts?t.cts.subarray(0,e):null})}return n}function pn(e,t,n){let r=t.firstMedia;if(!r)return e.edits.length&&n.push(`edit list has no media edit`),null;t.mediaEdits>1&&n.push(`edit list has ${t.mediaEdits} media edits, only the first is applied`),r.rate!==1&&n.push(`edit rate ${r.rate} is not applied`);let i=e.fragments.length>0||r.duration<=0?r.mediaTime:r.mediaTime+r.duration;return{start:r.mediaTime,end:i}}function mn(e,t,n){let r=e.dv,i=e.co64??e.stco,a=e.stsz??e.stz2;if(!r||!i||!a||!e.stsc||i.start+8>i.end||e.stsc.start+8>e.stsc.end||a.start+12>a.end)return null;let o=!!e.co64,s=Math.min(r.getUint32(i.start+4),Math.floor((i.end-i.start-8)/(o?8:4))),c=Math.min(r.getUint32(e.stsc.start+4),Math.floor((e.stsc.end-e.stsc.start-8)/12)),l=e.stsz?r.getUint32(a.start+4):0,u=e.stz2?r.getUint8(a.start+7):32,d=Math.min(r.getUint32(a.start+8),n),f=a.end-a.start-12,p=e=>{if(l)return l;let t=a.start+12;if(u===32)return(e+1)*4<=f?r.getUint32(t+e*4):0;if(u===16)return(e+1)*2<=f?r.getUint16(t+e*2):0;if(u===8)return e<f?r.getUint8(t+e):0;let n=e>>1<f?r.getUint8(t+(e>>1)):0;return e&1?n&15:n>>4},m=0,h=0,g=0,_=0;for(let n=0;n<s&&g<d;n++){for(;_+1<c&&r.getUint32(e.stsc.start+8+(_+1)*12)<=n+1;)_++;let a=c?r.getUint32(e.stsc.start+12+_*12):0,s=o?Number(r.getBigUint64(i.start+8+n*8)):r.getUint32(i.start+8+n*4);for(let e=0;e<a&&g<d;e++,g++){let e=p(g);s<t&&m++,s+e<=t&&h===g&&h++,s+=e}}return{present:m,complete:h}}function hn(e,t){let n=[16n,16n,30n],r=new Int32Array(9);for(let i=0;i<3;i++)for(let a=0;a<3;a++){let o=0n;for(let r=0;r<3;r++)o+=BigInt(e[i*3+r])*BigInt(t[r*3+a])>>n[r];r[i*3+a]=Number(BigInt.asIntN(32,o))}if(r[0]===65536&&r[4]===65536&&r[8]===1<<30&&!r[1]&&!r[2]&&!r[3]&&!r[5]&&!r[6]&&!r[7])return 0;let i=r[0]/65536,a=r[1]/65536,o=Math.hypot(i,r[3]/65536),s=Math.hypot(a,r[4]/65536);return o===0||s===0?0:Math.trunc(-(Math.atan2(a/s,i/o)*180/Math.PI))||0}var gn,_n=t((()=>{F(),gn=2e6})),vn=n({IsoBmffError:()=>H,MOOF_HARD_CAP:()=>Pn,MOOV_HARD_CAP:()=>Nn,MOOV_SUSPECT_CAP:()=>Mn,analyzeIsoBmff:()=>jn,analyzeIsoBmffDetailed:()=>An});function yn(e,t){return t.signal?.aborted===!0||typeof e==`object`&&!!e&&e.name===`AbortError`}function bn(e){return e.brand===`qt `||!e.hasFtyp&&e.topLevel.length>0?`mov`:`mp4`}async function xn(e,t,n){let r=e.size,i=t.start+t.size>r;if(!i&&t.size>268435456)throw new H(`unsupported: moov larger than 256 MiB`);let a=i?Math.min(r-t.start,Mn):t.size,o=await e.view(t.start,a,0),s=B(o,0,o.byteLength);if(!s)throw new H(`incomplete file: moov is truncated`);jt(o,s,n,i,t.start),i&&n.warnings.push(`moov size exceeds the file; parsed what is there`)}async function Sn(e,t,n){let r=e.size,i=0,a=t.readAhead.head,o=!1,s=0,c=!1,l=Pt(),u=async(t,n,r)=>Ft(l,t,n)??e.view(t,n,r);for(;i+8<=r;){if(e.checkAbort(),++s>Fn){n.warnings.push(`too many top-level boxes`);break}let d=c&&!o&&r-i<=16777216?r-i:a,f=await u(i,Math.min(Ln,r-i),d),p;try{p=B(f,0,r-i,i)}catch(e){if(!o)throw e;n.warnings.push(`ignored trailing data at ${i}: ${e.message}`);break}if(!p)break;let m={...p,start:i,end:Math.min(i+p.size,r)},h=i+p.size;p.truncated&&(n.truncated=!0,n.warnings.push(`'${m.type}' at ${i} is truncated`));let g={type:m.type,start:i,end:m.end,sidx:null};if(n.topLevel.push(g),m.type===`ftyp`){let t=await e.view(i,Math.min(m.size,1024)),r=m.headerSize;if(r+4<=t.byteLength){n.hasFtyp=!0,n.brand=String.fromCharCode(t.getUint8(r),t.getUint8(r+1),t.getUint8(r+2),t.getUint8(r+3));for(let e=r+8;e+4<=t.byteLength;e+=4)n.compatibleBrands.push(String.fromCharCode(t.getUint8(e),t.getUint8(e+1),t.getUint8(e+2),t.getUint8(e+3)))}}else if(m.type===`moov`)o?n.warnings.push(`ignored a second moov at ${i}`):(await xn(e,m,n),o=!0);else if(m.type===`moof`){if(!o)throw new H(`corrupt file: movie fragment (moof) before moov`);if(m.size>67108864)throw new H(`corrupt file: moof larger than 64 MiB at ${i}`);let s=Math.min(m.size+Ln,r-i),c=await u(i,s,0),d=B(c,0,Math.min(m.size,c.byteLength));d&&mt(c,d,i,n.moofCount,n,t.maxExpandedSamples),n.moofCount++;let f=0;try{let e=B(c,m.size,c.byteLength);e&&e.type===`mdat`&&(f=e.size)}catch{f=0}a=f<=In?t.readAhead.fragment:Math.min(65536,Math.max(1024,2*m.size+64)),f>In&&(!l.hints.length&&!l.mfraTried&&(r-i)/(m.size+f)>16&&(l.mfraTried=!0,l.hints=await zt(e)),l.next<l.hints.length&&!Ft(l,i+m.size+f,Ln)&&await It(e,l,i,a)),t.onProgress&&n.moofCount%64==0&&t.onProgress({phase:`fragments`,done:i,total:r})}else if(m.type===`sidx`&&!p.truncated){let e=await u(i,m.size,0),t=B(e,0,e.byteLength);t&&(g.sidx=ht(e,t,i)),g.sidx&&g.sidx.subsegments.length>1&&!l.hints.length&&(l.hints=g.sidx.subsegments.map(([e])=>e))}else if(m.type===`mfra`)break;c=m.type===`mdat`,i=h}if(!o)throw new H(`incomplete file: no moov`)}async function Cn(e,t){let n=e.size,r=new Set(t.tracks.map(e=>e.id)),i=!1,a=!1,o=!1,s=null,c=0;for(let l of t.topLevel){if(l.type===`moof`)c++;else if(l.type===`moov`)i=!0;else if(l.type===`mdat`&&l.end-l.start>8)a=!0;else if(l.type===`sidx`&&i&&l.sidx&&!l.sidx.hierarchical&&r.has(l.sidx.referenceId)){let t=l.sidx.coverageEnd===n;!t&&n>=4&&(s===null&&(s=(await e.view(n-4,4,0)).getUint32(0)),t=l.sidx.coverageEnd===n-s),t&&l.sidx.firstOffset===0&&(o=!0)}if(i&&a&&(o||l.end===n)){t.ffprobeMoofLimit=c;return}}}function wn(e,t){return t.chapterTrackIds.has(e.id)?!1:e.handler===`vide`||e.handler!==`soun`&&nt(e.originalFormat??e.sampleEntry)}function Tn(e,t,n,r){let i=y(r.reportedId),a=i.warnings;r.reportedId!==e.id&&a.push(`duplicate track_ID ${e.id}: reported as ${r.reportedId}`),a.push(...e.warnings);let o=e.handler===`auxv`;o&&a.push(`auxiliary video track (handler 'auxv')`);let s=Xt(e);s&&a.push(`missing mandatory sample tables: ffprobe ignores the samples and timing of this track`);let c=e.hasMdhd?e.timescale:t.timescale;e.hasMdhd||(a.push(`no mdhd: using the movie timescale`),e.timescale=c),i.fourccOrCodecId=e.sampleEntry,i.codecName=rt(e.originalFormat??e.sampleEntry,e.esdsObjectType,e.hasHvcc),e.originalFormat&&a.push(`encrypted: ${e.sampleEntry} of ${e.originalFormat}`),e.stsdCount>1&&a.push(`${e.stsdCount} sample descriptions, first used`),i.width=e.width,i.height=e.height,i.rotation=hn(e.matrix,t.matrix),i.timescale=c;let l=Kt(e),u=t.truncated,d=0;for(let t of e.fragments)d+=t.present;let f=l.moovSamples+l.fragmentSamples,p=l.moovSamples+d;i.frames=p,i.isStill=p<=1,l.moovSamples>0&&e.fragments.length>0&&a.push(`hybrid fragmented file: moov holds ${l.moovSamples} of ${f} samples`),p<f&&a.push(`truncated: ${f-p} of ${f} samples missing`);let m=Yt(e,t);i.avgFps=m.avg,i.avgFpsFfprobe=r.ffprobeFails?null:m.ffprobe,i.avgFpsFfprobe!==null&&i.avgFpsFfprobe!==j(m.avg)&&a.push(`ffprobe reads part of the fragments: avg_frame_rate ${i.avgFpsFfprobe}`),m.ffprobe===null&&!r.ffprobeFails&&f>0&&a.push(`avg_frame_rate of ffprobe is not reproduced: its header values are incomplete or overrun a box`);let h=r.ffprobeFails||s?null:un(e,t,l.moovSamples,n.maxExpandedSamples,a);i.rFpsFfprobe=h?j(h):null;let g=Zt(e,t.timescale);if(!s){let n=Qt(e,t,l,g);i.durationSec=n.durationTs/c,i.startSec=n.startPts===null?null:n.startPts/c}let _=l.moovSamples;if(e.sampleCount!==null&&e.sampleCount<_&&(a.push(`stts describes ${_} samples but the sample size table holds ${e.sampleCount}`),_=e.sampleCount),s)return i.presentedFrames=0,En(i),{result:i,enabled:e.enabled,auxiliary:o};if(u&&_>0){let n=mn(e,t.fileSize,l.moovSamples);n&&n.complete<_&&(a.push(`truncated: ${n.complete} of ${_} samples complete`),_=n.complete)}let v=pn(e,g,a);v&&!e.cttsCounts&&!e.fragments.length&&v.start<=0&&(v.end<=v.start||v.end>=l.moovDuration)&&(v=null);let b=ve({segments:fn(e,_),timescale:c,editWindow:v,maxExpandedSamples:n.maxExpandedSamples});return a.push(...b.warnings),i.presentedFrames=b.presentedFrames,i.minFps=b.minFps,i.maxFps=b.maxFps,i.isVfr=b.isVfr,i.vfrRatio=b.vfrRatio,i.distinctDeltas=b.distinctDeltas,i.duplicateTimestamps=b.duplicateTimestamps,i.nominalFps=b.nominalFps,i.dominantFps=b.dominantFps,i.timestampsQuantized=b.timestampsQuantized,b.presentedAvgFps&&(i.avgFps=b.presentedAvgFps),i.duplicateTimestamps>0&&a.push(`${i.duplicateTimestamps} duplicate timestamps`),En(i),b.presentedAvgFps&&(i.provenance.avgFps=`exact`),{result:i,enabled:e.enabled,auxiliary:o,profile:b.profile}}function En(e){let t=e.provenance;for(let e of[`codec`,`dimensions`,`rotation`,`frames`,`avgFps`])t[e]=`header`;e.durationSec!==null&&(t.durationSec=`header`),e.startSec!==null&&(t.startSec=`header`),e.presentedFrames!==null&&(t.presentedFrames=`exact`),e.isVfr!==null&&(t.minFps=`exact`,t.maxFps=`exact`,t.isVfr=`exact`,t.duplicateTimestamps=`exact`),e.nominalFps&&(t.nominalFps=`exact`),e.dominantFps&&(t.dominantFps=`exact`)}function Dn(e){let t=null,n=e=>(e.result.frames??0)>1?e.auxiliary?.5:e.enabled?2:1:0;for(let r of e)(!t||n(r)>n(t)||n(r)===n(t)&&(r.result.frames??0)>(t.result.frames??0))&&(t=r);return t?t.result.trackId:null}function On(e,t){let n=2**53-1,r=n,i=n,a=-n,o=-n,s=-n,c=-n;for(let n of e.tracks){if(!n.hasMdhd)continue;let l=t.has(n)||n.handler===`soun`;if(Xt(n)){let e=Gt(n.mdhdDuration,1e6,Rn);l?s=Math.max(s,e):c=Math.max(c,e);continue}let u=Qt(n,e,Kt(n),Zt(n,e.timescale)),d=Gt(u.durationTs,1e6,n.timescale);if(u.startPts!==null){let e=Gt(u.startPts,1e6,n.timescale);l?(r=Math.min(r,e),a=Math.max(a,e+d)):(i=Math.min(i,e),o=Math.max(o,e+d))}l?s=Math.max(s,d):c=Math.max(c,d)}return(r===n||r>i&&r-i<1e6)&&(r=i),(a===-n||a<o&&o-a<1e6)&&(a=o),(s===-n||s<c&&c-s<1e6)&&(s=c),r!==n&&a!==-n&&a>=r&&(s=Math.max(s,a-r)),s>0?s/1e6:null}function kn(e){let t=new Map,n=new Set,r=e.reduce((e,t)=>Math.max(e,t.id),0)+1;for(let i of e)n.has(i.id)?t.set(i,r++):(n.add(i.id),t.set(i,i.id));return t}async function An(e,t){let n=st(e.size),r=t=>{if(yn(t,e))throw t;let r=t instanceof Error?t.message:String(t),i=v(bn(n),t instanceof H?r:`corrupt file: ${r}`);return i.brand=n.brand,i.warnings=n.warnings,{analysis:i,movie:n}};try{await Sn(e,t,n),await Cn(e,n);let r=v(bn(n));r.brand=n.brand,r.scan=`exact`,r.warnings=n.warnings;let i=n.ffprobeReject,a=i!==null&&i.moof<n.ffprobeMoofLimit;a&&n.warnings.push(`ffprobe 8.1.1 ${i.reason}`);let o=kn(n.tracks);[...o].some(([e,t])=>e.id!==t)&&n.warnings.push(`duplicate track_ID values`);let s=n.tracks.filter(e=>wn(e,n)),c=s.map(e=>Tn(e,n,t,{reportedId:o.get(e)??e.id,ffprobeFails:a}));for(let e of c)e.result.rateProfile=await je(e.profile??null);return r.videoTracks=c.map(e=>e.result),r.audioTrackCount=n.tracks.filter(e=>e.handler===`soun`).length,r.primaryTrackId=Dn(c),r.formatDurationSec=On(n,new Set(s)),{analysis:r,movie:n}}catch(e){return r(e)}}async function jn(e,t){return(await An(e,t)).analysis}var Mn,Nn,Pn,Fn,In,Ln,Rn,zn=t((()=>{z(),F(),et(),ot(),ut(),_t(),Nt(),Wt(),_n(),Mn=16777216,Nn=268435456,Pn=67108864,Fn=4e6,In=65536,Ln=16,Rn=9e4}));function K(e){return e===0?0:Math.clz32(e)-23}function Bn(e,t){if(t>=e.length)return null;let n=K(e[t]);if(n<1||n>4||t+n>e.length)return null;let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return{id:r,length:n}}function Vn(e,t){if(t>=e.length)return null;let n=e[t],r=K(n);if(r<1||t+r>e.length)return null;let i=255>>r,a=(n&i)===i,o=n&i;for(let n=1;n<r;n++){let r=e[t+n];r!==255&&(a=!1),o=o*256+r}return a?{size:-1,length:r}:o>2**53-1?null:{size:o,length:r}}function q(e,t,n){let r=Bn(e,t);if(!r)return null;let i=Vn(e,t+r.length);return i?{id:r.id,pos:n+t,size:i.size,dataStart:n+t+r.length+i.length}:null}function Hn(e,t){if(t>=e.length)return!0;let n=K(e[t]);if(n<1||n>4)return!1;let r=t+n;return r>=e.length||e[r]!==0&&r+K(e[r])>e.length}function Un(e,t,n){let r=t<n?K(e[t]):0;if(r<1||t+r>n)return null;let i=e[t]&255>>r;for(let n=1;n<r;n++)i=i*256+e[t+n];return{value:i,length:r}}function Wn(e,t,n){let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return r}function Gn(e,t,n){let r=0n;for(let i=0;i<n;i++)r=r<<8n|BigInt(e[t+i]);return r}function Kn(e,t,n){if(n===0)return 0;let r=new DataView(e.buffer,e.byteOffset+t,n);return n===4?r.getFloat32(0):n===8?r.getFloat64(0):NaN}function qn(e,t,n){let r=t;for(;r<t+n&&e[r]!==0;)r++;return Tr.decode(e.subarray(t,r))}function*Jn(e,t,n){let r=t,i=Math.min(n,e.length);for(;r<i;){let t=q(e,r,0);if(!t||t.size===-1||t.dataStart+t.size>i)return;yield{id:t.id,start:t.dataStart,size:t.size},r=t.dataStart+t.size}}function Yn(e,t){return t.size>6?Number(Gn(e,t.start,t.size)):Wn(e,t.start,t.size)}var Xn,J,Zn,Qn,$n,Y,er,tr,X,nr,rr,ir,ar,or,sr,cr,lr,ur,Z,dr,fr,pr,mr,hr,gr,_r,vr,yr,br,xr,Sr,Cr,wr,Tr,Er=t((()=>{Xn=408125543,J=290298740,Zn=19899,Qn=21419,$n=21420,Y=357149030,er=2807729,tr=17545,X=374648427,nr=29637,rr=2352003,ir=2306383,ar=22186,or=25506,sr=28032,cr=2327523,lr=524531317,ur=475249515,Z=307544935,dr=29555,fr=25536,pr=25541,mr=26568,hr=17827,gr=17543,_r=423732329,vr=24999,yr=18016,br=272869232,xr=17849,Sr=30113,Cr=30114,wr=new Set([J,Y,X,ur,Z,lr,br,_r]),Tr=new TextDecoder}));function Dr(e,t,n){if(e[t]!==31||e[t+1]!==67||e[t+2]!==182||e[t+3]!==117)return!1;let r=Vn(e,t+4);if(!r)return!1;let i=t+4+r.length,a=r.size===-1?e.length:Math.min(e.length,i+r.size);if(r.size!==-1&&i+r.size>n)return!1;for(let t=0;t<4&&i<a;t++){let t=Bn(e,i);if(!t)return!1;let n=Vn(e,i+t.length);if(!n||n.size===-1)return!1;if(t.id===231)return n.size<=8;if(t.id!==191&&t.id!==236&&t.id!==167&&t.id!==171)return!1;i+=t.length+n.length+n.size}return!1}function Or(e,t,n,r){let i=Bn(e,t);if(i?.length!==4)return!1;if(i.id===524531317)return Dr(e,t,n);let a=Pr.get(i.id),o=Vn(e,t+4);if(!a||!o||o.size<2)return!1;let s=t+4+o.length+o.size,c=s<=r?q(e,t+4+o.length,0):null;return!!c&&c.size!==-1&&c.dataStart+c.size<=s&&(a.includes(c.id)||c.id===236||c.id===191)}async function kr(e,t,n,r,i={}){let a=i.clustersOnly?Ir:Fr,o=i.step??Math.max(e.window,65536),s=Math.max(0,t),c=Math.min(n,e.size);for(;s<c;){let t=e.chunkAt(s);if(!t||t.base+t.buf.length<e.size&&t.base+t.buf.length-s<128){if(i.canLoad&&!i.canLoad())return-1;let n=Math.min(o,c-s+64);await e.load(s,Math.min(n,e.size-s),n),t={base:e.base,buf:e.buf}}let n=t.buf,l=t.base,u=Math.min(l+n.length>=e.size?n.length:n.length-64,c-l);if(u<=s-l)break;for(let e=s-l;e<u;e++)if(a[n[e]]&&r(n,e,l))return l+e;s=l+u}return-1}function Ar(e,t,n,r,i={}){return kr(e,t,n,(e,t,n)=>Dr(e,t,r-n),{...i,clustersOnly:!0})}function jr(e,t,n,r,i={}){let a=e.size;return kr(e,t,n,(e,t,n)=>Or(e,t,r-n,a-n),i)}var Mr,Nr,Pr,Fr,Ir,Lr=t((()=>{Er(),Mr=4,Nr=class{reader;size;window;buf=new Uint8Array;base=0;#e=[];constructor(e,t){this.reader=e,this.size=e.size,this.window=t;let n=e.peek(0,Math.min(e.size,e.headWindow));n&&n.byteLength>0&&this.#t({base:0,buf:new Uint8Array(n.buffer,n.byteOffset,n.byteLength)})}has(e,t){return e>=this.base&&Math.min(this.size,e+t)<=this.base+this.buf.length}cached(e,t){let n=Math.min(this.size,e+t);return this.#e.some(t=>e>=t.base&&n<=t.base+t.buf.length)||this.reader.peek(e,n-e)!==null}async load(e,t,n=this.window){if(this.has(e,t))return;let r=Math.min(this.size,e+t);for(let t of this.#e)if(e>=t.base&&r<=t.base+t.buf.length){this.#t(t);return}let i=Math.max(t,n),a=await this.reader.view(e,i,i);this.#t({base:e,buf:new Uint8Array(a.buffer,a.byteOffset,a.byteLength)})}chunkAt(e){return this.#e.find(t=>e>=t.base&&e<t.base+t.buf.length)??null}async header(e){return this.has(e,12)||await this.load(e,12),q(this.buf,e-this.base,this.base)}#t(e){this.buf=e.buf,this.base=e.base;let t=this.#e.indexOf(e);t>=0&&this.#e.splice(t,1),this.#e.unshift(e),this.#e.length>Mr&&(this.#e.length=Mr)}},Pr=new Map([[J,[Zn]],[Y,[er,tr,19840,22337,29604,17505,31657,29572,3979555,3965867,4110627,4096955,17476,26916]],[X,[174]],[ur,[187]],[Z,[dr]],[br,[xr]],[_r,[vr]]]),Fr=new Uint8Array(256);for(let e of wr)Fr[e>>>24]=1;Ir=new Uint8Array(256),Ir[lr>>>24]=1}));function Rr(e,t=0){return e.reader.reads<5&&e.reader.bytesFetched+Math.max(t,e.window)<=1048576}function zr(e){let t=/^\s*(\d+):(\d{1,2}):(\d{1,2}(?:\.\d+)?)\s*$/.exec(e);return t?Number(t[1])*3600+Number(t[2])*60+Number(t[3]):null}function Br(){return{number:0,uid:0n,type:0,codecId:``,defaultDuration:0,frameRate:0,trackTimestampScale:1,codecDelay:0,codecPrivate:null,encoded:!1,width:0,height:0}}function Vr(e,t){t.trackTimestampScale>=.01||(t.trackTimestampScale=1),!t.defaultDuration&&t.frameRate>0&&(t.defaultDuration=Math.trunc(1e9/t.frameRate)),Number.isSafeInteger(t.defaultDuration)||(t.defaultDuration=0),e.tracks.push(t)}function Hr(e,t,n,r,i,a=null,o=null){let s=o??Br(),c=-1,l=-1,u=[],d=[],f=``,p=``,m=!1,h=(n,r,i,o)=>{let g=ti.get(n)??[];if(o>16)m=!0;else for(let m of Jn(t,r,i)){if(!g.includes(m.id))continue;let r=m.start,i=m.size,_=()=>Yn(t,m),v=()=>h(m.id,r,r+i,o+1);switch(m.id){case 174:s=Br(),v(),Vr(e,s);break;case dr:u=[],d=[],v();for(let t of d)for(let n of u.length?u:[0n])e.tagDurations.has(n)||e.tagDurations.set(n,t);break;case mr:{let e=[f,p];f=p=``,v();let t=n===29555&&(f===`DURATION`||f.startsWith(`DURATION-`))?zr(p):null;t!==null&&d.push(t),[f,p]=e;break}case Zn:c=l=-1,v(),c>=0&&l>=0&&!e.seek.has(c)&&e.seek.set(c,e.segmentData+l);break;case 215:s.number=_();break;case nr:s.uid=Gn(t,r,i);break;case 131:s.type=_();break;case 134:s.codecId=qn(t,r,i);break;case rr:s.defaultDuration=_();break;case ir:s.trackTimestampScale=Kn(t,r,i);break;case ar:s.codecDelay=_();break;case sr:s.encoded=!0;break;case or:s.codecPrivate=t.slice(r,r+Math.min(i,Zr));break;case 176:s.width=_();break;case 186:s.height=_();break;case cr:s.frameRate=Kn(t,r,i);break;case er:_()>0&&(e.timestampScale=_());break;case tr:{let n=Kn(t,r,i);i!==0&&i!==4&&i!==8?e.warnings.push(`Duration has an invalid size of ${i} bytes`):Number.isFinite(n)?e.duration=n:e.warnings.push(`invalid Duration value ${n}`);break}case Qn:c=i<=4?_():-1;break;case $n:l=_();break;case pr:u.push(Gn(t,r,i));break;case hr:f=qn(t,r,i).toUpperCase();break;case gr:p=qn(t,r,i);break;case yr:qn(t,r,i).startsWith(`image/`)&&e.attachedImages++;break;case 241:a?.push(e.segmentData+_());break;default:v()}}};h(i,n,r,2),m&&e.warnings.push(`elements nested deeper than 16 levels ignored`)}async function Ur(e,t){return e.cached(t,12)||Rr(e)?e.header(t):null}async function Wr(e,t,n){let r=Math.min(n.dataStart+n.size,e.size),i=n.dataStart;for(;i<r;){let n=await Ur(e,i);if(!n||n.size===-1)break;let a=Math.min(n.dataStart+n.size,r);if(n.id===174){let r=Br();for(let i=n.dataStart;i<a;){let n=await Ur(e,i);if(!n||n.size===-1)break;let o=n.dataStart+n.size-n.pos;n.size<=Xr&&n.pos+o<=a&&(e.cached(n.pos,o)||Rr(e,o))&&(await e.load(n.pos,o),Hr(t,e.buf,n.pos-e.base,n.pos-e.base+o,174,null,r)),i=n.pos+o}Vr(t,r)}i=n.dataStart+n.size}i<r&&t.warnings.push(`Tracks at ${n.pos} only partly read (header budget)`)}async function Gr(e,t,n,r){if(r.at.add(n.pos),n.id===475249515&&(t.cuesPos??=n.pos),!ei.has(n.id))return;let i=Math.max(0,Math.min(n.size,e.size-n.dataStart)),a=Math.min(i,Yr),o=e.cached(n.dataStart,a);if(n.id===374648427&&a<i&&!o){r.ids.add(n.id),await Wr(e,t,n);return}if(!o&&(!Rr(e,a)||n.id===423732329)){n.id===374648427?(r.ids.add(n.id),await Wr(e,t,n)):n.id!==423732329&&t.warnings.push(`${$r.get(n.id)??ni(n.id)} element at byte ${n.pos} not read (header budget)`);return}r.ids.add(n.id),await e.load(n.dataStart,a);let s=n.dataStart-e.base;Hr(t,e.buf,s,s+a,n.id)}function Kr(e,t,n){e.segmentUnknownSize||e.segmentExtended||(e.segmentExtended=!0,e.segmentEnd=t.size,e.declaredEnd=Math.max(e.declaredEnd,t.size),e.warnings.push(`${n}: the Segment size is wrong, reading to the end of the file like ffprobe`))}async function qr(e,t,n){let r=n;for(let n=0;n<Qr&&r<e.size;n++){if(!e.cached(r,12)&&!Rr(e))return t.warnings.push(`Segment search stopped at ${r} (header budget)`),null;let n=await e.header(r),i=e.buf,a=r-e.base;if(i[a]===24&&i[a+1]===83&&i[a+2]===128&&i[a+3]===103)return n||(t.warnings.push(`corrupt Segment size at ${r}`),t.segmentExtended=!0,{id:Xn,pos:r,size:-1,dataStart:r+4+(K(i[a+4])||8)});if(!n||n.size===-1)return null;r=n.dataStart+n.size}return null}async function Jr(e){let t={docType:`matroska`,segmentData:0,segmentEnd:0,declaredEnd:0,segmentUnknownSize:!1,segmentExtended:!1,timestampScale:1e6,duration:0,tracks:[],tagDurations:new Map,firstCluster:null,walkEnd:0,cuesPos:null,seek:new Map,attachedImages:0,warnings:[]},n=await e.header(0);if(!n||n.id!==440786851||n.size===-1||n.dataStart+n.size>e.size)throw Error(`invalid EBML header`);await e.load(n.dataStart,Math.min(n.size,4096));let r=n.dataStart-e.base;for(let i of Jn(e.buf,r,r+n.size))i.id===17026&&(t.docType=qn(e.buf,i.start,i.size));let i=()=>Rr(e),a=await qr(e,t,n.dataStart+n.size);if(!a){let r=await jr(e,n.dataStart+n.size,e.size,e.size,{canLoad:i});if(r<0)throw Error(`no Segment element`);t.warnings.push(`no valid Segment header: reading level-1 elements from ${r}`),t.segmentExtended=!0,a={id:Xn,pos:r,size:-1,dataStart:r}}t.segmentData=a.dataStart,t.segmentUnknownSize=a.size===-1&&!t.segmentExtended,t.declaredEnd=a.size===-1?2**53-1:a.dataStart+a.size,t.segmentEnd=Math.min(e.size,t.declaredEnd),t.declaredEnd>e.size&&a.size!==-1&&t.warnings.push(`truncated file: Segment ends ${t.declaredEnd-e.size} bytes after EOF`);let o={ids:new Set,at:new Set},s=t.segmentData,c=s,l=-1;for(;!(s>=t.segmentEnd&&(s>=e.size||(Kr(t,e,`Segment ends at ${s} before any Cluster`),s>=t.segmentEnd)));){if(!e.cached(s,12)&&!i()){t.warnings.push(`header walk stopped at ${s} (header budget)`),l=s;break}let n=await e.header(s);if(n?.id===524531317){t.firstCluster=s;break}let r=`invalid data at ${s} before the first Cluster`;if(n&&n.size!==-1&&(wr.has(n.id)||n.id===236||n.id===191)){let i=n.dataStart+n.size;if(i>t.segmentEnd&&i<=e.size&&Kr(t,e,`${ni(n.id)} at ${s} ends after the Segment`),await Gr(e,t,n,o),c=s+1,i<=e.size){s=i;continue}r=`${ni(n.id)} at ${s} ends after the end of the file`}let a=await jr(e,c,e.size,Math.max(t.declaredEnd,e.size),{canLoad:i});if(t.warnings.push(a<0?r:`${r}: resynchronised at ${a}`),a<0)break;a>=t.segmentEnd&&Kr(t,e,`level-1 element at ${a} after the Segment end`),c=a+1,s=a}t.walkEnd=t.firstCluster??(l>=0?l:c);for(let n of[J,Y,X,Z]){let r=t.seek.get(n);if(r===void 0||o.at.has(r)||n!==290298740&&o.ids.has(n)||r>=t.segmentEnd)continue;let i=await Ur(e,r);i?.id===n?await Gr(e,t,i,o):t.warnings.push(`SeekHead entry ${ni(n)} not followed`)}if(t.cuesPos??=t.seek.get(475249515)??null,o.ids.has(357149030)||t.warnings.push(`no Info element: TimestampScale 1000000 assumed`),!t.tracks.length)throw Error(o.ids.has(374648427)?`no complete TrackEntry in Tracks`:`no Tracks element found`);return t}var Yr,Xr,Zr,Qr,$r,ei,ti,ni,ri=t((()=>{Er(),Lr(),Yr=1048576,Xr=65536,Zr=4096,Qr=16,$r=new Map([[J,`SeekHead`],[Y,`Info`],[Z,`Tags`]]),ei=new Set([J,Y,X,Z,_r]),ti=new Map([[J,[Zn]],[Zn,[Qn,$n]],[Y,[er,tr]],[X,[174]],[174,[215,nr,131,134,or,sr,rr,ir,ar,224]],[224,[176,186,cr]],[Z,[dr]],[dr,[fr,mr]],[fr,[pr]],[mr,[hr,gr,mr]],[_r,[vr]],[vr,[yr]],[ur,[187]],[187,[183]],[183,[241]]]),ni=e=>e.toString(16).toUpperCase()}));function ii(e,t,n,r=1/0){let i=new Map;for(let t of n){let n=Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale;i.set(t.number,{track:t,tickNs:n,codecDelayTicks:Math.round(t.codecDelay/n),pts:new Float64Array(256),n:0,blocks:0,frames:0,invisible:0,missingPts:0,noPtsFrames:0,nextPts:NaN,pending:[],overLimit:0,maxPts:-1/0,maxPtsDur:0})}return{header:e,tracks:i,known:new Set(e.tracks.map(e=>e.number)),fileSize:t,maxSamples:r,clusters:0,truncated:!1,missingClusterTs:0,maxAnyTicks:-1/0,lastGood:-1,resyncs:0,afterSegment:-1,switchReads:1/0,largeWindow:0,warnings:[]}}function ai(e,t,n){if(e.n===e.pts.length){let t=new Float64Array(Math.max(e.n+1,Math.min(e.pts.length*2,n)));t.set(e.pts),e.pts=t}e.pts[e.n++]=t}function oi(e,t,n){let r=Math.min(e.length,t+n),i=Un(e,t,r);if(!i)return null;let a=t+i.length;if(a+3>r)return null;let o=e[a]<<24>>16|e[a+1],s=e[a+2],c=1;if(s&6){if(a+4>r)return null;c=e[a+3]+1}return{track:i.value,rel:o,flags:s,laces:c}}function si(e,t,n,r){if(t>=n)return`invalid`;if(t>=r)return`more`;let i=K(e[t]);if(!i||t+i>n)return`invalid`;if(t+i>r)return`more`;let a=BigInt(e[t]&255>>i);for(let n=1;n<i;n++)a=a*256n+BigInt(e[t+n]);return{v:a,n:i}}function ci(e,t,n,r){let i=t+n,a=Math.min(i,e.length),o=oi(e,t,a-t);if(!o){let n=t<a?K(e[t]):0;return a<i&&(t>=a||n>0&&t+n+4>a)?`more`:`invalid`}let s=t+K(e[t]);if(r&&!r.has(o.track))return`invalid`;let c=o.flags>>1&3;if(!c)return o;let l=i-s-4;if(l<0)return`invalid`;let u=o.laces,d=s+4;if(c===2)return l%u?`invalid`:o;if(c===1){let t=0;for(let n=0;n<u-1;n++){let n;do{if(l<=t)return`invalid`;if(d>=a)return`more`;n=e[d++],t+=n,l--}while(n===255)}return l<t?`invalid`:o}let f=si(e,d,i,a);if(typeof f==`string`)return f;if(f.v>Ci)return`invalid`;let p=f.v,m=f.v;d+=f.n;for(let t=1;t<u-1;t++){if(f=si(e,d,i,a),typeof f==`string`)return f;let t=p+f.v-((1n<<BigInt(7*f.n-1))-1n);if(t<0n||t>Ci)return`invalid`;p=t,m+=t,d+=f.n}return BigInt(i-d)<m?`invalid`:o}function li(e,t,n,r){t.n<e.maxSamples?ai(t,n,e.maxSamples):t.overLimit++,n>=t.maxPts&&(t.maxPts=n,t.maxPtsDur=r),t.nextPts=n+r}function ui(e,t,n,r){let i=n+t.rel;i>e.maxAnyTicks&&(e.maxAnyTicks=i);let a=e.tracks.get(t.track);if(!a)return null;let o=t.laces;a.blocks++,a.frames+=o,t.flags&8&&a.invisible++;let s=r>0?r:Math.floor(a.track.defaultDuration*o/e.header.timestampScale),c=e=>Math.floor(s*e/o);if(i<0){a.noPtsFrames+=o;for(let t=0;t<o;t++)Number.isNaN(a.nextPts)?a.pending.push(c(t+1)-c(t)):li(e,a,a.nextPts,c(t+1)-c(t));return a}let l=a.track.trackTimestampScale,u=(l===1?n:Math.floor(n/l))+t.rel-a.codecDelayTicks,d=u;for(let e of a.pending)d-=e;for(let t of a.pending.splice(0))li(e,a,d,t),d+=t;for(let t=0;t<o;t++){if(t>0&&s===0){a.missingPts+=o-t;break}li(e,a,u+c(t),c(t+1)-c(t))}return a}async function di(e,t,n){let r=Math.min(n.size,xi);for(;;){e.has(n.dataStart,r)||await e.load(n.dataStart,r);let i=ci(e.buf,n.dataStart-e.base,n.size,t.known);if(i!==`more`)return i;if(r>=n.size)return`invalid`;r=Math.min(n.size,r*8)}}function fi(e,t){return e.has(t,12)?q(e.buf,t-e.base,e.base):void 0}async function pi(e,t){return(fi(e,t)??await e.header(t))||(Hn(e.buf,t-e.base)?`eof`:`invalid`)}function mi(e,t){return e.has(t.dataStart,t.size)?Wn(e.buf,t.dataStart-e.base,t.size):void 0}async function hi(e,t){return await e.load(t.dataStart,t.size),Wn(e.buf,t.dataStart-e.base,t.size)}function gi(e,t){return e.size===-1||e.dataStart+e.size>t||Di.has(e.id)&&e.size>8||(e.id===163||e.id===161)&&e.size>Si?`invalid`:null}async function _i(e,t,n,r=1/0){let i=fi(e,n)??await e.header(n);if(!i||i.id!==524531317)return null;let a=t.fileSize,o=i.size===-1?1/0:i.dataStart+i.size;t.clusters++;let s=-1,c=0,l=i.dataStart,u=e=>({next:l,videoBlocks:c,error:e});for(;l<o;){if(c>=r||t.stop)return{next:Math.min(o,l),videoBlocks:c,error:null};if(t.switchReads<=e.reader.reads&&(e.window=t.largeWindow,t.switchReads=1/0),l>=a)return o===1/0?{next:l,videoBlocks:c,error:null}:u(`eof`);let n=fi(e,l);if(n||=await pi(e,l),typeof n==`string`)return u(n);let i=Ti.has(n.id);if(!i&&o===1/0&&(wr.has(n.id)||n.id===408125543))return{next:l,videoBlocks:c,error:null};let d=gi(n,o);if(d)return u(d);i&&(t.lastGood=l);let f=n.dataStart+n.size;if(f>a)return u(`eof`);if(n.id===231)s=mi(e,n)??await hi(e,n);else if(n.id===163||n.id===160){let r=n,i=0;if(n.id===160){r=null;for(let a=n.dataStart;a<f;){let n=fi(e,a)||await pi(e,a),o=typeof n==`string`?n:gi(n,f);if(o||typeof n==`string`)return l=a,u(o??`invalid`);Ei.has(n.id)&&(t.lastGood=a),n.id===161?r=n:n.id===155&&(i=mi(e,n)??await hi(e,n)),a=n.dataStart+n.size}}if(r){let n=e.has(r.dataStart,Math.min(r.size,xi))?ci(e.buf,r.dataStart-e.base,r.size,t.known):`more`;if(n===`more`&&(n=await di(e,t,r)),n===`invalid`)return u(`invalid`);s<0&&(t.missingClusterTs++,s=0);let a=ui(t,n,s,i);t.onBlock?.(n,s,i,r),a&&a.track.type===1&&c++}}l=f}return{next:o,videoBlocks:c,error:null}}function vi(e,t,n,r){n<0&&r===`eof`?e.truncated=!0:++e.resyncs>wi||(n<0?e.warnings.push(`invalid data at ${t}, no further level-1 element`):n>=t?e.warnings.push(`skipped ${n-t} bytes of invalid data at ${t}`):e.warnings.push(`invalid data at ${t}: resynchronised at ${n}`))}async function yi(e,t,n,r){let i=t.header,a=t.fileSize,o=i.segmentUnknownSize||i.segmentExtended?1/0:i.declaredEnd,s=n;for(t.lastGood=n-1;!t.stop;){e.reader.checkAbort(),r?.(s,Math.min(a,o));let n=null,i=s;if(s>=a){s<o&&o!==1/0&&(t.truncated=!0);break}if(s>=o){o=1/0;let n=await jr(e,Math.max(t.lastGood+1,s),a,1/0);if(n<0)break;t.afterSegment<0&&(t.afterSegment=s),s=n;continue}let c=await pi(e,s);if(typeof c==`string`)n=c;else{let r=wr.has(c.id)||c.id===236||c.id===191;if(c.id===408125543&&o===1/0?(t.afterSegment<0&&(t.afterSegment=s),n=`invalid`):c.size===-1?c.id===524531317?o=1/0:n=`invalid`:c.dataStart+c.size>o&&(n=`invalid`),!n){if(r&&(t.lastGood=s),c.id===524531317){let r=await _i(e,t,s);r.error?(n=r.error,i=r.next):s=r.next}else c.dataStart+c.size>a?n=`eof`:s=c.dataStart+c.size}}if(!n)continue;o=1/0;let l=await jr(e,t.lastGood+1,a,1/0);if((n!==`invalid`||i!==t.afterSegment)&&vi(t,i,l,n),l<0)break;s=l}t.resyncs>wi&&t.warnings.push(`${t.resyncs-wi} more resynchronisation(s) after invalid data`),t.afterSegment>=0&&t.warnings.push(`data after the Segment end at ${t.afterSegment} was scanned like ffprobe does (concatenated files?)`)}async function bi(e,t,n,r){await e.load(t,n-t,n-t);let i=e.buf,a=e.base,o=[];for(let e=n-a-4;e>=t-a;e--)i[e]===31&&Dr(i,e,r-a)&&o.push(a+e);return o}var xi,Si,Ci,wi,Ti,Ei,Di,Oi=t((()=>{Er(),Lr(),xi=16,Si=268435456,Ci=2147483647n,wi=5,Ti=new Set([231,163,160,167,171,236,191]),Ei=new Set([161,155,251,Cr,Sr,164,236,191]),Di=new Set([231,155,251,Cr])})),ki=n({attachEstimate:()=>Bi,av1TimingInfo:()=>Li,h264Sps:()=>Pi,setupUnsupported:()=>zi});function Ai(e){let t=Math.floor(e),n=e-t;return n>.5||n===.5&&t%2!=0?t+1:t}function ji(e,t){for(;t;)[e,t]=[t,e%t];return e}function Mi(e,t){let n=e>>3,r=n<12?[480,960,1920,2880][n&3]:n<16?[480,960][n&1]:[120,240,480,960][n&3],i=e&3,a=i===0?1:i<3?2:t&63;return a>0&&r*a<=5760?r*a:0}function Ni(e){let t=[];for(let n=1,r=0;n<e.length;n++)r>=2&&e[n]===3?r=0:(t.push(e[n]),r=e[n]?0:r+1);let n=0,r=e=>{let r=0;for(let i=n+e;n<i;n++){if(n>>3>=t.length)throw RangeError();r=r*2+(t[n>>3]>>7-(n&7)&1)}return r};return{u:r,ue:()=>{let e=0;for(;!r(1);)if(++e>31)throw RangeError();return 2**e-1+r(e)}}}function Pi(e){let{u:t,ue:n}=Ni(e);try{let e=t(8);if(e!==66)return`H.264 profile ${e}`;t(16),n();let r={frameNumBits:n()+4,pocType:n(),pocLsbBits:0,fixedDelay:!1};if(r.pocType===0&&(r.pocLsbBits=n()+4),r.pocType===1){t(1),n(),n();for(let e=n();e>0;e--)n()}if(r.frameNumBits>16||r.pocLsbBits>16||r.pocType>2)return`bad H.264 SPS`;n(),t(1),n(),n();let i=t(1)||(t(1),0);if(t(1),t(1))for(let e=0;e<4;e++)n();if(t(1)){if(t(1)&&t(8)===255&&t(32),t(1)&&t(1),t(1)&&(t(4),t(1))&&t(24),t(1)&&(n(),n()),t(1))return`H.264 timing info`;if(t(1)||t(1)||t(1))return`H.264 HRD or pic_struct`;if(t(1)){t(1);for(let e=0;e<4;e++)n();if(n())return`H.264 reordering`;r.fixedDelay=!0}}return r.pocType===1?`H.264 pic_order_cnt_type 1`:i?r:`H.264 field coding`}catch{return`bad H.264 SPS`}}function Fi(e,t){let n=[];if(t)for(let r=0;r+t<=e.length;){let i=0;for(let n=r+t;r<n;r++)i=i*256+e[r];n.push(e.subarray(r,r+=i))}else for(let t=0,r=-1;t<=e.length;t++)t<e.length&&(e[t]||e[t+1]||e[t+2]!==1)||(r>=0&&n.push(e.subarray(r,t)),r=t+3,t+=2);return n}function Ii(e,t){let n=e?(e[4]&3)+1:0,r=e?[]:Fi(t[0],0);if(e){let t=5;for(let n of[31,255])for(let i=e[t++]&n,a=0;i-->0&&t+2<=e.length;t+=2+a)a=e[t]<<8|e[t+1],r.push(e.subarray(t+2,t+2+a))}let i=e=>e[0]&31,a=r.find(e=>i(e)===7),o=a?Pi(a):`no H.264 SPS`;if(typeof o==`string`)return o;let s=[];for(let e of t){let t=Fi(e,n).find(e=>i(e)===1||i(e)===5);if(!t)return`no H.264 slice header`;s.push(t)}if(i(s[0])!==5)return`H.264 does not start with an IDR`;let c=r.filter(e=>i(e)===8);if(!c.length)return`no H.264 PPS`;let l=2**o.frameNumBits,u=0,d=NaN,f=-1,p=0,m=null;try{for(let e of c){let{u:t,ue:n}=Ni(e);if(n(),n(),t(1),t(1)&&!o.pocType)return`H.264 bottom field POC`}for(let e of s){let{u:t,ue:n}=Ni(e);n(),n(),n();let r=t(o.frameNumBits);if(i(e)===5)n(),u=p=0,d=NaN,m=null;else if(f>=0&&r!==f&&r!==(f+1)%l)return`H.264 frame_num gap`;else r<f&&(p+=l);f=r;let a=2*(p+r)-(e[0]&96?0:1);if(!o.pocType){let n=t(o.pocLsbBits),r=2**o.pocLsbBits;d>=0||(d=n);let i=n<d&&d-n>=r/2?u+r:n>d&&n-d>r/2?u-r:u;a=i+n,e[0]&96&&([u,d]=[i,n])}if(m!==null&&(o.fixedDelay?a<m:a-m!==1&&a-m!==2))return`H.264 POC step ${a-m}`;m=a}}catch{return`bad H.264 PPS or slice header`}return null}function Li(e){for(let t=0;t<e.length;){let n=e[t],r=t+1+(n>>2&1),i=e.length-r;if(n&2)for(let t=0,n=128;n&128;t+=7)i=(t?i:0)+((n=e[r++]??0)&127)*2**t;if((n>>3&15)==1)return r<e.length?(e[r]&12)==4:null;t=r+i}return null}function Ri(e,t){let n=e.codecPrivate;if(e.codecId===Ki){let e=Li(n&&n.length>4?n.subarray(4):t[0]);return e===null?`no AV1 sequence header`:e?`AV1 timing info`:null}return e.codecId===Gi?Ii(n,t):null}function zi(e){let t=e.tracks.filter(e=>e.type===1);if(t.length!==1)return`${t.length} video tracks`;if(new Set(e.tracks.map(e=>e.number)).size<e.tracks.length)return`duplicate track numbers`;if(e.attachedImages)return`attached pictures`;if(![`V_VP8`,`V_VP9`,Ki,Gi].includes(t[0].codecId))return`codec ${t[0].codecId}`;for(let t of e.tracks){if(t.trackTimestampScale!==1||t.encoded)return`track ${t.number} scale or encoding`;let e=t.codecPrivate;if(t.type!==1&&(t.codecId!==`A_OPUS`||!e||String.fromCharCode(...e.subarray(0,8))!==`OpusHead`||e[18]!==0))return`track ${t.number} (${t.codecId||t.type})`}return null}function Bi(e,t,n,r,i=!1){let a=zi(t);if(a)return a;let o=new Map;for(let e of t.tracks){let n=A(Math.trunc(t.timestampScale*e.trackTimestampScale),1e9,P);o.set(e.number,{tb:n,nb:0,cid:0,durs:0,seen:!1,first:null,firstIdx:0,last:null,lastIdx:0})}let s=t.tracks.find(e=>e.type===1),c=o.get(s.number),l=c.tb,u=l.num/l.den,d=s.codecId===Gi,f=d||l.den>=101*l.num||l.den<5*l.num,p=f?u>5e-4?40:20:0,m=new Float64Array(4*Q),h=(e,t)=>{let n=m[2*e*Q+t]/_;return m[(2*e+1)*Q+t]/_-n*n},g=null,_=0,v=0,y=0,b=0,x=null,S=null,C=null,w=()=>r.resyncs||r.truncated||r.missingClusterTs,T=[],E=n.newScanState(t,e.size,t.tracks),D=(r,i,a,s)=>{let f=n.addBlock(E,r,i,a);if(b>=Vi||c.nb&&_>=p&&[...o.values()].every(e=>e.seen||e.nb>=Hi))return!1;let S=o.get(f.track.number),C=s.dataStart+Math.clz32(e.buf[s.dataStart-e.base])-20,w=s.dataStart+s.size-C,D=S===c,O=a||Math.floor(f.track.defaultDuration*r.laces/t.timestampScale);if(r.laces>1||f.noPtsFrames?x=`laced or untimed blocks`:!O&&!D?(O=Math.floor(Mi(e.buf[C-e.base],w>1?e.buf[C+1-e.base]:0)*S.tb.den/(48e3*S.tb.num)),(!O||w<1)&&(x=`a bad Opus packet`)):!O&&l.num*1e3>l.den&&(O=1),D&&!c.nb&&s.id===163&&!(r.flags&128)&&(x=`no keyframe first`),x)return!1;b+=w;let k=D&&d&&c.nb<Ui?null:f.pts[f.n-1];if(k!==null&&S.nb>1&&(S.last!==null&&(S.last>=k||S.first!==null&&S.lastIdx>S.firstIdx&&Math.floor((k-S.last)/1e3)>Math.floor((S.last-S.first)/(S.lastIdx-S.firstIdx)))&&(S.first=null),S.first===null&&(S.first=k,S.firstIdx=S.nb),S.last=k,S.lastIdx=S.nb),S.nb>1){let e=Ji(S.cid,S.tb);if(!e&&S.nb>30&&S.first!==null&&S.last!==null&&(e=Ji(S.last-S.first,S.tb)),e>=Vi)return!1;O>0&&(S.cid+=O,S.durs++)}if(D&&k!==null&&g!==null&&k>g){let e=k*u;for(let t=0;t<Q;t++){if(!(m[Q+t]<1e10))continue;let n=e*qi(t)/12012;for(let e=0;e<2;e++){let r=n-Ai(n+e*.5)+e*.5;m[2*e*Q+t]+=r,m[(2*e+1)*Q+t]+=r*r}}if(_++,v+=k-g,_%10==0)for(let e=0;e<Q;e++)m[Q+e]<1e10&&h(0,e)>.04&&h(1,e)>.04&&(m[Q+e]=m[3*Q+e]=2e10);_>3&&(y=ji(y,k-g))}if(D&&k!==null&&(g=k),k!==null&&(S.seen=!0),D&&c.nb<(d?Ui:1)){let t=Math.min(w,Wi);T.push(e.has(C,t)?e.buf.slice(C-e.base,C+t-e.base):[C,t])}return S.nb++,!0};return r.onBlock=(e,t,n,a)=>{if(C===null){try{if(D(e,t,n,a))return}catch(e){S=[e]}C=w(),i&&(r.stop=!0)}},async()=>{if(S)throw S[0];if(x)return x;if(!c.nb||(C??w()))return`damaged first Clusters`;let t=[];for(let n of T)t.push(n instanceof Uint8Array?n:(await e.load(n[0],n[1],n[1]),e.buf.slice(n[0]-e.base,n[0]+n[1]-e.base)));let n=Ri(s,t);if(n)return n;let r=null,i=null;if(f&&_>15&&y>Math.max(1,Math.floor(l.den/(500*l.num)))&&(r=A(l.den,BigInt(l.num)*BigInt(y),P)),_>1&&!r&&f){let e=0,t=.01;for(let n=0;n<Q;n++){let r=qi(n);if(!((c.cid?c.cid*u<11511.5/r:r<12012)||u*v/_<9609.6/r))for(let i=0;i<2;i++){let a=h(i,n);a<t&&t>1e-9&&(t=a,e=r)}}e&&e/12012<1.01*(l.den/l.num)&&(r=A(e,12012,P))}if(r&&v&&c.cid<=0&&_>2&&Math.abs(1/(r.num/r.den*u)-v/_)<=1&&(i=r),c.durs&&!i&&c.cid){i=A(BigInt(c.durs)*BigInt(l.den),BigInt(c.cid)*BigInt(l.num),6e4);let e=.01,t=0;for(let n=0;n<Q;n++){let r=Math.abs(i.num/i.den/(qi(n)/12012)-1);r<e&&(e=r,t=qi(n))}t&&(i=A(t,12012,P))}return r??={num:l.den,den:l.num},{avg:i?`${i.num}/${i.den}`:`0/0`,r:`${r.num}/${r.den}`,packets:c.nb}}}var Q,Vi,Hi,Ui,Wi,Gi,Ki,qi,Ji,Yi=t((()=>{F(),Q=399,Vi=5e6,Hi=50,Ui=7,Wi=1024,Gi=`V_MPEG4/ISO/AVC`,Ki=`V_AV1`,qi=e=>e<360?(e+1)*1001:e<390?(e-329)*12012:e<393?[80,120,240][e-390]*12012:[24,30,60,12,15,48][e-393]*12e3,Ji=(e,t)=>Number((BigInt(e)*BigInt(t.num)*1000000n+BigInt(t.den>>1))/BigInt(t.den))})),Xi=n({CPU_MS_PER_BLOCK:()=>Ma,LARGE_FRAME_BYTES:()=>ba,MAX_CUES_BYTES:()=>Sa,MAX_TAIL_BYTES:()=>xa,PROBE_BLOCKS:()=>32,PROBE_CLUSTERS:()=>8,SMALL_SCAN_WINDOW:()=>$,analyzeMatroska:()=>ya,codecNameOf:()=>Zi,declaredRate:()=>Qi,estimateScan:()=>sa,estimateWalkMs:()=>ca,mergeRunStats:()=>$i,planExactScan:()=>la});function Zi(e){for(let t of Fa.split(` `)){let[n,r]=t.split(`:`);if(e.startsWith(n))return r}return``}function Qi(e){if(!(e>0))return null;let t=N(1e9,e,3e4),n=j(t);return{avg:n,r:t.num<t.den*1e3&&t.num>t.den*5?n:null}}function $i(e,t){let n=new Map,r={minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,medianDelta:null},i=0;for(let e of t){r.duplicateTimestamps+=e.duplicateTimestamps;for(let[t,r]of e.histogram)n.set(t,(n.get(t)??0)+r),i+=r}let a=[...n.keys()].sort((e,t)=>e-t);if(r.distinctDeltas=a.length,i===0)return r;let o=0,s=a.find(e=>(o+=n.get(e)??0)*2>=i)??a[0],c=he(s,e,a),l=0;for(let e of a)Math.abs(e-s)>c&&(l+=n.get(e)??0);return r.medianDelta=s,r.minFps=R(e,a[a.length-1]),r.maxFps=R(e,a[0]),r.isVfr=i>=2&&l>0,r.vfrRatio=l/i,r.timestampsQuantized=!r.isVfr&&a.length>1,r}function ea(e,t,n){e.minFps=t.minFps,e.maxFps=t.maxFps,e.isVfr=t.isVfr,e.vfrRatio=t.vfrRatio,e.distinctDeltas=t.distinctDeltas,e.duplicateTimestamps=t.duplicateTimestamps,e.timestampsQuantized=t.timestampsQuantized;for(let t of[`minFps`,`maxFps`,`isVfr`,`duplicateTimestamps`])e.provenance[t]=n}function ta(e,t){let n=y(t.number);n.fourccOrCodecId=t.codecId,n.codecName=Zi(t.codecId),n.width=t.width,n.height=t.height,n.timescale=1e9/(Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale),n.provenance.codec=n.provenance.dimensions=`header`;let r=Qi(t.defaultDuration);r?(n.avgFpsFfprobe=r.avg,n.rFpsFfprobe=r.r,n.nominalFps={...N(1e9,t.defaultDuration,3e4),kind:`declared`},n.provenance.nominalFps=`header`,t.frameRate>0&&t.defaultDuration===Math.trunc(1e9/t.frameRate)&&n.warnings.push(`DefaultDuration derived from Video FrameRate ${t.frameRate}`)):n.warnings.push(Pa);let i=e.tagDurations.get(t.uid);return i!==void 0&&(n.durationSec=i,n.provenance.durationSec=`header`),n}function na(e){return e.duration*e.timestampScale/1e9}function ra(e,t,n){let r=n.durationSec??na(e);r>0&&t.defaultDuration>0&&n.warnings.push(`about ${Math.round(r*1e9/t.defaultDuration)} frames (estimated from duration x DefaultDuration, assumes CFR)`)}function ia(e,t,n){let r=na(e),i=t*e.timestampScale/1e9;r>0&&Number.isFinite(i)&&r-i>Math.max(.5,.02*r)&&n.push(`Info Duration ${r.toFixed(3)} s exceeds the last block at ${i.toFixed(3)} s (false Duration or truncated file)`)}function aa(e,t,n){e.provenance.durationSec===`header`&&e.durationSec!==null&&Math.abs(e.durationSec-t)>Math.max(2/e.timescale,1/(e.nominalFps?.value||1/0))&&e.warnings.push(`DURATION tag ${e.durationSec.toFixed(3)} s differs from the scanned ${t.toFixed(3)} s`),e.durationSec=t,e.provenance.durationSec=n}async function oa(e,t,n,r){let i=Math.min(r,Ea);await e.load(n,i,i);let a=e.chunkAt(n);if(!a)return null;let o=a.buf,s=a.base,c=s+o.length,l={bytes:0,blocks:0,video:0,large:0,smallBytes:0},u=n;for(;u<c;){let e=q(o,u-s,s);if(e?.id===524531317){u=e.dataStart;continue}if(!e||e.size===-1)break;let i=e.dataStart+e.size,a=e.id===163||e.id===160;if(a?e.size>Aa||i>n+r:i>c||!ja.has(e.id))break;if(a){let n=e.id===160?q(o,e.dataStart-s,s):e,r=n&&(n.id===163||n.id===161)?oi(o,n.dataStart-s,n.size):null,a=r&&t.some(e=>e.number===r.track)?r.laces:0;l.blocks+=Math.max(1,a),l.video+=a,i-e.pos>=4096?l.large++:l.smallBytes+=i-e.pos}l.bytes=i-n,u=i}return l.blocks&&l.bytes>0?l:null}function sa(e,t,n){if(!t){if(!(n>0))return null;let t=e/n>=$;return{blocks:n,large:t?n:0,smallBytes:t?0:e}}let r=e/t.bytes,i=t.video*r;return{blocks:t.blocks*r*(t.video>0&&n>i?n/i:1),large:t.large*r,smallBytes:t.smallBytes*r}}function ca(e,t,n){let r=Math.min(e,Oa,t?.video?Math.ceil(Da*t.bytes/t.video):Oa);return s(n.costModel,Math.ceil(r/n.readAhead.head),r)}function la(e,t,n){let r=(t?.blocks??0)*n.costModel.perBlockMs,i=(e,t,i)=>({window:e,reads:t,bytes:i,ms:s(n.costModel,t,i)+r}),a=n.readAhead.matroskaScan,o=i(a,Math.ceil(e/a),e);if(!t)return o;let c=Math.ceil(t.large+t.smallBytes/$),l=i($,c,Math.min(e,c*$));return l.ms<o.ms?l:o}async function ua(){try{return await Promise.resolve().then(()=>(Yi(),ki))}catch{return`the estimate code did not load`}}async function da(e,t){try{return await t()}catch(t){return e.reader.checkAbort(),`the estimate failed: ${t instanceof Error?t.message:String(t)}`}}async function fa(e,t,n,r){let i=e.reader,a=r.onProgress,o=i.reads,s=t.header.segmentEnd-n;a?.({phase:`matroska-exact`,done:0,total:s}),await yi(e,t,n,(e,t)=>{s=Math.max(s,t-n),a&&i.reads!==o&&(o=i.reads,a({phase:`matroska-exact`,done:Math.min(e-n,s),total:s}))}),a?.({phase:`matroska-exact`,done:s,total:s})}async function pa(e,t){let n=t.firstCluster===null?null:await e.header(t.firstCluster);if(n?.id===524531317)return n.pos;let r=Math.max(t.segmentData,t.walkEnd),i=await Ar(e,r,Math.min(t.segmentEnd,r+Ta),t.declaredEnd,{step:wa});if(i>=0)return i;for(let n of(await ma(e,t)).slice(0,ka))if((await e.header(n))?.id===524531317)return n;return null}async function ma(e,t){let n=t.cuesPos===null||t.cuesPos>=t.segmentEnd?null:await e.header(t.cuesPos);if(n?.id!==475249515||n.size===-1)return[];let r=Math.min(n.size,Sa,e.size-n.dataStart);await e.load(n.dataStart,r,r);let i=[];return Hr(t,e.buf,n.dataStart-e.base,n.dataStart-e.base+r,ur,i),[...new Set(i)].filter(e=>e<t.segmentEnd).sort((e,t)=>e-t)}function ha(e,t){return e.length<=t?[...e]:[...new Set(Array.from({length:t},(n,r)=>e[Math.round(r*(e.length-1)/(t-1))]))]}async function ga(e,t,n,r,i){let a=Math.max(i.readAhead.tail,4096),o=t.segmentEnd,s=-1/0;for(;;){let i=Math.max(r,t.segmentEnd-a);for(let r of i<o?await bi(e,i,o,t.declaredEnd):[]){let i=ii(t,e.size,n);if(await _i(e,i,r),s=Math.max(s,i.maxAnyTicks),i.tracks.get(n[0].number)?.n)return{st:i,maxAnyTicks:s}}if(i<=r||a>=16777216)return null;o=i+4,a=Math.min(a*4,xa)}}async function _a(e,t,n,r,i,a,o){let s=await ga(e,t,n,i,a),c=await ma(e,t),l=ha(c[0]===i||!c.length?c:[i,...c.filter(e=>e>i)],8);if(!c.length){l=[i];let n=t.segmentEnd-i;for(let r=1;r<8;r++){let a=i+Math.floor(r*n/8),o=await Ar(e,a,Math.min(t.segmentEnd,a+Ca),t.declaredEnd,{step:wa});o>l[l.length-1]&&l.push(o)}}let u=new Map,d=null,f=0;for(let r of l){let a=ii(t,e.size,n);if(await _i(e,a,r,32)){f++,r===i&&(d=a);for(let e of a.tracks.values()){if(e.n<2)continue;let t=u.get(e.track.number)??[];t.push(ve({timescale:1e9/e.tickNs,pts:e.pts.subarray(0,e.n),tickQuantized:!0})),u.set(e.track.number,t)}}}o.push(`probe: ${f} cluster(s) sampled via ${c.length?`Cues`:`sync search`}, up to 32 video blocks each`),s||o.push(`probe: no video block found in the tail`),ia(t,s?.maxAnyTicks??-1/0,o),n.forEach((e,n)=>{let i=r[n],a=i.timescale,o=$i(a,u.get(e.number)??[]);o.isVfr===null?f>0&&i.warnings.push(`probe: every sampled cluster holds fewer than 2 frames of this track, so no frame interval was measured; scan all frames for min, max and VFR`):ea(i,o,`sampled`);let c=d?.tracks.get(e.number),l=c?.n?Math.min(...c.pts.subarray(0,c.n)):null;l!==null&&(i.startSec=l/a,i.provenance.startSec=`sampled`);let p=s?.st.tracks.get(e.number);p?.n&&aa(i,(p.maxPts+(p.maxPtsDur>0?p.maxPtsDur:o.medianDelta??0)-(l??0))/a,`sampled`),ra(t,e,i)})}function va(e,t){let n=e.timescale;if(e.frames=e.presentedFrames=t.frames,e.provenance.frames=e.provenance.presentedFrames=`computed`,e.isStill=t.frames===1,t.invisible&&e.warnings.push(`${t.invisible} invisible block(s) counted as frames`),t.missingPts&&e.warnings.push(`${t.missingPts} laced frame(s) without a timestamp`),t.noPtsFrames&&e.warnings.push(`${t.noPtsFrames} frame(s) before time 0 have no timestamp; interpolated from the neighbouring frames like ffmpeg`),t.overLimit&&e.warnings.push(`per-frame statistics skipped: more than ${t.n} frames`),!t.n||t.overLimit)return t.n||e.warnings.push(`no blocks for this track`),null;let r=ve({timescale:n,pts:t.pts.subarray(0,t.n),lastDuration:t.maxPtsDur>0?t.maxPtsDur:null,tickQuantized:!0});return e.warnings.push(...r.warnings),aa(e,r.durationSum/n,`exact`),ea(e,r,`exact`),e.avgFps=t.frames!==t.n&&Number.isSafeInteger(n)&&Number.isSafeInteger(r.durationSum)?ie(n,t.frames,r.durationSum):r.avgFps,e.startSec=r.firstPts===null?null:r.firstPts/n,e.dominantFps=r.dominantFps,e.provenance.avgFps=e.provenance.startSec=e.provenance.dominantFps=`exact`,!e.nominalFps&&r.nominalFps?(e.nominalFps=r.nominalFps,e.provenance.nominalFps=`exact`):e.nominalFps&&e.avgFps&&Math.abs(e.avgFps.value/e.nominalFps.value-1)>.005&&e.warnings.push(`declared rate ${e.avgFpsFfprobe} differs from the measured average ${e.avgFps.value.toFixed(3)}`),r.duplicateTimestamps&&e.warnings.push(`${r.duplicateTimestamps} duplicate block timestamp(s) excluded from the instantaneous rates`),r.profile}async function ya(e,t){let n=new Nr(e,t.readAhead.head),r=await Jr(n),i=v(r.docType===`webm`?`webm`:`matroska`),a=i.warnings;i.brand=r.docType,i.scan=`header`,a.push(...r.warnings),r.docType!==`webm`&&r.docType!==`matroska`&&a.push(`unexpected DocType '${r.docType}'`),r.segmentUnknownSize&&a.push(`Segment has an unknown size (live or unfinished recording)`),i.formatDurationSec=r.duration===0?null:Math.trunc(r.duration*r.timestampScale*1e3/1e6)/1e6,i.audioTrackCount=r.tracks.filter(e=>e.type===2).length,r.attachedImages&&a.push(`${r.attachedImages} attached image(s) ignored: ffprobe lists them as attached_pic video streams`);let o=r.tracks.filter(e=>e.type===1);if(!o.length)return a.push(`no video track`),i;i.primaryTrackId=o[0].number,i.videoTracks=o.map(e=>ta(r,e));let s=t.matroskaMode,c=null;if(s!==`header`&&(c=await pa(n,r),c===null&&a.push(`no Cluster found: nothing to scan`)),c===null)return o.forEach((e,t)=>ra(r,e,i.videoTracks[t])),i;let l=r.segmentEnd-c,u=o[0],d=r.tagDurations.get(u.uid)??na(r),f=d>0&&u.defaultDuration>0?d*1e9/u.defaultDuration:0,p=await oa(n,o,c,l),m=la(l,sa(l,p,f),t),h=u.defaultDuration?null:await ua();if(s===`auto`){let e=typeof h==`object`&&h&&!h.setupUnsupported(r)?ca(l,p,t):0;s=m.ms<=t.exactBudgetMs+e?`exact`:`probe`;let n=e?` plus the ${e.toFixed(0)} ms that probe mode reads for the ffprobe estimate`:``;s===`probe`&&a.push(`exact block scan skipped: predicted ${m.ms.toFixed(0)} ms exceeds the ${t.exactBudgetMs} ms budget${n}`)}let g=i.videoTracks[0],_=e=>{typeof e!=`string`&&(g.avgFpsFfprobe=e.avg,g.rFpsFfprobe=e.r),g.warnings[g.warnings.indexOf(Pa)]=typeof e==`string`?`${Na}not reproduced (${e})`:`${Na}estimated like ffprobe from ${e.packets} video packets`};if(s===`exact`){n.window=m.window;let s=ii(r,n.size,o,t.maxExpandedSamples);m.window<t.readAhead.matroskaScan&&(s.switchReads=e.reads+2*m.reads+16,s.largeWindow=t.readAhead.matroskaScan);let l=typeof h==`object`&&h?h.attachEstimate(n,r,Ia,s):h;await fa(n,s,c,t),l!==null&&_(typeof l==`function`?await da(n,l):l),i.scan=`exact`,a.push(...s.warnings),s.truncated&&a.push(`truncated file: the last Cluster or block ends beyond EOF`),s.missingClusterTs&&a.push(`${s.missingClusterTs} block(s) in Clusters without a Timestamp`),ia(r,s.maxAnyTicks,a);for(let[e,t]of o.entries()){let n=i.videoTracks[e];n.rateProfile=await je(va(n,s.tracks.get(t.number)))}return i}if(h!==null){let e=ii(r,n.size,[]),t=typeof h==`string`?h:h.attachEstimate(n,r,Ia,e,!0);_(typeof t==`string`?t:await da(n,()=>yi(n,e,c).then(t)))}return n.window=m.window===4096?$:t.readAhead.head,await _a(n,r,o,i.videoTracks,c,t,a),i.scan=`probe`,i}var ba,$,xa,Sa,Ca,wa,Ta,Ea,Da,Oa,ka,Aa,ja,Ma,Na,Pa,Fa,Ia,La=t((()=>{u(),F(),b(),z(),Er(),ri(),Oi(),Lr(),ba=32768,$=4096,xa=16777216,Sa=524288,Ca=1048576,wa=262144,Ta=16777216,Ea=16384,Da=48,Oa=5e6,ka=4,Aa=268435456,ja=new Set([231,236,191,167,171]),Ma=l.perBlockMs,Na=`no DefaultDuration: avg_frame_rate and r_frame_rate `,Pa=`${Na}come from the first packets, which header mode does not read`,Fa=`V_AV1:av1 V_VP8:vp8 V_VP9:vp9 V_MPEG4/ISO/AVC:h264 V_MPEGH/ISO/HEVC:hevc V_MPEGI/ISO/VVC:vvc V_MPEG4/ISO/ASP:mpeg4 V_MPEG4/ISO/AP:mpeg4 V_MPEG4/ISO/SP:mpeg4 V_MPEG4/MS/V3:msmpeg4v3 V_MPEG1:mpeg1video V_MPEG2:mpeg2video V_PRORES:prores V_MJPEG:mjpeg V_FFV1:ffv1 V_THEORA:theora V_UNCOMPRESSED:rawvideo V_DIRAC:dirac`,Ia={newScanState:ii,addBlock:ui}}));i(),u(),_(),b();let Ra={isobmff:async()=>(await Promise.all([Promise.resolve().then(()=>(zn(),vn)),Promise.resolve().then(()=>(z(),fe))]))[0].analyzeIsoBmff,matroska:async()=>(await Promise.all([Promise.resolve().then(()=>(La(),Xi)),Promise.resolve().then(()=>(z(),fe))]))[0].analyzeMatroska},za={isobmff:async(e,t)=>(await Ra.isobmff())(e,t),matroska:async(e,t)=>(await Ra.matroska())(e,t)};function Ba(e,t){let{perReadMs:n,bytesPerMs:r}=t.costModel,i=t.readAhead.head;return e<Math.max(i,Math.min(i+n*r,1048576))?e:i}function Va(e){return typeof e==`object`&&!!e&&`name`in e&&e.name===`AbortError`}function Ha(e){return e instanceof Error?e.message||e.name:String(e)}function Ua(e,t){e.container=t.container,e.brand=t.brand,e.formatDurationSec=t.formatDurationSec,e.scan=t.scan,e.videoTracks=t.videoTracks,e.audioTrackCount=t.audioTrackCount,e.primaryTrackId=t.primaryTrackId,e.error=t.error,e.warnings=t.warnings}async function Wa(e,t,n={},i=za,a=i===za?Ra:null){let s=performance.now(),c=o(n);r(c.signal);let l={name:t,size:e.size,...v(`unknown`),io:{reads:0,bytesRead:0,ms:0},engine:`own`},u=null,d=0;try{if(u=new g(e,{headWindow:c.readAhead.head,signal:c.signal}),u.size===0)l.error=`not a recognised container: empty file`;else{let e=O(await u.bytes(0,Math.min(1024,u.size),Ba(u.size,c)));if(e.kind===`unknown`)l.error=`not a recognised container: ${e.reason}`;else{l.container=e.kind===`isobmff`?`mp4`:`matroska`;let t=i[e.kind];if(a){let n=performance.now();t=await a[e.kind](),d=performance.now()-n}Ua(l,await t(u,c))}}}catch(e){if(c.signal?.aborted||Va(e))throw e;l.error=Ha(e)}return u&&(l.io.reads=u.reads,l.io.bytesRead=u.bytesFetched),l.io.ms=performance.now()-s-d,l}let Ga={run:(e,t,n)=>Wa(e,t,n),containers:`any`,warm:async e=>{await Promise.all(e.map(e=>Ra[e]()))}},Ka=(e,t)=>Object.assign(Error(e),{code:t}),qa=e=>e===`isobmff`||e===`matroska`;function Ja(e){let t=self,n=new Map,r=new Map,i=e=>t.postMessage({v:1,...e}),a=t=>{let r=n.get(t);if(!r){let i=Object.hasOwn(e,t)?e[t]:void 0;if(!i)return Promise.reject(Ka(`unknown engine ${t}`,`unknown-engine`));r=(typeof i==`function`?Promise.all([i(),Promise.resolve().then(()=>(z(),fe))]).then(([e])=>e):Promise.resolve(i)).catch(e=>{throw n.delete(t),e}),n.set(t,r)}return r},o=(e,t,n=!1,r=!1)=>{let a=t?.code,o=a===`unknown-engine`||a===`protocol`;i({type:`error`,id:e,message:Ha(t),aborted:n||Va(t),...o?{code:a}:r&&{reason:`load`}})},s=async e=>{let t=new AbortController;r.set(e.id,t);let n=0,s=!0;try{if(!(e.file instanceof Blob))throw Ka(`malformed analyze request`,`protocol`);let r=await a(e.engine);if(s=!1,r.containers!==`any`){let t=await k(e.file);if(!t||!r.containers.includes(t))return i({type:`skipped`,id:e.id,reason:`unsupported-container`,family:t})}let o=await r.run(e.file,e.name,{...e.options,signal:t.signal,onProgress:t=>{let r=performance.now();r-n<50||(n=r,i({type:`progress`,id:e.id,progress:t}))}});i({type:`result`,id:e.id,result:o})}catch(n){o(e.id,n,t.signal.aborted,s)}finally{r.delete(e.id)}},c=async e=>{try{if(![e.engines,e.containers].every(Array.isArray)||!e.containers.every(qa))throw Ka(`malformed warm request`,`protocol`);await Promise.all(e.engines.map(async t=>(await a(t)).warm?.(e.containers))),i({type:`warmed`,id:e.id})}catch(t){o(e.id,t,!1,!0)}};t.onmessage=({data:e})=>{if(e?.v!==1)return o(e?.id??0,Ka(`unsupported protocol version ${e?.v}`,`protocol`));if(e.type===`cancel`)r.get(e.id)?.abort();else if(e.type===`analyze`)s(e);else if(e.type===`warm`)c(e);else{let t=e;o(t.id,Ka(`unknown request type ${t.type}`,`protocol`))}}}Ja({own:Ga})})();
|
|
1
|
+
(function(){var e=Object.defineProperty,t=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},n=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};function r(e){if(e?.aborted)throw e.reason??new DOMException(`Aborted`,`AbortError`)}var i=t((()=>{}));function a(e,t){let n={...e};if(!t)return n;for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return n}function o(e={}){return{signal:e.signal??null,matroskaMode:e.matroskaMode??`auto`,exactBudgetMs:e.exactBudgetMs??150,readAhead:a(c,e.readAhead),costModel:a(l,e.costModel),maxExpandedSamples:e.maxExpandedSamples??5e6,onProgress:e.onProgress??null}}function s(e,t,n){return t*e.perReadMs+n/e.bytesPerMs}var c,l,u=t((()=>{c={head:65536,fragment:1048576,matroskaScan:1048576,tail:262144},l={perReadMs:.8,bytesPerMs:5e5,perBlockMs:2e-4}}));function d(e,t){if(!Number.isSafeInteger(e)||e<0)throw RangeError(`${t} must be a non-negative safe integer, got ${e}`)}function f(e,t){return e.getUint8(t)*65536+e.getUint16(t+1)}function p(e,t,n){let r=``;for(let i=0;i<n;i++)r+=String.fromCharCode(e.getUint8(t+i));return r}function m(e,t){return p(e,t,4).replace(/[^ -~]/g,`?`)}var h,g=t((()=>{i(),h=class{size;headWindow;maxWindows;signal;#e;#t=[];#n=[];#r=0;#i=0;constructor(e,t={}){d(e.size,`blob size`),this.#e=e,this.size=e.size,this.headWindow=t.headWindow??65536,this.maxWindows=Math.max(1,t.maxWindows??4),this.signal=t.signal??null,d(this.headWindow,`headWindow`)}get reads(){return this.#r}get bytesFetched(){return this.#i}checkAbort(){r(this.signal)}async read(e,t){if(d(e,`offset`),d(t,`length`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let n=Math.min(this.size,e+t);if(n===e)return new Uint8Array;this.checkAbort();let r;try{r=await this.#e.slice(e,n).arrayBuffer()}catch(e){throw this.checkAbort(),e?.name===`AbortError`?e:Error(`file read failed: ${e}`)}if(this.checkAbort(),this.#r++,r.byteLength!==n-e)throw Error(`file read failed: short read at ${e}: expected ${n-e} bytes, got ${r.byteLength}`);return this.#a(e,n),new Uint8Array(r)}async readMany(e,t=4){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let t=r++,[i,a]=e[t],o=this.peek(i,a);n[t]=o?new Uint8Array(o.buffer,o.byteOffset,o.byteLength):await this.read(i,a)}},a=[];for(let n=0;n<Math.max(1,Math.min(t,e.length));n++)a.push(i());return await Promise.all(a),n}peek(e,t){let n=Math.min(this.size,e+t);for(let t=0;t<this.#t.length;t++){let r=this.#t[t];if(e>=r.off&&n<=r.off+r.buf.length)return t>0&&(this.#t.splice(t,1),this.#t.unshift(r)),new DataView(r.buf.buffer,r.buf.byteOffset+(e-r.off),n-e)}return null}async view(e,t,n=this.headWindow){if(d(e,`offset`),d(t,`length`),d(n,`readAhead`),e>this.size)throw RangeError(`offset ${e} is beyond the end of the file (${this.size})`);let r=Math.min(this.size,e+t);if(r===e)return new DataView(new ArrayBuffer(0));let i=this.peek(e,r-e);if(i)return i;let a=Math.min(this.size,Math.max(r,e+n)),o=this.#t.find(t=>e>=t.off&&e<t.off+t.buf.length),s;if(o){let t=o.buf.subarray(e-o.off),n=await this.read(o.off+o.buf.length,a-(o.off+o.buf.length));s=new Uint8Array(t.length+n.length),s.set(t,0),s.set(n,t.length)}else s=await this.read(e,a-e);return this.#t.unshift({off:e,buf:s}),this.#t.length>this.maxWindows&&(this.#t.length=this.maxWindows),new DataView(s.buffer,s.byteOffset,r-e)}async bytes(e,t,n=this.headWindow){let r=await this.view(e,t,n);return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}#a(e,t){let n=this.#n,r=0,i=n.length;for(;r<i;){let t=r+i>>>1;n[t].end<e?r=t+1:i=t}let a=r,o=e,s=t,c=0;for(;a<n.length&&n[a].start<=t;){let r=n[a],i=Math.min(t,r.end)-Math.max(e,r.start);i>0&&(c+=i),r.start<o&&(o=r.start),r.end>s&&(s=r.end),a++}n.splice(r,a-r,{start:o,end:s}),this.#i+=t-e-c}}}));function _(e,t=null){return{container:e,brand:null,formatDurationSec:null,scan:null,videoTracks:[],audioTrackCount:0,primaryTrackId:null,error:t,warnings:[]}}function v(e){return{trackId:e,fourccOrCodecId:``,codecName:``,width:0,height:0,rotation:0,timescale:0,frames:null,presentedFrames:null,durationSec:null,startSec:null,avgFps:null,avgFpsFfprobe:null,rFpsFfprobe:null,nominalFps:null,dominantFps:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,isStill:!1,rateProfile:null,provenance:{},warnings:[]}}var y=t((()=>{}));u(),g(),y();let b=new Set([`ftyp`,`moov`,`mdat`,`free`,`skip`,`wide`,`pnot`,`uuid`,`moof`,`styp`,`sidx`]),x=[26,69,223,163],S=[{bytes:[137,80,78,71,13,10,26,10],offset:0,label:`PNG image`},{bytes:[255,216,255],offset:0,label:`JPEG image`},{bytes:[71,73,70,56],offset:0,label:`GIF image`},{bytes:[82,73,70,70],offset:0,label:`RIFF file (AVI/WAV/WebP)`},{bytes:[79,103,103,83],offset:0,label:`Ogg file`},{bytes:[70,76,86,1],offset:0,label:`FLV file`},{bytes:[0,0,1,186],offset:0,label:`MPEG program stream`},{bytes:[37,80,68,70],offset:0,label:`PDF document`},{bytes:[80,75,3,4],offset:0,label:`ZIP archive`},{bytes:[73,68,51],offset:0,label:`MP3 file`}];function C(e,t,n){if(e.length<n+t.length)return!1;for(let r=0;r<t.length;r++)if(e[n+r]!==t[r])return!1;return!0}function w(e){for(let t=4;t<8;t++){let n=e[t];if(n<32||n>126)return!1}return!0}function T(e){let t=Math.min(e.length,512);if(t===0)return!1;for(let n=0;n<t;n++){let t=e[n];if(t!==9&&t!==10&&t!==13&&(t<32||t===127))return!1}return!0}function E(e){for(let t of S)if(C(e,t.bytes,t.offset))return t.label;return e.length>=188&&e[0]===71&&e[188]===71?`MPEG transport stream`:T(e)?`text file`:`no known signature`}function D(e){if(e.length===0)return{kind:`unknown`,reason:`empty file`};if(C(e,x,0))return{kind:`matroska`,reason:`EBML header 1A45DFA3`};if(e.length>=8&&w(e)){let t=String.fromCharCode(e[4],e[5],e[6],e[7]);if(b.has(t)){let n=e[0]*16777216+e[1]*65536+e[2]*256+e[3];if(n===0)return{kind:`isobmff`,reason:`top-level '${t}' box running to end of file`};if(n>=8)return{kind:`isobmff`,reason:`top-level '${t}' box`};if(n===1){if(e.length<16)return{kind:`unknown`,reason:`'${t}' box with a truncated 64-bit size`};let n=0;for(let t=8;t<16;t++)n=n*256+e[t];if(n>=16)return{kind:`isobmff`,reason:`top-level '${t}' box with 64-bit size`}}return{kind:`unknown`,reason:`'${t}' box with invalid size ${n}`}}}return e.length<8?{kind:`unknown`,reason:`too small (${e.length} bytes)`}:{kind:`unknown`,reason:E(e)}}async function O(e){let{kind:t}=D(new Uint8Array(await e.slice(0,Math.min(1024,e.size)).arrayBuffer()));return t===`unknown`?null:t}i();function k(e,t){let{perReadMs:n,bytesPerMs:r}=t.costModel,i=t.readAhead.head;return e<Math.max(i,Math.min(i+n*r,1048576))?e:i}function ee(e){return e?.name===`AbortError`}function A(e){return e instanceof Error?e.message||e.name:String(e)}function te(e,t){e.container=t.container,e.brand=t.brand,e.formatDurationSec=t.formatDurationSec,e.scan=t.scan,e.videoTracks=t.videoTracks,e.audioTrackCount=t.audioTrackCount,e.primaryTrackId=t.primaryTrackId,e.error=t.error,e.warnings=t.warnings}async function j(e,t,n,i){let a=performance.now(),s=o(n);r(s.signal);let c={name:t,size:e.size,..._(`unknown`),io:{reads:0,bytesRead:0,ms:0},engine:`own`},l=null,u=0;try{if(l=new h(e,{headWindow:s.readAhead.head,signal:s.signal}),l.size===0)c.error=`not a recognised container: empty file`;else{let e=D(await l.bytes(0,Math.min(1024,l.size),k(l.size,s)));if(e.kind===`unknown`)c.error=`not a recognised container: ${e.reason}`;else{c.container=e.kind===`isobmff`?`mp4`:`matroska`;let t=performance.now(),n=await i(e.kind);u=performance.now()-t,te(c,await n(l,s))}}}catch(e){if(s.signal?.aborted||ee(e))throw e;c.error=A(e)}return l&&(c.io.reads=l.reads,c.io.bytesRead=l.bytesFetched),c.io.ms=performance.now()-a-u,c}function M(e){return e<0n?-e:e}function ne(e,t){for(;t!==0n;){let n=e%t;e=t,t=n}return e}function re(e,t){if(typeof e==`bigint`)return e;if(!Number.isSafeInteger(e))throw RangeError(`${t} must be a safe integer, got ${e}`);return BigInt(e)}function N(e,t,n=L){let r=re(e,`num`),i=re(t,`den`),a=re(n,`max`),o=0n,s=1n,c=1n,l=0n,u=r<0n!=i<0n,d=ne(M(r),M(i));for(d!==0n&&(r=M(r)/d,i=M(i)/d),r<=a&&i<=a&&(c=r,l=i,i=0n);i!==0n;){let e=r/i,t=r-i*e,n=e*c+o,u=e*l+s;if(n>a||u>a){if(c!==0n&&(e=(a-o)/c),l!==0n){let t=(a-s)/l;t<e&&(e=t)}i*(2n*e*l+s)>r*l&&(c=e*c+o,l=e*l+s);break}o=c,s=l,c=n,l=u,r=i,i=t}let f=Number(c);return{num:u?-f:f,den:Number(l),exact:i===0n}}function ie(e){return e.den===0?0:e.num/e.den}function P(e){return e?`${e.num}/${e.den}`:`0/0`}function F(e,t){return{num:e,den:t,value:ie({num:e,den:t})}}function I(e,t,n=L){let r=N(e,t,n);return F(r.num,r.den)}function ae(e,t,n){return t<=0||n<=0||e<=0?null:I(BigInt(e)*BigInt(t),n,L)}var L,oe=t((()=>{L=2147483647})),se=n({CUSUM_ALARM_PERIODS:()=>2,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>Ze,MAX_ANOMALIES:()=>50,MAX_BUCKETS:()=>120,MAX_SEGMENTS:()=>50,MIN_SEGMENT_FRAMES:()=>5,MIN_SEGMENT_SEC:()=>le,UNEVEN_DOMINANT_SHARE:()=>ue,rateProfile:()=>pe});function ce(e,t,n){e.t0=Math.min(e.t0,t.t0),e.t1=Math.max(e.t1,t.t1),e.frames+=t.frames,n?(e.n+=t.n,e.sum+=t.sum,e.ex+=t.ex):e.ex+=t.t1-t.t0}var le,ue,R,de,fe,pe,me=t((()=>{$e(),le=.5,ue=.8,R=1+Ye,de=e=>String(+e.toPrecision(4)),fe=e=>({t0:e,t1:e,n:0,sum:0,frames:0,ex:0,d:0,kind:`steady`}),pe=(e,t,n,r)=>{let i=t,a=Ze*i,o=e=>i*e.n/e.sum,s=e=>e.n>=5&&e.t1-e.t0>=.5*i,c=[],l=e=>{let t=c[c.length-1];s(e)?c.push(e):t?.kind===`short`?ce(t,e,!0):c.push({...e,kind:`short`})},u=fe(0),d=fe(0),f=fe(0),p=0,m=0,h=0,g=0,_=0,v=!1,y=()=>{u.t1=p,v?c.push({...u,kind:`hold`}):l(u),u=fe(p),v=!1,g=_=0},b=Math.min(120,Math.floor(n/2)),x=r/b,S=new Float64Array(b),C=(e,t)=>{u.n+=e,u.sum+=e*t,u.frames+=e,p+=e*t},w=(e,t)=>{let n=e;if(t<=0)u.frames+=n,h+=n;else{for(let e=p,r=e+n*t,i=Math.floor(e/x);e<r&&i<b;i++){let n=Math.min(r,(i+1)*x);n>e&&(S[i]+=(n-e)/t),e=Math.max(e,n)}for(;n>0;){let e=u.sum/u.n;if(u.n&&t>=Math.max(a,4*e)){y(),v=!0,C(1,t),n--;continue}if(v&&Math.abs(t-e)>.075*e&&y(),v=!1,!u.n){C(n,t);return}let r=t-e,i=Xe*e,o=2*e,s=Math.abs(r)>i,c=s?1:n;if(s&&(r>0?!g||r-i>o:!_)){let e={...u,t1:p,d:t};r>0?d=e:f=e}if(g=Math.max(0,g+c*(r-i)),_=Math.max(0,_-c*(r+i)),C(c,t),n-=c,g>o||_>o){let e=g>o?d:f,t=u.n-e.n-1;t>0&&Math.abs(Math.log(e.d*e.n/e.sum))<Math.abs(Math.log(e.d*t/(u.sum-e.sum-e.d)))&&(e.t1+=e.d,e.n++,e.sum+=e.d,e.frames++),u.t0=e.t1,u.n-=e.n,u.sum-=e.sum,u.frames-=e.frames,l(e),g=_=0}}}},T=0,E=0;if(e((e,t)=>{e>0&&(m+=e,T&&t!==E&&(w(T,E),T=0),T+=e,E=t)}),T&&w(T,E),!(p>0))return null;u.n?y():c[c.length-1].frames+=u.frames;let D=[],O=(e,t,n,r,a=t.t1-t.t0)=>{D.push({kind:e,atSec:t.t0/i,durationSec:a/i,fromFps:n,toFps:r})},k=[],ee=(e,t)=>e?Math.abs(Math.log(o(e)/t)):1/0;c.forEach((e,t)=>{let n=k[k.length-1];if(e.kind===`short`||e.kind===`hold`){let r=o(e),i=c[t+1]?.kind===`steady`?c[t+1]:void 0,l=ee(n,r)<=ee(i,r)?n:i;if(e.kind=s(e)?`variable`:`steady`,e.kind===`steady`&&l){let t=o(l),n=e.sum>=e.n*Math.max(a,4*l.sum/l.n)?`freeze`:r*R<t?`gap`:r>t*R?`burst`:null;n&&O(n,e,t,r),ce(l,e,!n);return}}let r=n?o(e)/o(n):0;n?.kind===`steady`&&e.kind===`steady`&&r<R&&r*R>1?ce(n,e,!0):k.push(e)});let A=k[k.length-1],te=p+A.sum/A.n;A.frames+=n-m,A.t1=te;for(let e=1;e<k.length;e++){let t=k[e-1],n=k[e],r=o(n)/o(t);(t.kind===`steady`&&n.kind===`steady`||r>=R||r*R<=1)&&O(`rate-change`,n,o(t),o(n),0)}D.sort((e,t)=>e.atSec-t.atSec);let j=k.filter(e=>e.kind===`steady`).map(e=>[o(e),e.t1-e.t0-e.ex,e.n]).sort((e,t)=>e[0]-t[0]),M=0,ne=0,re=0,N=0,ie=0;for(let[e,t,n]of j){for(re+=t,N+=n;e>=j[ie][0]*R;ie++)re-=j[ie][1],N-=j[ie][2];M=Math.max(M,re),ne=Math.max(ne,N)}let P=M/te,F=P<.8||ne<.8*(m-h)||j.length>1&&j[j.length-1][0]>=j[0][0]*R,I=k.slice(0,3).map(e=>`${e.kind===`variable`?`~`:``}${de(o(e))} fps for ${de((e.t1-e.t0)/i)} s`);k.length>3&&I.push(`+${k.length-3} more`);let ae=``,L=(e,t)=>{e&&(ae+=`${ae?`, `:`; `}${e} ${t}${e>1?`s`:``}`)};for(let e of[`freeze`,`gap`,`burst`])L(D.filter(t=>t.kind===e).length,e);return L(h,`duplicate timestamp`),{segments:k.slice(0,50).map(e=>({startSec:e.t0/i,endSec:e.t1/i,frames:e.frames,fps:o(e),kind:e.kind})),moreSegments:Math.max(0,k.length-50),anomalies:D.slice(0,50),moreAnomalies:Math.max(0,D.length-50),buckets:{bucketSec:x/i,fps:Array.from(S,e=>e*i/x)},uneven:F,dominantShare:P,summary:`${F?`Uneven`:ae?`Mostly steady`:`Steady`}: ${I.join(`, `)}${ae}`}}})),he=n({CUSUM_DRIFT:()=>Xe,FREEZE_FACTOR:()=>4,FREEZE_MIN_SEC:()=>Ze,MAX_REORDER_DEPTH:()=>16,RATE_CHANGE_RELATIVE:()=>Ye,SNAP_RELATIVE_TOLERANCE:()=>qe,VFR_RELATIVE_TOLERANCE:()=>Je,analyzeTimeline:()=>xe,msGridTicks:()=>_e,rateFromTicks:()=>z,rateProfileOf:()=>Pe,reorderDepthFromCts:()=>ye,snapToStandardRate:()=>ge,vfrTolerance:()=>ve});function ge(e,t=qe){if(!(e>0))return null;let n=null,r=1/0;for(let t of Qe){let i=Math.abs(e-t.value)/t.value;i<r&&(r=i,n=t)}return r<=t?n:null}function _e(e,t){if(!(e>1e3)||t.length===0)return 0;for(let n of t){let t=n*1e3;if(!Number.isSafeInteger(t)||t%e!==0)return 0}return e/1e3}function ve(e,t,n){return Math.max(1,Math.round(Je*e),_e(t,n))}function ye(e,t,n){return!(t>e)||!(n>0)?0:Math.min(16,Math.ceil((t-e)/n))}function be(e){if(Number.isInteger(e)||!(e>0))return null;let t=1e9/e,n=Math.round(t);return n>0&&Math.abs(t-n)<=1e-6*n?n:null}function z(e,t){let n=be(e);return n!==null&&t>0&&Number.isSafeInteger(n*t)?I(1e9,n*t,2**53-1):we(e,t,2**53-1)}function xe(e){let t=[],n=Ee(e.timescale,t);return`segments`in e?He(e,n,t):Ke(e,n,t)}function Se(e){return`counts`in e&&`deltas`in e?{n:Math.min(e.counts.length,e.deltas.length),counts:e.counts,values:e.deltas}:{n:e.length,counts:null,values:e}}function Ce(e){return e?`counts`in e&&`offsets`in e?{n:Math.min(e.counts.length,e.offsets.length),counts:e.counts,values:e.offsets}:{n:e.length,counts:null,values:e}:null}function we(e,t,n=L){if(!(e>0)||!(t>0))return null;if(Number.isSafeInteger(e)&&Number.isSafeInteger(t))return I(e,t,n);let r=1e6,i=Math.round(e*r),a=Math.round(t*r);return Number.isSafeInteger(i)&&Number.isSafeInteger(a)?I(i,a,n):F(e/t,1)}function Te(e,t,n){if(!(t>0)||!(n>0))return null;let r=be(e);return r!==null&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?I(BigInt(t)*1000000000n,BigInt(r)*BigInt(n),L):Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(n)?I(BigInt(e)*BigInt(t),n,L):we(e*t,n)}function Ee(e,t){return e>0&&Number.isFinite(e)?e:(t.push(`invalid timescale ${e}, using 1`),1)}function De(e){return e?{ws:e.start,we:e.end>e.start?e.end:1/0}:{ws:-1/0,we:1/0}}function Oe(e,t){return{timescale:e,sampleCount:0,durationSum:0,avgFps:null,avgFpsString:`0/0`,presentedAvgFps:null,presentedFrames:null,firstPts:null,lastPts:null,deltaCount:0,excludedTailDeltas:0,reorderDepth:0,duplicateTimestamps:0,discontinuities:0,histogram:[],distinctDeltas:0,minDelta:null,maxDelta:null,medianDelta:null,meanDelta:null,tolerance:null,minFps:null,maxFps:null,isVfr:null,vfrRatio:0,nominalFps:null,dominantFps:null,timestampsQuantized:!1,profile:null,fastPath:!1,warnings:t}}function ke(e,t,n,r,i,a){let o=e.timescale,s=e.isVfr===!1&&n-t<=(e.tolerance??0)&&n<2*t;return n>t*1.075&&!s?e=>e(r,o,i,a):null}function Ae(e,t){let n=e.medianDelta,r=e.timescale;!n||!t||t<4*n||t<.5*r||e.warnings.push(`last frame held ${(t/r).toFixed(3)} s (${(t/n).toFixed(1)}x the median frame interval): the average is below the frame rate`)}function je(e,t){if(Ae(e,t),e.presentedFrames===null||e.presentedFrames<=0||e.firstPts===null||e.lastPts===null)return;let n=t>0?t:e.medianDelta??0;e.presentedAvgFps=Te(e.timescale,e.presentedFrames,e.lastPts-e.firstPts+n)}function Me(e,t){let n=0;for(let[r,i]of ze(e)){if(t<n+r)return i;n+=r}return 0}async function Ne(){try{let{rateProfile:e}=await Promise.resolve().then(()=>(me(),se));return e}catch{return null}}async function Pe(e){let t=e&&await Ne();return t?e(t):null}function Fe(e,t){return e-t>=2?e-t:e}function Ie(e,t,n){let r=e.timescale,i=[...t.keys()].sort((e,t)=>e-t),a=i.map(e=>[e,t.get(e)??0]),o=0,s=0;for(let[e,t]of a)o+=t,s+=e*t;if(e.histogram=a,e.distinctDeltas=i.length,o===0)return;let c=0,l=i[0];for(let[e,t]of a)if(c+=t,c*2>=o){l=e;break}let u=i[0],d=0;for(let[e,t]of a)t>d&&(u=e,d=t);let f=_e(r,i),p=Math.max(1,Math.round(Je*l),f),m=0;for(let[e,t]of a)Math.abs(e-l)>p&&(m+=t);let h=i[0],g=i[i.length-1],_=o>=2&&m>0;if(e.minDelta=h,e.maxDelta=g,e.medianDelta=l,e.meanDelta=s/o,e.tolerance=p,e.minFps=z(r,g),e.maxFps=z(r,h),e.isVfr=_,e.vfrRatio=m/o,i.length===1){let t=z(r,h);t&&(e.nominalFps={...t,kind:`exact`})}else if(_&&d*2>=o){let t=z(r,u);t&&(e.dominantFps={rate:t,share:d/o})}e.timestampsQuantized=(n||f>0)&&!_&&i.length>1}function Le(e){if(e.nominalFps||e.isVfr!==!1||e.distinctDeltas<2||!e.avgFps)return;let t=ge(e.meanDelta?e.timescale/e.meanDelta:e.avgFps.value);t&&(e.nominalFps={...t,kind:`snapped`})}function Re(e){let t={n:0,d:0,constantCts:!0,ctsValue:0,ctsMin:1/0,ctsMax:-1/0,firstDelta:0,negativeDurations:!1,discontinuities:0,startDts:0,ctsMismatch:0},n=!1,r=e=>{n?e!==t.ctsValue&&(t.constantCts=!1):(t.ctsValue=e,n=!0),e<t.ctsMin&&(t.ctsMin=e),e>t.ctsMax&&(t.ctsMax=e)},i=0;for(let n=0;n<e.length;n++){let a=e[n];a.baseDts!==void 0&&a.baseDts!==null&&(n===0?t.startDts=a.baseDts:a.baseDts!==i&&t.discontinuities++,i=a.baseDts);let o=Se(a.durations),s=0;for(let e=0;e<o.n;e++){let n=o.counts?o.counts[e]:1;if(n<=0)continue;let r=o.values[e];s+=n,t.d+=n*r,i+=n*r,r<0&&(t.negativeDurations=!0),t.firstDelta===0&&r>0&&(t.firstDelta=r)}t.n+=s;let c=Ce(a.cts),l=0,u=0;if(c){for(let e=0;e<c.n;e++){let t=c.counts?c.counts[e]:1;if(t<=0)continue;u+=t;let n=Math.min(t,s-l);n<=0||(l+=n,r(c.values[e]))}u!==s&&t.ctsMismatch++}l<s&&r(0)}return n||(t.ctsMin=0,t.ctsMax=0),t}function*ze(e){for(let t of e){let e=Se(t.durations);for(let t=0;t<e.n;t++){let n=e.counts?e.counts[t]:1;n>0&&(yield[n,e.values[t]])}}}function Be(e,t,n,r){if(n===-1/0)return 0;if(n===1/0)return r;let i=t,a=0;for(let[t,r]of ze(e)){if(r===0){if(i<n){a+=t;continue}return a}if(i+(t-1)*r<n)a+=t,i+=t*r;else return a+Math.max(0,Math.min(t,Math.ceil((n-i)/r)))}return a}function Ve(e,t,n){let r=t,i=0;for(let[t,a]of ze(e)){if(n<i+t)return r+(n-i)*a;i+=t,r+=t*a}return r}function He(e,t,n){let r=e.segments,i=Re(r);i.ctsMismatch>0&&n.push(`composition offsets do not match the sample count in ${i.ctsMismatch} segment(s)`),i.discontinuities>0&&n.push(`decode timestamp discontinuities: ${i.discontinuities}`),i.negativeDurations&&n.push(`negative sample durations`),Number.isSafeInteger(i.d)||n.push(`duration sum exceeds 2^53-1`);let a=Oe(t,n);if(a.sampleCount=i.n,a.durationSum=i.d,a.discontinuities=i.discontinuities,a.avgFps=Te(t,i.n,i.d),a.avgFpsString=P(a.avgFps),i.n===0)return a.presentedFrames=0,a;let o=e.reorderDepth??ye(i.ctsMin,i.ctsMax,i.firstDelta);a.reorderDepth=o;let s=1+o,{ws:c,we:l}=De(e.editWindow),u=e.tickQuantized??!1;if(!e.forceExpand&&i.constantCts&&i.discontinuities===0&&!i.negativeDurations){a.fastPath=!0;let e=i.startDts+i.ctsValue,t=Be(r,e,c,i.n),n=Math.max(t,Be(r,e,l,i.n));if(a.presentedFrames=n-t,n===t)return a;let o=Ve(r,e,t),d=Ve(r,e,n-1);a.firstPts=o,a.lastPts=d;let f=n-t-1,p=Fe(f,s),m=new Map,h=0,g=1/0,_=0;for(let[e,n]of ze(r)){if(h>=t+f)break;let r=Math.max(h,t),i=Math.min(h+e,t+f);if(i>r){if(n===0)a.duplicateTimestamps+=i-r;else{g=Math.min(g,n),_=Math.max(_,n);let i=Math.min(h+e,t+p);i>r&&(m.set(n,(m.get(n)??0)+(i-r)),a.deltaCount+=i-r)}}h+=e}return a.excludedTailDeltas=f-p,Ie(a,m,u),Le(a),je(a,Me(r,n-1)),a.profile=ke(a,g,_,e=>{let n=0;for(let[i,a]of ze(r)){if(n>=t+f)break;let r=Math.max(n,t),o=Math.min(n+i,t+f);o>r&&e(o-r,a),n+=i}},n-t,d-o),a}let d=e.maxExpandedSamples??5e6;if(i.n>d)return n.push(`per-sample analysis skipped: ${i.n} samples exceed the limit of ${d}`),a;let f=new Float64Array(i.n),p=0,m=0;for(let e of r){e.baseDts!==void 0&&e.baseDts!==null&&(m=e.baseDts);let t=p,n=Se(e.durations);for(let e=0;e<n.n;e++){let t=n.counts?n.counts[e]:1,r=n.values[e];for(let e=0;e<t;e++)f[p++]=m,m+=r}let r=Ce(e.cts);if(r){let e=t;for(let t=0;t<r.n&&e<p;t++){let n=r.counts?r.counts[t]:1,i=r.values[t];for(let t=0;t<n&&e<p;t++)f[e++]+=i}}}let h=-1;for(let e=0;e<f.length;e++){let t=f[e];t>=c&&t<l&&(h<0||t>=f[h])&&(h=e)}let g=h>=0?Me(r,h):0;return We(a,Ue(f,c,l),s,u),je(a,g),Le(a),a}function Ue(e,t,n){let r=e.length;if(t!==-1/0||n!==1/0){r=0;for(let i=0;i<e.length;i++){let a=e[i];a>=t&&a<n&&(e[r++]=a)}}let i=e.subarray(0,r);for(let e=1;e<r;e++)if(i[e]<i[e-1]){i.sort();break}return i}function We(e,t,n,r){let i=t.length;if(e.presentedFrames=i,i===0)return;e.firstPts=t[0],e.lastPts=t[i-1];let a=i-1,o=Fe(a,n),s=new Map,c=1/0,l=0;for(let n=1;n<=a;n++){let r=t[n]-t[n-1];r<=0?e.duplicateTimestamps++:(c=Math.min(c,r),l=Math.max(l,r),n<=o&&(s.set(r,(s.get(r)??0)+1),e.deltaCount++))}e.excludedTailDeltas=a-o,Ie(e,s,r),e.profile=ke(e,c,l,e=>{for(let n=1;n<=a;n++)e(1,t[n]-t[n-1])},i,t[a]-t[0])}function Ge(e){let t=-1/0,n=0;for(let r=0;r<e.length;r++){let i=e[r];i>t?t=i:t-i>n&&(n=t-i)}return n}function Ke(e,t,n){let r=e.pts,i=r.length,a=Oe(t,n);if(a.sampleCount=i,i===0)return a.presentedFrames=0,a;let o=1/0,s=-1/0;for(let e=0;e<i;e++){let t=r[e];t<o&&(o=t),t>s&&(s=t)}let{ws:c,we:l}=De(e.editWindow),u=Ue(Float64Array.from(r),c,l),d=e.reorderDepth;if(d===void 0){let t=0;for(let e=1;e<u.length;e++){let n=u[e]-u[e-1];if(n>0){t=n;break}}d=e.ctsRange?ye(e.ctsRange.min,e.ctsRange.max,t):ye(0,Ge(r),t)}a.reorderDepth=d,We(a,u,1+d,e.tickQuantized??!1),Ae(a,e.lastDuration);let f=e.lastDuration??a.medianDelta??0;return a.durationSum=s-o+f,a.avgFps=Te(t,i,a.durationSum),a.avgFpsString=P(a.avgFps),a.presentedAvgFps=a.avgFps,Le(a),a}var qe,Je,Ye,Xe,Ze,Qe,$e=t((()=>{oe(),u(),qe=.001,Je=.005,Ye=.15,Xe=Ye/2,Ze=.5,Qe=(()=>{let e=[];for(let t of[24,30,48,60,120,240])e.push(F(t*1e3,1001));for(let t=1;t<=240;t++)e.push(F(t,1));return e})()}));function B(e,t,n,r=0){let i=Math.min(e.byteLength,n);if(t+8>i)return null;let a=e.getUint32(t),o=m(e,t+4),s=8,c=a;if(a===1){if(t+16>i)return null;let n=e.getBigUint64(t+8);if(n>BigInt(2**53-1))throw new H(`corrupt file: box '${o}' at ${r+t} has a size above 2^53-1`);c=Number(n),s=16}else a===0&&(c=n-t);if(o===`uuid`&&(s+=16),c<s)throw new H(`corrupt file: box '${o}' at ${r+t} is smaller than its header`);let l=t+c;return{type:o,start:t,size:c,headerSize:s,end:Math.min(l,n),truncated:l>n}}function*V(e,t,n,r){let i=t;for(;i+8<=n;){let t;try{t=B(e,i,n)}catch(e){r?.push(e.message.replace(/^corrupt file: /,`ignored invalid child: `));return}if(!t)return;yield t,i=t.start+t.size}}function et(e,t,n,r){let i=e.getBigUint64(t);if(i>BigInt(2**53-1))throw new H(`unsupported: box '${n}' at ${r} holds a value above 2^53-1`);return Number(i)}function tt(e,t,n,r){let i=e.getBigInt64(t);if(i>BigInt(2**53-1)||i<-BigInt(2**53-1))throw new H(`unsupported: box '${n}' at ${r} holds a value beyond 2^53-1`);return Number(i)}function nt(e,t,n,r,i){let a=Math.max(0,Math.floor(t/n));return e>a?(i.push(`${r} declares ${e} entries but its box holds only ${a}`),a):e}var H,rt=t((()=>{g(),H=class extends Error{constructor(e){super(e),this.name=`IsoBmffError`}}}));function it(){if(U)return U;U=new Map;for(let e of st.split(`|`)){let t=e.indexOf(`:`),n=e.slice(0,t);for(let r=t+1;r+4<=e.length;r+=4)U.set(e.slice(r,r+4),n)}return U}function at(e){return it().has(e)}function ot(e,t=null,n=!1){return t!==null&&ct[t]?ct[t]:e===`dvh1`&&n?`hevc`:it().get(e)??`unknown`}var st,U,ct,lt=t((()=>{st=`rawvideo:raw yuv22vuyyuvs|v210:v210|mjpeg:jpegmjpaAVDJAVRndmb1|mpeg4:mp4vDIVXXVID3IV2|h263:h263s263H263|dvvideo:dvcpdvc dvppdv5pdv5nAVdvAVd1dvhqdvhpdvh1dvh2dvh3dvh4dvh5dvh6|qtrle:rle |cinepak:cvid|svq1:SVQ1svq1svqi|svq3:SVQ3|vvc:vvc1vvi1|hevc:hev1hvc1dvhe|h264:avc1avc2avc3avc4ai5pai5qai52ai53ai55ai56ai1pai1qai12ai13ai15ai16AVinaivxdva1dvav|evc:evc1|vp8:vp08|vp9:vp09|av1:av01|mpeg1video:m1v m1v1mpegmp1v|mpeg2video:m2v1hdv1hdv2hdv3hdv4hdv5hdv6hdv7hdv8hdv9hdvamx5nmx5pmx4nmx4pmx3nmx3pxd51xd54xd55xd59xd5axd5bxd5cxd5dxd5exd5fxdv1xdv2xdv3xdv4xdv5xdv6xdv7xdv8xdv9xdvaxdvbxdvcxdvdxdvexdvfxdhdxdh2AVmpmp2v|jpeg2000:mjp2|png:png MNG |gif:gif |tiff:tiff|vc1:vc-1|cavs:avs2|avs3:avs3|dirac:drac|dnxhd:AVdnAVdh|prores:apchapcnapcsapcoap4hap4x|prores_raw:aprnaprh|hap:Hap1Hap5HapYHapAHapM|cfhd:CFHD|lcevc:lvc1|apv:apv1`,U=null,ct={32:`mpeg4`,33:`h264`,35:`hevc`,51:`vvc`,96:`mpeg2video`,97:`mpeg2video`,98:`mpeg2video`,99:`mpeg2video`,100:`mpeg2video`,101:`mpeg2video`,106:`mpeg1video`,108:`mjpeg`,109:`png`,110:`jpeg2000`,163:`vc1`,164:`dirac`,177:`vp9`}}));function ut(e){return{fileSize:e,brand:null,compatibleBrands:[],hasFtyp:!1,hasMvhd:!1,timescale:1,duration:0,matrix:Int32Array.from(pt),tracks:[],chapterTrackIds:new Set,hasMvex:!1,trex:new Map,moofCount:0,topLevel:[],truncated:!1,ffprobeMoofLimit:1/0,ffprobeReject:null,warnings:[]}}function dt(){return{id:0,enabled:!1,handler:``,timescale:0,hasMdhd:!1,mdhdDuration:0,matrix:Int32Array.from(pt),sampleEntry:``,originalFormat:null,stsdCount:0,width:0,height:0,esdsObjectType:null,hasHvcc:!1,sttsCounts:new Uint32Array,sttsDeltas:new Uint32Array,cttsCounts:null,cttsOffsets:null,dtsShift:0,sampleCount:null,sampleSize:0,overruns:[],edits:[],fragments:[],warnings:[],dv:null,stss:null,stsz:null,stz2:null,stsc:null,stco:null,co64:null}}var ft,pt,mt=t((()=>{ft=2**53-1,pt=[65536,0,0,0,65536,0,0,0,1<<30]}));function ht(e){let t=0;for(let n=256;n<=2048;n<<=1)e&n&&(t+=4);return t}function gt(e,t,n,r,i,a,o=i+t-8){if(t+8>n)return null;let s=f(e,t+1),c=e.getUint32(t+4),l=r.trex.get(c),u=t+8,d=e=>u+e<=n,p=s&131072?i:a;if(s&1){if(!d(8))return null;p=et(e,u,`tfhd`,o),u+=8}s&2&&(u+=4);let m=l?l.duration:null;if(s&8){if(!d(4))return null;m=e.getUint32(u),u+=4}let h=l?l.size:0;if(s&16){if(!d(4))return null;h=e.getUint32(u)}return{flags:s,trackId:c,baseDataOffset:p,defaultDuration:m,defaultSize:h,trexMissing:!l}}function _t(e,t,n,r,i,a,o,s){let c=f(e,t+1),l=e.getUint32(t+4),u=t+8,d=i;c&1&&(d=r.baseDataOffset+e.getInt32(u),u+=4),c&4&&(u+=4);let p=ht(c),m;p>0?m=nt(l,n-u,p,`trun`,o):(m=l,m>s&&(o.push(`trun count ${l} limited to ${s}`),m=s));let h=p>0&&m<l,g=!!(c&256);if(!g&&r.defaultDuration===null&&m>0)throw new H(`corrupt file: no sample duration for track ${r.trackId}`);let _=r.defaultDuration??0,v=g?new Uint32Array(m):null,y=c&2048?new Int32Array(m):null,b=!!(c&512),x=g?0:_*m,S=d,C=0,w=0;if(p>0)for(let t=0;t<m;t++){if(g){let n=e.getUint32(u);v[t]=n,x+=n,u+=4}let n=r.defaultSize;b&&(n=e.getUint32(u),u+=4),c&1024&&(u+=4),y&&(y[t]=e.getInt32(u),u+=4),S<a&&C++,w===t&&S+n<=a&&w++,S+=n}if(!b){let e=r.defaultSize,t=Math.max(0,a-d);C=e>0?Math.min(m,Math.ceil(t/e)):Math.min(m,t),w=e>0?Math.min(m,Math.floor(t/e)):C,S=d+e*m}return{fragment:{moofIndex:0,baseDts:null,count:m,durations:v,defaultDuration:_,cts:y,durationSum:x,present:C,complete:w,trexMissing:r.trexMissing,overrun:h},dataEnd:S}}function vt(e,t,n,r,i,a){let o=n,s=!1,c=e=>{i.ffprobeReject||={moof:r,reason:e}},l=new Map;for(let e of i.tracks)l.has(e.id)||l.set(e.id,e);for(let u of V(e,t.start+t.headerSize,t.end,i.warnings)){if(u.type!==`traf`)continue;let t=null,d,f=null,p=0;for(let m of V(e,u.start+u.headerSize,u.end,i.warnings)){let u=m.start+m.headerSize;if(m.type===`tfhd`){if(t=gt(e,u,m.end,i,n,o,n+m.start),!t)continue;t.trackId===0?c(`rejects this file: tfhd with track_ID 0`):t.trexMissing||(s=!0),p=t.baseDataOffset,d=l.get(t.trackId),d||i.warnings.push(`fragment for unknown track ${t.trackId}`)}else if(m.type===`tfdt`&&u+8<=m.end)f=e.getUint8(u)===1&&u+12<=m.end?et(e,u+4,`tfdt`,n+m.start):e.getUint32(u+4);else if(m.type===`trun`&&u+8<=m.end){if(s?(!t||t.trexMissing)&&c(`misreads this file: a traf without trex is read as another track`):c(`rejects this file: trun without a tfhd that has a trex`),!t||!d)continue;let n=d,{fragment:l,dataEnd:h}=_t(e,u,m.end,t,p,i.fileSize,n.warnings,a);l.moofIndex=r,l.baseDts=f,f=null,p=h,o=h,l.trexMissing&&!n.warnings.includes(bt)&&n.warnings.push(bt),n.fragments.push(l)}}}}function yt(e,t,n){let r=t.start+t.headerSize,i=r<t.end&&e.getUint8(r)===1;if(r+(i?32:24)>t.end)throw new H(`corrupt file: box 'sidx' at ${n} is truncated`);let a=r+12,o=i?et(e,a,`sidx`,n):e.getUint32(a),s=i?et(e,a+8,`sidx`,n):e.getUint32(a+4);a+=i?16:8;let c=e.getUint16(a+2);a+=4;let l=n+(t.end-t.start),u=l+s,d=0,f=!1,p=[];for(let n=0;n<c&&a+12<=t.end;n++,a+=12){let t=e.getUint32(a);t&2147483648&&(f=!0);let n=t&2147483647;p.push([u,n]),u+=n,d+=e.getUint32(a+4)}return{start:n,end:l,referenceId:e.getUint32(r+4),timescale:e.getUint32(r+8),earliestPts:o,firstOffset:s,coverageEnd:u,durationSum:d,subsegments:p,hierarchical:f}}var bt,xt=t((()=>{g(),rt(),bt=`no trex: sample defaults taken from tfhd`}));function W(e,t,n,r=0){return St(V(e,t.start+t.headerSize+r,t.end,n.warnings),n,t.type)}function*St(e,t,n){for(let r of e){if(r.truncated){if(t.strict)throw new H(`incomplete file: moov is truncated`);t.warnings.push(`'${r.type}' overruns '${n}'`)}yield r}}function G(e){return e.start+e.headerSize}function Ct(e,t){let n=new Int32Array(9);for(let r=0;r<9;r++)n[r]=e.getInt32(t+r*4);return n}function wt(e){return e>0&&e<=2147483647?e:1}function Tt(e){return{start:G(e),end:e.end}}function Et(e,t,n){let r=G(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=nt(i,t.end-r-8,8,`stts`,n.warnings);a<i&&n.overruns.push(`stts`);let o=new Uint32Array(a),s=new Uint32Array(a),c=!1;for(let t=0;t<a;t++)o[t]=e.getUint32(r+8+t*8),s[t]=e.getUint32(r+12+t*8),s[t]>4294487295&&(c=!0);c&&Dt(o,s,n.warnings),n.sttsCounts=o,n.sttsDeltas=s}function Dt(e,t,n){let r=0n,i=0n;for(let a=0;a<e.length;a++){let o=BigInt(e[a]),s=t[a];if(s>4294487295){n.push(`stts delta ${s} clipped to 1`);let e=s|0;s=1,i+=BigInt(e<0?e:1)*o}else i+=BigInt(s)*o;if(r+=BigInt(s)*o,r>i){let e=(r-i)/(o>0n?o:1n),t=BigInt(s)>e?e:BigInt(s-1>>>0);r-=t*o,s=Number(BigInt(s)-t&4294967295n)}t[a]=s}}function Ot(e,t,n){let r=G(t);if(r+8>t.end)return;let i=e.getUint32(r+4),a=nt(i,t.end-r-8,8,`ctts`,n.warnings);if(a<i&&n.overruns.push(`ctts`),a===0)return;let o=[],s=[],c=0;for(let t=0;t<a;t++){let n=e.getInt32(r+8+t*8),a=e.getInt32(r+12+t*8);n<=0||(o.push(n),s.push(a),t+2<i&&a<0&&(c=Math.max(c,a===-2147483648?2147483647:-a)))}n.cttsCounts=Uint32Array.from(o),n.cttsOffsets=Int32Array.from(s),n.dtsShift=c}function kt(e,t,n,r,i){let a=G(t);if(a+8>t.end)return;let o=e.getUint8(a),s=o===1?20:12,c=e.getUint32(a+4),l=t.end-a-8,u=c*s===l?c:Math.floor(l/s);if(u!==c&&n.warnings.push(`elst declares ${c} entries but its box holds ${u}`),u===0)return;n.edits.length&&(n.warnings.push(`duplicated elst: the last one is used`),n.edits=[]);let d=r.base+t.start;for(let t=0;t<u;t++){let r=a+8+t*s;if(o===1){let t=tt(e,r+8,`elst`,d),a=e.getBigInt64(r)===-1n;a&&(n.warnings.push(`unknown elst duration: ${t===-1?`the empty edit is ignored`:`the edit lasts to the end`}`),i.ffprobeReject??={moof:-1,reason:`rejects this file: an elst duration of -1`}),n.edits.push({duration:a?t===-1?0:ft:et(e,r,`elst`,d),mediaTime:t,rate:e.getInt32(r+16)/65536})}else n.edits.push({duration:e.getUint32(r),mediaTime:e.getInt32(r+4),rate:e.getInt32(r+8)/65536})}}function At(e,t,n){let r=t+4,i=()=>{if(r+2>n)return null;let t=e.getUint8(r++),i=0;for(let t=0;t<4&&r<n;t++){let t=e.getUint8(r++);if(i=i*128+(t&127),!(t&128))break}return[t,i]},a=i();if(a&&a[0]===3){if(r+3>n)return null;let t=e.getUint8(r+2);r+=3,t&128&&(r+=2),t&64&&r<n&&(r+=1+e.getUint8(r)),t&32&&(r+=2),a=i()}return a&&a[0]===4&&r<n?e.getUint8(r):null}function jt(e,t,n,r){let i=G(t);if(i+8>t.end||(n.stsdCount=e.getUint32(i+4),n.stsdCount===0))return;let a;try{a=B(e,i+8,t.end)}catch(e){n.warnings.push(e.message);return}if(a&&(n.sampleEntry=a.type,!(n.handler===`soun`||a.start+86>a.end))){n.width=e.getUint16(a.start+32),n.height=e.getUint16(a.start+34);for(let t of V(e,a.start+86,a.end,r.warnings))if(t.type===`esds`)n.esdsObjectType=At(e,G(t),t.end);else if(t.type===`hvcC`)n.hasHvcc=!0;else if(t.type===`sinf`)for(let i of V(e,G(t),t.end,r.warnings))i.type===`frma`&&G(i)+4<=i.end&&(n.originalFormat=m(e,G(i)))}}function Mt(e,t,n,r){n.dv=e;for(let i of W(e,t,r)){let t=G(i);switch(i.type){case`stsd`:jt(e,i,n,r);break;case`stts`:Et(e,i,n);break;case`ctts`:Ot(e,i,n);break;case`stsz`:case`stz2`:t+12<=i.end&&(n.sampleCount=e.getUint32(t+8),n.sampleSize=i.type===`stsz`?e.getUint32(t+4):0),i.type===`stsz`?n.stsz=Tt(i):n.stz2=Tt(i);break;case`stss`:n.stss=Tt(i),t+8<=i.end&&e.getUint32(t+4)>Math.floor((i.end-t-8)/4)&&n.overruns.push(`stss`);break;case`stsc`:n.stsc=Tt(i);break;case`stco`:n.stco=Tt(i);break;case`co64`:n.co64=Tt(i)}}}function Nt(e,t,n,r){for(let i of W(e,t,r)){let t=G(i);if(i.type===`mdhd`&&t+24<=i.end){let r=e.getUint8(t)===1;if(r&&t+32>i.end)continue;n.hasMdhd=!0;let a=e.getUint32(t+(r?20:12));if(n.timescale=wt(a),n.timescale!==a&&n.warnings.push(`invalid mdhd timescale ${a}, using 1`),r){let r=e.getBigUint64(t+24);n.mdhdDuration=r===18446744073709551615n?0:Number(r)}else{let r=e.getUint32(t+16);n.mdhdDuration=r===It?0:r}}else if(i.type===`hdlr`&&t+12<=i.end)n.handler=m(e,t+8);else if(i.type===`minf`)for(let t of W(e,i,r))t.type===`stbl`&&Mt(e,t,n,r)}}function Pt(e,t,n,r){let i=dt();for(let a of W(e,t,r)){let t=G(a);if(a.type===`tkhd`&&t+84<=a.end){let n=e.getUint8(t)===1;if(n&&t+96>a.end)continue;i.enabled=(e.getUint8(t+3)&1)==1,i.id=e.getUint32(t+(n?20:12)),i.matrix=Ct(e,t+(n?52:40))}else if(a.type===`edts`)for(let t of W(e,a,r))t.type===`elst`&&kt(e,t,i,r,n);else if(a.type===`mdia`)Nt(e,a,i,r);else if(a.type===`tref`){for(let t of W(e,a,r))if(t.type===`chap`)for(let r=G(t);r+4<=t.end;r+=4)n.chapterTrackIds.add(e.getUint32(r))}}return i}function Ft(e,t,n,r,i=0){let a={strict:r,warnings:n.warnings,base:i};for(let r of W(e,t,a)){let t=G(r);switch(r.type){case`mvhd`:{if(t+24>r.end)break;let i=e.getUint8(t)===1;if(i&&t+84>r.end)break;n.hasMvhd=!0,n.timescale=wt(e.getUint32(t+(i?20:12))),n.duration=i?Number(e.getBigUint64(t+24)):e.getUint32(t+16),t+(i?84:72)<=r.end&&(n.matrix=Ct(e,t+(i?48:36)));break}case`trak`:n.tracks.push(Pt(e,r,n,a));break;case`mvex`:n.hasMvex=!0;for(let t of W(e,r,a)){let r=G(t);t.type===`trex`&&r+24<=t.end&&n.trex.set(e.getUint32(r+4),{duration:e.getUint32(r+12),size:e.getUint32(r+16)})}break;case`cmov`:throw new H(`unsupported: compressed movie header (cmov)`)}}}var It,Lt=t((()=>{g(),rt(),mt(),It=4294967295}));function Rt(){return{windows:[],hints:[],next:0,mfraTried:!1}}function zt(e,t,n){for(let[r,i]of e.windows)if(t>=r&&t+n<=r+i.byteLength)return new DataView(i.buffer,i.byteOffset+t-r,n);return null}async function Bt(e,t,n,r){for(;t.next<t.hints.length&&t.hints[t.next]<=n;)t.next++;let i=[];for(let n=t.next;n<t.hints.length&&i.length<8;n++)t.hints[n]<e.size&&i.push([t.hints[n],Math.min(r,e.size-t.hints[n])]);if(t.next+=i.length,!i.length)return;let a=await e.readMany(i,4);t.windows=i.map(([e],t)=>[e,new DataView(a[t].buffer,a[t].byteOffset,a[t].byteLength)]),t.windows.every(([,e])=>Vt(e))||(t.hints=[],t.next=0)}function Vt(e){return e.byteLength>=8&&e.getUint32(0)>=8&&qt.has(m(e,4))}function Ht(e,t,n,r,i=2**53-1){for(let a of V(e,t,n)){let t=a.start+a.headerSize;if(a.type!==`tfra`||t+16>a.end)continue;let n=e.getUint8(t)===1,o=e.getUint32(t+8),s=(n?16:8)+(o>>4&3)+(o>>2&3)+(o&3)+3,c=Math.min(e.getUint32(t+12),Math.floor((a.end-t-16)/s));for(let a=0;a<c;a++){let o=t+16+a*s,c=n?e.getBigUint64(o+8):BigInt(e.getUint32(o+4));c>0n&&c<BigInt(i)&&r.add(Number(c))}}}async function Ut(e){try{return await Wt(e)}catch(t){if(e.signal?.aborted||t?.name===`AbortError`)throw t;return[]}}async function Wt(e){let t=e.size,n=Math.min(t,Gt);if(n<16)return[];let r=await e.view(t-n,n,0);if(m(r,n-12)!==`mfro`)return[];let i=r.getUint32(n-4);if(i<24||i>Math.min(t,Kt))return[];let a=i<=n?new DataView(r.buffer,r.byteOffset+n-i,i):await e.view(t-i,i,0),o;try{o=B(a,0,i)}catch{return[]}if(!o||o.type!==`mfra`)return[];let s=new Set;return Ht(a,o.headerSize,o.end,s,t),[...s].sort((e,t)=>e-t)}var Gt,Kt,qt,Jt=t((()=>{g(),rt(),Gt=65536,Kt=16777216,qt=new Set([`moof`,`styp`,`sidx`,`ssix`,`emsg`,`prft`,`free`,`skip`,`uuid`])}));function Yt(e,t,n){if(!(n>0))return 0;let r=BigInt(Math.abs(e))*BigInt(t),i=BigInt(n),a=Number((r+i/2n)/i);return e<0?-a:a}function Xt(e){let t=0,n=0;for(let r=0;r<e.sttsCounts.length;r++)t+=e.sttsCounts[r],n+=e.sttsCounts[r]*e.sttsDeltas[r];let r=0;for(let t of e.fragments)r+=t.count;return{moovSamples:t,moovDuration:n,fragmentSamples:r}}function Zt(e,t,n){let r=0n,i=0n;if(n){for(let t=0;t<e.sttsCounts.length;t++)r+=BigInt(e.sttsCounts[t]),i+=BigInt(e.sttsCounts[t])*BigInt(e.sttsDeltas[t]);i<=0n&&(r=0n,i=0n)}for(let n of e.fragments)t(n.moofIndex,n.trexMissing)&&(r+=BigInt(n.count),i+=BigInt(n.durationSum));return[r,i]}function Qt(e,t,n){return t<=0n||n<=0n?null:I(BigInt(e)*t,n,L)}function $t(e,t){let n=e.timescale,r=(e,n)=>e<t.ffprobeMoofLimit&&!n,[i,a]=Zt(e,()=>!0,!0),[o,s]=Zt(e,r,!0),c=e.overruns.includes(`stts`)||e.fragments.some(e=>e.overrun&&r(e.moofIndex,e.trexMissing))?null:Qt(n,o,s);return{avg:Qt(n,i,a),ffprobe:c?P(c):null}}function en(e){let t=e.dv,n=e=>t&&e&&e.start+8<=e.end?t.getUint32(e.start+4):0,r=n(e.co64??e.stco),i=e.sttsCounts.length>0||e.overruns.includes(`stts`),a=e.sampleCount??0;return r>0&&(!i||n(e.stsc)===0||e.sampleSize===0&&a===0)||a>0&&r===0}function tn(e,t,n){let r=0,i=0,a=0,o=null,s=(e.cttsOffsets?.[0]??0)+n.moovDuration;for(let n of e.edits){let c=n.duration===ft?Math.max(0,s-n.mediaTime):Yt(n.duration,e.timescale,t);i+=c,n.mediaTime===-1?o||(r+=c):(a++,o||={mediaTime:n.mediaTime,duration:c,rate:n.rate})}return{emptyBefore:r,firstMedia:o,editSum:i,mediaEdits:a}}function nn(e,t,n,r){let i=e.mdhdDuration;n.moovDuration>0&&(i=Math.min(i,n.moovDuration));let a=e.edits.length>0&&n.moovSamples>0;a&&(i=Math.min(i,r.editSum));let o=n.moovDuration,s=null,c=an(e,t);for(let t of e.fragments)t.baseDts!==null&&(o=t.baseDts),s===null&&t.count>0&&(s=o-c+(t.cts?t.cts[0]:0)),o+=t.durationSum,o>i&&(i=o);let l=rn(e,t);l!==null&&l>i&&(i=l);let u=null;return u=a?r.emptyBefore:n.moovSamples>0?e.cttsOffsets&&e.cttsOffsets.length?e.cttsOffsets[0]:0:s,{durationTs:i,startPts:u}}function rn(e,t){if(t.ffprobeMoofLimit===1/0)return null;let n=0,r=null;for(let i of t.topLevel){if(i.type===`moof`&&++n>t.ffprobeMoofLimit)break;let a=i.sidx;a&&!a.hierarchical&&a.referenceId===e.id&&a.timescale===e.timescale&&(r=a.earliestPts+a.durationSum)}return r}function an(e,t){let n=0,r=0,i=0;return e.edits.forEach((e,t)=>{t===0&&e.mediaTime===-1?(n=e.duration,i=1):t===i&&e.mediaTime>=0&&(r=e.mediaTime)}),!n&&!r?0:r-Yt(n,e.timescale,t.timescale)}function on(e,t,n){let r=new Float64Array(e.length+1),i=new Float64Array(e.length),a=0,o=0;for(let s=0;s<e.length&&o<n;s++)e[s]<=0||(r[a]=o,i[a]=t[s],o+=Math.min(e[s],n-o),a++);return r[a]=o,{count:a,starts:r,values:i,total:o}}function sn(e){let t=e.starts,n=0;return r=>{if(r>=t[n]&&r<t[n+1])return n;let i=0,a=e.count-1;for(;i<a;){let e=Math.ceil((i+a)/2);t[e]<=r?i=e:a=e-1}return n=i,i}}function cn(e,t){let n=e.stss;if(!n||!e.dv)return{all:!0,list:new Float64Array};let r=e.dv,i=n.start+8<=n.end?Math.min(r.getUint32(n.start+4),Math.floor((n.end-n.start-8)/4)):0;if(i===0)return{all:!1,list:Float64Array.of(0)};let a=+(r.getUint32(n.start+8)>0),o=new Float64Array(i),s=0,c=-1;for(let e=0;e<i;e++){let i=r.getUint32(n.start+8+e*4)-a;if(i<=c||i>=t)break;o[s++]=i,c=i}return{all:!1,list:o.subarray(0,s)}}function ln(e,t,n){if(n>=t)return-1;if(e.all)return n;let r=e.list,i=0,a=r.length;for(;i<a;){let e=Math.floor((i+a)/2);r[e]<n?i=e+1:a=e}return i<r.length?r[i]:-1}function un(e,t){if(t<0)return-1;if(e.all)return t;let n=e.list,r=0,i=n.length;for(;r<i;){let e=Math.floor((r+i)/2);n[e]<=t?r=e+1:i=e}return r>0?n[r-1]:-1}function dn(e,t,n){let r=n;r<=0||e.len===0&&(e.first=t,e.last=t,e.len=1,r--,r===0)||((e.len>=2&&e.last!==e.first||r>=2&&t!==e.first)&&(e.bad=!0),e.last=t,e.len+=r)}function fn(e,t,n,r,i){let a=r,o=Math.min(i,t.total-r),s=0;for(;o>0&&!e.bad;){let r=n(a),i=Math.min(t.starts[r+1]-a,o);dn(e,t.values[r],i),a+=i,o-=i,s++}return s}function pn(e,t){return e.bad||e.len===0||!(e.first>0)?null:I(t,e.first,L)}function mn(e,t,n,r,i){let a=Math.min(n,e.sampleCount??0);if(a<=0||e.sttsCounts.length===0||e.overruns.length>0)return null;let o=e.timescale,s=on(e.sttsCounts,e.sttsDeltas,a),c=sn(s),l={len:0,first:0,last:0,bad:!1};if(e.edits.length===0)return fn(l,s,c,0,a),pn(l,o);if(!e.edits.some(e=>e.mediaTime!==-1))return null;let u=!0;for(let e=1;e<s.count&&u;e++)u=s.values[e]===s.values[0];if(u)return s.values[0]>0?I(o,s.values[0],L):null;let d=Math.min(r,bn),f=0,p=!1,m=e=>(f+=e,f>d&&(p=!0),p),h=new Float64Array(s.count+1);for(let e=0;e<s.count;e++)h[e+1]=h[e]+(s.starts[e+1]-s.starts[e])*s.values[e];let g=e=>{let t=c(e);return h[t]+(e-s.starts[t])*s.values[t]},_=e=>s.values[c(e)],v=!!e.cttsCounts&&e.cttsCounts.length>0,y=v?on(e.cttsCounts,e.cttsOffsets,a):null,b=y?sn(y):null,x=e=>y&&e<y.total?y.values[b(e)]:0,S=cn(e,a),C=e=>ln(S,a,e),w=e=>un(S,e),T=e.dtsShift,E=(e,t)=>{let n=0,r=t;for(;n<r;){let t=Math.floor((n+r)/2);g(t)>=e?r=t:n=t+1}return n},D=(e,t)=>{let n=T>0?e-T:e,r=-1,i=a;for(g(a-1)-T<n&&(r=a-1);i-r>1;){let e=Math.floor((r+i)/2),t=g(e)-T;t>=n&&(i=e),t<=n&&(r=e)}let o=t?r:w(r);if(o>0){let e=E(g(o),o);if(e<o){if(t)o=e;else{let t=C(e);t>=0&&t<o&&(o=t)}}}if(v&&o>=0){let e=w(o);for(;e>=0&&!m(1)&&g(e)-T+x(e)>n;)e=w(e-1);o=e}return o},O=0,k=!1;for(let n of e.edits){let r=n.mediaTime;if(!k&&r===-1)continue;if(k=!0,m(64))break;let i=Yt(n.duration,e.timescale,t.timescale),o=D(r,!1);if(o<0&&!p&&(o=D(r,!0)),p)break;o<0&&(o=0,O=0),v&&(O=o);let u=-1;if(v){let e=!1;for(let t=C(o);t>=0&&!m(1);t=C(t+1)){let n=t+1<a?_(t):i;if(g(t)+x(t)+n>=i+r){if(e){u=t;break}e=!0}}if(p)break}else{let e=o,t=a;for(;e<t;){let n=Math.floor((e+t)/2);(n+1<a?g(n+1):g(a-1)+i)>=i+r?t=n:e=n+1}e<a&&(u=C(e))}let d=u<0?a-o:u-o+1,f=Math.min(d,a-O);if(f>0&&(m(fn(l,s,c,O,f)),O+=f),l.bad)return null;if(p)break}return p?(i?.push(`r_frame_rate not reproduced: edit list walk limit reached`),null):pn(l,o)}function hn(e,t,n){let r=[],i=[],a=n;for(let n=0;n<e.length&&a>0;n++){let o=Math.min(e[n],a);o<=0||(r.push(o),i.push(t[n]),a-=o)}return{counts:r,values:i}}function gn(e,t){let n=[];if(t>0){let r=hn(e.sttsCounts,e.sttsDeltas,t),i=e.cttsCounts&&e.cttsOffsets?hn(e.cttsCounts,e.cttsOffsets,t):null;n.push({durations:{counts:r.counts,deltas:r.values},cts:i?{counts:i.counts,offsets:i.values}:null})}for(let t of e.fragments){let e=t.complete;n.push({baseDts:t.baseDts,durations:t.durations?t.durations.subarray(0,e):{counts:[e],deltas:[t.defaultDuration]},cts:t.cts?t.cts.subarray(0,e):null})}return n}function _n(e,t,n){let r=t.firstMedia;if(!r)return e.edits.length&&n.push(`edit list has no media edit`),null;t.mediaEdits>1&&n.push(`edit list has ${t.mediaEdits} media edits, only the first is applied`),r.rate!==1&&n.push(`edit rate ${r.rate} is not applied`);let i=e.fragments.length>0||r.duration<=0?r.mediaTime:r.mediaTime+r.duration;return{start:r.mediaTime,end:i}}function vn(e,t,n){let r=e.dv,i=e.co64??e.stco,a=e.stsz??e.stz2;if(!r||!i||!a||!e.stsc||i.start+8>i.end||e.stsc.start+8>e.stsc.end||a.start+12>a.end)return null;let o=!!e.co64,s=Math.min(r.getUint32(i.start+4),Math.floor((i.end-i.start-8)/(o?8:4))),c=Math.min(r.getUint32(e.stsc.start+4),Math.floor((e.stsc.end-e.stsc.start-8)/12)),l=e.stsz?r.getUint32(a.start+4):0,u=e.stz2?r.getUint8(a.start+7):32,d=Math.min(r.getUint32(a.start+8),n),f=a.end-a.start-12,p=e=>{if(l)return l;let t=a.start+12;if(u===32)return(e+1)*4<=f?r.getUint32(t+e*4):0;if(u===16)return(e+1)*2<=f?r.getUint16(t+e*2):0;if(u===8)return e<f?r.getUint8(t+e):0;let n=e>>1<f?r.getUint8(t+(e>>1)):0;return e&1?n&15:n>>4},m=0,h=0,g=0,_=0;for(let n=0;n<s&&g<d;n++){for(;_+1<c&&r.getUint32(e.stsc.start+8+(_+1)*12)<=n+1;)_++;let a=c?r.getUint32(e.stsc.start+12+_*12):0,s=o?Number(r.getBigUint64(i.start+8+n*8)):r.getUint32(i.start+8+n*4);for(let e=0;e<a&&g<d;e++,g++){let e=p(g);s<t&&m++,s+e<=t&&h===g&&h++,s+=e}}return{present:m,complete:h}}function yn(e,t){let n=[16n,16n,30n],r=new Int32Array(9);for(let i=0;i<3;i++)for(let a=0;a<3;a++){let o=0n;for(let r=0;r<3;r++)o+=BigInt(e[i*3+r])*BigInt(t[r*3+a])>>n[r];r[i*3+a]=Number(BigInt.asIntN(32,o))}if(r[0]===65536&&r[4]===65536&&r[8]===1<<30&&!r[1]&&!r[2]&&!r[3]&&!r[5]&&!r[6]&&!r[7])return 0;let i=r[0]/65536,a=r[1]/65536,o=Math.hypot(i,r[3]/65536),s=Math.hypot(a,r[4]/65536);return o===0||s===0?0:Math.trunc(-(Math.atan2(a/s,i/o)*180/Math.PI))||0}var bn,xn=t((()=>{oe(),mt(),bn=2e6})),Sn=n({IsoBmffError:()=>H,MOOF_HARD_CAP:()=>Rn,MOOV_HARD_CAP:()=>Ln,MOOV_SUSPECT_CAP:()=>In,analyzeIsoBmff:()=>Fn,analyzeIsoBmffDetailed:()=>Pn});function Cn(e,t){return t.signal?.aborted===!0||e?.name===`AbortError`}function wn(e){return e.brand===`qt `||!e.hasFtyp&&e.topLevel.length>0?`mov`:`mp4`}async function Tn(e,t,n){let r=e.size,i=t.start+t.size>r;if(!i&&t.size>268435456)throw new H(`unsupported: moov larger than 256 MiB`);let a=i?Math.min(r-t.start,In):t.size,o=await e.view(t.start,a,0),s=B(o,0,o.byteLength);if(!s)throw new H(`incomplete file: moov is truncated`);Ft(o,s,n,i,t.start),i&&n.warnings.push(`moov size exceeds the file; parsed what is there`)}async function En(e,t,n){let r=e.size,i=0,a=t.readAhead.head,o=!1,s=0,c=!1,l=Rt(),u=async(t,n,r)=>zt(l,t,n)??e.view(t,n,r);for(;i+8<=r;){if(e.checkAbort(),++s>zn){n.warnings.push(`too many top-level boxes`);break}let d=c&&!o&&r-i<=16777216?r-i:a,f=await u(i,Math.min(Vn,r-i),d),p;try{p=B(f,0,r-i,i)}catch(e){if(!o)throw e;n.warnings.push(`ignored trailing data at ${i}: ${e.message}`);break}if(!p)break;let m={...p,start:i,end:Math.min(i+p.size,r)},h=i+p.size,g=p.truncated&&o&&m.type!==`mdat`&&m.type!==`moof`;p.truncated&&(n.truncated=!0,n.warnings.push(g?`ignored trailing data at ${i}: not a box`:`'${m.type}' at ${i} is truncated`));let _={type:m.type,start:i,end:m.end,sidx:null};if(n.topLevel.push(_),g)break;if(m.type===`ftyp`){let t=await e.view(i,Math.min(m.size,1024)),r=m.headerSize;if(r+4<=t.byteLength){n.hasFtyp=!0,n.brand=String.fromCharCode(t.getUint8(r),t.getUint8(r+1),t.getUint8(r+2),t.getUint8(r+3));for(let e=r+8;e+4<=t.byteLength;e+=4)n.compatibleBrands.push(String.fromCharCode(t.getUint8(e),t.getUint8(e+1),t.getUint8(e+2),t.getUint8(e+3)))}}else if(m.type===`moov`)o?n.warnings.push(`ignored a second moov at ${i}`):(await Tn(e,m,n),o=!0);else if(m.type===`moof`){if(!o)throw new H(`corrupt file: movie fragment (moof) before moov`);if(m.size>67108864)throw new H(`corrupt file: moof larger than 64 MiB at ${i}`);let s=Math.min(m.size+Vn,r-i),c=await u(i,s,0),d=B(c,0,Math.min(m.size,c.byteLength));d&&vt(c,d,i,n.moofCount,n,t.maxExpandedSamples),n.moofCount++;let f=0;try{let e=B(c,m.size,c.byteLength);e&&e.type===`mdat`&&(f=e.size)}catch{f=0}a=f<=Bn?t.readAhead.fragment:Math.min(65536,Math.max(1024,2*m.size+64)),f>Bn&&(!l.hints.length&&!l.mfraTried&&(r-i)/(m.size+f)>16&&(l.mfraTried=!0,l.hints=await Ut(e)),l.next<l.hints.length&&!zt(l,i+m.size+f,Vn)&&await Bt(e,l,i,a)),t.onProgress&&n.moofCount%64==0&&t.onProgress({phase:`fragments`,done:i,total:r})}else if(m.type===`sidx`&&!p.truncated){let e=await u(i,m.size,0),t=B(e,0,e.byteLength);t&&(_.sidx=yt(e,t,i)),_.sidx&&_.sidx.subsegments.length>1&&!l.hints.length&&(l.hints=_.sidx.subsegments.map(([e])=>e))}else if(m.type===`mfra`)break;c=m.type===`mdat`,i=h}if(!o)throw new H(`incomplete file: no moov`)}async function Dn(e,t){let n=e.size,r=new Set(t.tracks.map(e=>e.id)),i=!1,a=!1,o=!1,s=null,c=0;for(let l of t.topLevel){if(l.type===`moof`)c++;else if(l.type===`moov`)i=!0;else if(l.type===`mdat`&&l.end-l.start>8)a=!0;else if(l.type===`sidx`&&i&&l.sidx&&!l.sidx.hierarchical&&r.has(l.sidx.referenceId)){let t=l.sidx.coverageEnd===n;!t&&n>=4&&(s===null&&(s=(await e.view(n-4,4,0)).getUint32(0)),t=l.sidx.coverageEnd===n-s),t&&l.sidx.firstOffset===0&&(o=!0)}if(i&&a&&(o||l.end===n)){t.ffprobeMoofLimit=c;return}}}function On(e,t){return t.chapterTrackIds.has(e.id)?!1:e.handler===`vide`||e.handler!==`soun`&&at(e.originalFormat??e.sampleEntry)}function kn(e,t,n,r){let i=v(r.reportedId),a=i.warnings;r.reportedId!==e.id&&a.push(`duplicate track_ID ${e.id}: reported as ${r.reportedId}`),a.push(...e.warnings);let o=e.handler===`auxv`;o&&a.push(`auxiliary video track (handler 'auxv')`);let s=en(e);s&&a.push(`missing mandatory sample tables: ffprobe ignores the samples and timing of this track`);let c=e.hasMdhd?e.timescale:t.timescale;e.hasMdhd||(a.push(`no mdhd: using the movie timescale`),e.timescale=c),i.fourccOrCodecId=e.sampleEntry,i.codecName=ot(e.originalFormat??e.sampleEntry,e.esdsObjectType,e.hasHvcc),e.originalFormat&&a.push(`encrypted: ${e.sampleEntry} of ${e.originalFormat}`),e.stsdCount>1&&a.push(`${e.stsdCount} sample descriptions, first used`),i.width=e.width,i.height=e.height,i.rotation=yn(e.matrix,t.matrix),i.timescale=c;let l=Xt(e),u=t.truncated,d=0;for(let t of e.fragments)d+=t.present;let f=l.moovSamples+l.fragmentSamples,p=l.moovSamples+d;i.frames=p,i.isStill=p<=1,l.moovSamples>0&&e.fragments.length>0&&a.push(`hybrid fragmented file: moov holds ${l.moovSamples} of ${f} samples`),p<f&&a.push(`truncated: ${f-p} of ${f} samples missing`);let m=$t(e,t);i.avgFps=m.avg,i.avgFpsFfprobe=r.ffprobeFails?null:m.ffprobe,i.avgFpsFfprobe!==null&&i.avgFpsFfprobe!==P(m.avg)&&a.push(`ffprobe reads part of the fragments: avg_frame_rate ${i.avgFpsFfprobe}`),m.ffprobe===null&&!r.ffprobeFails&&f>0&&a.push(`avg_frame_rate of ffprobe is not reproduced: its header values are incomplete or overrun a box`);let h=r.ffprobeFails||s?null:mn(e,t,l.moovSamples,n.maxExpandedSamples,a);i.rFpsFfprobe=h?P(h):null;let g=tn(e,t.timescale,l);if(!s){let n=nn(e,t,l,g);i.durationSec=n.durationTs/c,i.startSec=n.startPts===null?null:n.startPts/c}let _=l.moovSamples;if(e.sampleCount!==null&&e.sampleCount<_&&(a.push(`stts describes ${_} samples but the sample size table holds ${e.sampleCount}`),_=e.sampleCount),s)return i.presentedFrames=0,An(i),{result:i,enabled:e.enabled,auxiliary:o};if(u&&_>0){let n=vn(e,t.fileSize,l.moovSamples);n&&n.complete<_&&(a.push(`truncated: ${n.complete} of ${_} samples complete`),_=n.complete)}let y=_n(e,g,a);y&&!e.cttsCounts&&!e.fragments.length&&y.start<=0&&(y.end<=y.start||y.end>=l.moovDuration)&&(y=null);let b=xe({segments:gn(e,_),timescale:c,editWindow:y,maxExpandedSamples:n.maxExpandedSamples});return a.push(...b.warnings),i.presentedFrames=b.presentedFrames,i.minFps=b.minFps,i.maxFps=b.maxFps,i.isVfr=b.isVfr,i.vfrRatio=b.vfrRatio,i.distinctDeltas=b.distinctDeltas,i.duplicateTimestamps=b.duplicateTimestamps,i.nominalFps=b.nominalFps,i.dominantFps=b.dominantFps,i.timestampsQuantized=b.timestampsQuantized,b.presentedAvgFps&&(i.avgFps=b.presentedAvgFps),i.duplicateTimestamps>0&&a.push(`${i.duplicateTimestamps} duplicate timestamps`),An(i),b.presentedAvgFps&&(i.provenance.avgFps=`exact`),{result:i,enabled:e.enabled,auxiliary:o,profile:b.profile}}function An(e){let t=e.provenance;for(let e of[`codec`,`dimensions`,`rotation`,`frames`,`avgFps`])t[e]=`header`;e.durationSec!==null&&(t.durationSec=`header`),e.startSec!==null&&(t.startSec=`header`),e.presentedFrames!==null&&(t.presentedFrames=`exact`),e.isVfr!==null&&(t.minFps=`exact`,t.maxFps=`exact`,t.isVfr=`exact`,t.duplicateTimestamps=`exact`),e.nominalFps&&(t.nominalFps=`exact`),e.dominantFps&&(t.dominantFps=`exact`)}function jn(e){let t=null,n=e=>(e.result.frames??0)>1?e.auxiliary?.5:e.enabled?2:1:0;for(let r of e)(!t||n(r)>n(t)||n(r)===n(t)&&(r.result.frames??0)>(t.result.frames??0))&&(t=r);return t?t.result.trackId:null}function Mn(e,t){let n=2**53-1,r=n,i=n,a=-n,o=-n,s=-n,c=-n;for(let n of e.tracks){if(!n.hasMdhd)continue;let l=t.has(n)||n.handler===`soun`;if(en(n)){let e=Yt(n.mdhdDuration,1e6,Hn);l?s=Math.max(s,e):c=Math.max(c,e);continue}let u=Xt(n),d=nn(n,e,u,tn(n,e.timescale,u)),f=Yt(d.durationTs,1e6,n.timescale);if(d.startPts!==null){let e=Yt(d.startPts,1e6,n.timescale);l?(r=Math.min(r,e),a=Math.max(a,e+f)):(i=Math.min(i,e),o=Math.max(o,e+f))}l?s=Math.max(s,f):c=Math.max(c,f)}return(r===n||r>i&&r-i<1e6)&&(r=i),(a===-n||a<o&&o-a<1e6)&&(a=o),(s===-n||s<c&&c-s<1e6)&&(s=c),r!==n&&a!==-n&&a>=r&&(s=Math.max(s,a-r)),s>0?s/1e6:null}function Nn(e){let t=new Map,n=new Set,r=e.reduce((e,t)=>Math.max(e,t.id),0)+1;for(let i of e)n.has(i.id)?t.set(i,r++):(n.add(i.id),t.set(i,i.id));return t}async function Pn(e,t){let n=ut(e.size),r=t=>{if(Cn(t,e))throw t;let r=t instanceof Error?t.message:String(t),i=_(wn(n),t instanceof H||r.startsWith(`file read failed`)?r:`corrupt file: ${r}`);return i.brand=n.brand,i.warnings=n.warnings,{analysis:i,movie:n}};try{await En(e,t,n),await Dn(e,n);let r=_(wn(n));r.brand=n.brand,r.scan=`exact`,r.warnings=n.warnings;let i=n.ffprobeReject,a=i!==null&&i.moof<n.ffprobeMoofLimit;a&&n.warnings.push(`ffprobe 8.1.1 ${i.reason}`);let o=Nn(n.tracks);[...o].some(([e,t])=>e.id!==t)&&n.warnings.push(`duplicate track_ID values`);let s=n.tracks.filter(e=>On(e,n)),c=s.map(e=>kn(e,n,t,{reportedId:o.get(e)??e.id,ffprobeFails:a}));for(let e of c)e.result.rateProfile=await Pe(e.profile??null);return r.videoTracks=c.map(e=>e.result),r.audioTrackCount=n.tracks.filter(e=>e.handler===`soun`).length,r.primaryTrackId=jn(c),r.formatDurationSec=Mn(n,new Set(s)),{analysis:r,movie:n}}catch(e){return r(e)}}async function Fn(e,t){return(await Pn(e,t)).analysis}var In,Ln,Rn,zn,Bn,Vn,Hn,Un=t((()=>{y(),$e(),oe(),rt(),lt(),mt(),xt(),Lt(),Jt(),xn(),In=16777216,Ln=268435456,Rn=67108864,zn=4e6,Bn=65536,Vn=16,Hn=9e4}));function K(e){return e===0?0:Math.clz32(e)-23}function Wn(e,t){if(t>=e.length)return null;let n=K(e[t]);if(n<1||n>4||t+n>e.length)return null;let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return{id:r,length:n}}function Gn(e,t){if(t>=e.length)return null;let n=e[t],r=K(n);if(r<1||t+r>e.length)return null;let i=255>>r,a=(n&i)===i,o=n&i;for(let n=1;n<r;n++){let r=e[t+n];r!==255&&(a=!1),o=o*256+r}return a?{size:-1,length:r}:o>2**53-1?null:{size:o,length:r}}function q(e,t,n){let r=Wn(e,t);if(!r)return null;let i=Gn(e,t+r.length);return i?{id:r.id,pos:n+t,size:i.size,dataStart:n+t+r.length+i.length}:null}function Kn(e,t){if(t>=e.length)return!0;let n=K(e[t]);if(n<1||n>4)return!1;let r=t+n;return r>=e.length||e[r]!==0&&r+K(e[r])>e.length}function qn(e,t,n){let r=t<n?K(e[t]):0;if(r<1||t+r>n)return null;let i=e[t]&255>>r;for(let n=1;n<r;n++)i=i*256+e[t+n];return{value:i,length:r}}function Jn(e,t,n){let r=0;for(let i=0;i<n;i++)r=r*256+e[t+i];return r}function Yn(e,t,n){let r=0n;for(let i=0;i<n;i++)r=r<<8n|BigInt(e[t+i]);return r}function Xn(e,t,n){if(n===0)return 0;let r=new DataView(e.buffer,e.byteOffset+t,n);return n===4?r.getFloat32(0):n===8?r.getFloat64(0):NaN}function Zn(e,t,n){let r=t;for(;r<t+n&&e[r]!==0;)r++;return kr.decode(e.subarray(t,r)).replace(/[^\x20-\x7e\xa0-\uffff]/g,`?`)}function*Qn(e,t,n){let r=t,i=Math.min(n,e.length);for(;r<i;){let t=q(e,r,0);if(!t||t.size===-1||t.dataStart+t.size>i)return;yield{id:t.id,start:t.dataStart,size:t.size},r=t.dataStart+t.size}}function $n(e,t){return t.size>6?Number(Yn(e,t.start,t.size)):Jn(e,t.start,t.size)}var er,J,tr,nr,rr,Y,ir,ar,X,or,sr,cr,lr,ur,dr,fr,pr,mr,Z,hr,gr,_r,vr,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,Or,kr,Ar=t((()=>{er=408125543,J=290298740,tr=19899,nr=21419,rr=21420,Y=357149030,ir=2807729,ar=17545,X=374648427,or=29637,sr=2352003,cr=2306383,lr=22186,ur=25506,dr=28032,fr=2327523,pr=524531317,mr=475249515,Z=307544935,hr=29555,gr=25536,_r=25541,vr=26568,yr=17827,br=17543,xr=423732329,Sr=24999,Cr=18016,wr=272869232,Tr=17849,Er=30113,Dr=30114,Or=new Set([J,Y,X,mr,Z,pr,wr,xr]),kr=new TextDecoder}));function jr(e,t,n){if(e[t]!==31||e[t+1]!==67||e[t+2]!==182||e[t+3]!==117)return!1;let r=Gn(e,t+4);if(!r)return!1;let i=t+4+r.length,a=r.size===-1?e.length:Math.min(e.length,i+r.size);if(r.size!==-1&&i+r.size>n)return!1;for(let t=0;t<4&&i<a;t++){let t=Wn(e,i);if(!t)return!1;let n=Gn(e,i+t.length);if(!n||n.size===-1)return!1;if(t.id===231)return n.size<=8;if(t.id!==191&&t.id!==236&&t.id!==167&&t.id!==171)return!1;i+=t.length+n.length+n.size}return!1}function Mr(e,t,n,r){let i=Wn(e,t);if(i?.length!==4)return!1;if(i.id===524531317)return jr(e,t,n);let a=Rr.get(i.id),o=Gn(e,t+4);if(!a||!o||o.size<2)return!1;let s=t+4+o.length+o.size,c=s<=r?q(e,t+4+o.length,0):null;return!!c&&c.size!==-1&&c.dataStart+c.size<=s&&(a.includes(c.id)||c.id===236||c.id===191)}async function Nr(e,t,n,r,i={}){let a=i.clustersOnly?Br:zr,o=i.step??Math.max(e.window,65536),s=Math.max(0,t),c=Math.min(n,e.size);for(;s<c;){let t=e.chunkAt(s);if(!t||t.base+t.buf.length<e.size&&t.base+t.buf.length-s<128){if(i.canLoad&&!i.canLoad())return-1;let n=Math.min(o,c-s+64);await e.load(s,Math.min(n,e.size-s),n),t={base:e.base,buf:e.buf}}let n=t.buf,l=t.base,u=Math.min(l+n.length>=e.size?n.length:n.length-64,c-l);if(u<=s-l)break;for(let e=s-l;e<u;e++)if(a[n[e]]&&r(n,e,l))return l+e;s=l+u}return-1}function Pr(e,t,n,r,i={}){return Nr(e,t,n,(e,t,n)=>jr(e,t,r-n),{...i,clustersOnly:!0})}function Fr(e,t,n,r,i={}){let a=e.size;return Nr(e,t,n,(e,t,n)=>Mr(e,t,r-n,a-n),i)}var Ir,Lr,Rr,zr,Br,Vr=t((()=>{Ar(),Ir=4,Lr=class{reader;size;window;buf=new Uint8Array;base=0;#e=[];constructor(e,t){this.reader=e,this.size=e.size,this.window=t;let n=e.peek(0,Math.min(e.size,e.headWindow));n&&n.byteLength>0&&this.#t({base:0,buf:new Uint8Array(n.buffer,n.byteOffset,n.byteLength)})}has(e,t){return e>=this.base&&Math.min(this.size,e+t)<=this.base+this.buf.length}cached(e,t){let n=Math.min(this.size,e+t);return this.#e.some(t=>e>=t.base&&n<=t.base+t.buf.length)||this.reader.peek(e,n-e)!==null}async load(e,t,n=this.window){if(this.has(e,t))return;let r=Math.min(this.size,e+t);for(let t of this.#e)if(e>=t.base&&r<=t.base+t.buf.length){this.#t(t);return}let i=Math.max(t,n),a=await this.reader.view(e,i,i);this.#t({base:e,buf:new Uint8Array(a.buffer,a.byteOffset,a.byteLength)})}chunkAt(e){return this.#e.find(t=>e>=t.base&&e<t.base+t.buf.length)??null}async header(e){return this.has(e,12)||await this.load(e,12),q(this.buf,e-this.base,this.base)}#t(e){this.buf=e.buf,this.base=e.base;let t=this.#e.indexOf(e);t>=0&&this.#e.splice(t,1),this.#e.unshift(e),this.#e.length>Ir&&(this.#e.length=Ir)}},Rr=new Map([[J,[tr]],[Y,[ir,ar,19840,22337,29604,17505,31657,29572,3979555,3965867,4110627,4096955,17476,26916]],[X,[174]],[mr,[187]],[Z,[hr]],[wr,[Tr]],[xr,[Sr]]]),zr=new Uint8Array(256);for(let e of Or)zr[e>>>24]=1;Br=new Uint8Array(256),Br[pr>>>24]=1}));function Hr(e,t=0){return e.reader.reads<5&&e.reader.bytesFetched+Math.max(t,e.window)<=1048576}function Ur(e){let t=/^\s*(\d+):(\d{1,2}):(\d{1,2}(?:\.\d+)?)\s*$/.exec(e);return t?Number(t[1])*3600+Number(t[2])*60+Number(t[3]):null}function Wr(){return{number:0,uid:0n,type:0,codecId:``,defaultDuration:0,frameRate:0,trackTimestampScale:1,codecDelay:0,codecPrivate:null,encoded:!1,width:0,height:0}}function Gr(e,t){t.trackTimestampScale>=.01||(t.trackTimestampScale=1),!t.defaultDuration&&t.frameRate>0&&(t.defaultDuration=Math.trunc(1e9/t.frameRate)),Number.isSafeInteger(t.defaultDuration)||(t.defaultDuration=0),e.tracks.push(t)}function Kr(e,t,n,r,i,a=null,o=null){let s=o??Wr(),c=-1,l=-1,u=[],d=[],f=``,p=``,m=!1,h=(n,r,i,o)=>{let g=ai.get(n)??[];if(o>16)m=!0;else for(let m of Qn(t,r,i)){if(!g.includes(m.id))continue;let r=m.start,i=m.size,_=()=>$n(t,m),v=()=>h(m.id,r,r+i,o+1);switch(m.id){case 174:s=Wr(),v(),Gr(e,s);break;case hr:u=[],d=[],v();for(let t of d)for(let n of u.length?u:[0n])e.tagDurations.has(n)||e.tagDurations.set(n,t);break;case vr:{let e=[f,p];f=p=``,v();let t=n===29555&&(f===`DURATION`||f.startsWith(`DURATION-`))?Ur(p):null;t!==null&&d.push(t),[f,p]=e;break}case tr:c=l=-1,v(),c>=0&&l>=0&&!e.seek.has(c)&&e.seek.set(c,e.segmentData+l);break;case 215:s.number=_();break;case or:s.uid=Yn(t,r,i);break;case 131:s.type=_();break;case 134:s.codecId=Zn(t,r,i);break;case sr:s.defaultDuration=_();break;case cr:s.trackTimestampScale=Xn(t,r,i);break;case lr:s.codecDelay=_();break;case dr:s.encoded=!0;break;case ur:s.codecPrivate=t.slice(r,r+Math.min(i,ti));break;case 176:s.width=_();break;case 186:s.height=_();break;case fr:s.frameRate=Xn(t,r,i);break;case ir:_()>0&&(e.timestampScale=_());break;case ar:{let n=Xn(t,r,i);i!==0&&i!==4&&i!==8?e.warnings.push(`Duration has an invalid size of ${i} bytes`):Number.isFinite(n)?e.duration=n:e.warnings.push(`invalid Duration value ${n}`);break}case nr:c=i<=4?_():-1;break;case rr:l=_();break;case _r:u.push(Yn(t,r,i));break;case yr:f=Zn(t,r,i).toUpperCase();break;case br:p=Zn(t,r,i);break;case Cr:Zn(t,r,i).startsWith(`image/`)&&e.attachedImages++;break;case 241:a?.push(e.segmentData+_());break;default:v()}}};h(i,n,r,2),m&&e.warnings.push(`elements nested deeper than 16 levels ignored`)}async function qr(e,t){return e.cached(t,12)||Hr(e)?e.header(t):null}async function Jr(e,t,n){let r=Math.min(n.dataStart+n.size,e.size),i=n.dataStart;for(;i<r;){let n=await qr(e,i);if(!n||n.size===-1)break;let a=Math.min(n.dataStart+n.size,r);if(n.id===174){let r=Wr();for(let i=n.dataStart;i<a;){let n=await qr(e,i);if(!n||n.size===-1)break;let o=n.dataStart+n.size-n.pos;n.size<=ei&&n.pos+o<=a&&(e.cached(n.pos,o)||Hr(e,o))&&(await e.load(n.pos,o),Kr(t,e.buf,n.pos-e.base,n.pos-e.base+o,174,null,r)),i=n.pos+o}Gr(t,r)}i=n.dataStart+n.size}i<r&&t.warnings.push(`Tracks at ${n.pos} only partly read (header budget)`)}async function Yr(e,t,n,r){if(r.at.add(n.pos),n.id===475249515&&(t.cuesPos??=n.pos),!ii.has(n.id))return;let i=Math.max(0,Math.min(n.size,e.size-n.dataStart)),a=Math.min(i,$r),o=e.cached(n.dataStart,a);if(n.id===374648427&&a<i&&!o){r.ids.add(n.id),await Jr(e,t,n);return}if(!o&&(!Hr(e,a)||n.id===423732329)){n.id===374648427?(r.ids.add(n.id),await Jr(e,t,n)):n.id!==423732329&&t.warnings.push(`${ri.get(n.id)??oi(n.id)} element at byte ${n.pos} not read (header budget)`);return}r.ids.add(n.id),await e.load(n.dataStart,a);let s=n.dataStart-e.base;Kr(t,e.buf,s,s+a,n.id)}function Xr(e,t,n){e.segmentUnknownSize||e.segmentExtended||(e.segmentExtended=!0,e.segmentEnd=t.size,e.declaredEnd=Math.max(e.declaredEnd,t.size),e.warnings.push(`${n}: the Segment size is wrong, reading to the end of the file like ffprobe`))}async function Zr(e,t,n){let r=n;for(let n=0;n<ni&&r<e.size;n++){if(!e.cached(r,12)&&!Hr(e))return t.warnings.push(`Segment search stopped at ${r} (header budget)`),null;let n=await e.header(r),i=e.buf,a=r-e.base;if(i[a]===24&&i[a+1]===83&&i[a+2]===128&&i[a+3]===103)return n||(t.warnings.push(`corrupt Segment size at ${r}`),t.segmentExtended=!0,{id:er,pos:r,size:-1,dataStart:r+4+(K(i[a+4])||8)});if(!n||n.size===-1)return null;r=n.dataStart+n.size}return null}async function Qr(e){let t={docType:`matroska`,segmentData:0,segmentEnd:0,declaredEnd:0,segmentUnknownSize:!1,segmentExtended:!1,timestampScale:1e6,duration:0,tracks:[],tagDurations:new Map,firstCluster:null,walkEnd:0,cuesPos:null,seek:new Map,attachedImages:0,warnings:[]},n=await e.header(0);if(!n||n.id!==440786851||n.size===-1||n.dataStart+n.size>e.size)throw Error(`invalid EBML header`);await e.load(n.dataStart,Math.min(n.size,4096));let r=n.dataStart-e.base;for(let i of Qn(e.buf,r,r+n.size))i.id===17026&&(t.docType=Zn(e.buf,i.start,i.size));let i=()=>Hr(e),a=await Zr(e,t,n.dataStart+n.size);if(!a){let r=await Fr(e,n.dataStart+n.size,e.size,e.size,{canLoad:i});if(r<0)throw Error(`no Segment element`);t.warnings.push(`no valid Segment header: reading level-1 elements from ${r}`),t.segmentExtended=!0,a={id:er,pos:r,size:-1,dataStart:r}}t.segmentData=a.dataStart,t.segmentUnknownSize=a.size===-1&&!t.segmentExtended,t.declaredEnd=a.size===-1?2**53-1:a.dataStart+a.size,t.segmentEnd=Math.min(e.size,t.declaredEnd),t.declaredEnd>e.size&&a.size!==-1&&t.warnings.push(`truncated file: Segment ends ${t.declaredEnd-e.size} bytes after EOF`);let o={ids:new Set,at:new Set},s=t.segmentData,c=s,l=-1;for(;!(s>=t.segmentEnd&&(s>=e.size||(Xr(t,e,`Segment ends at ${s} before any Cluster`),s>=t.segmentEnd)));){if(!e.cached(s,12)&&!i()){t.warnings.push(`header walk stopped at ${s} (header budget)`),l=s;break}let n=await e.header(s);if(n?.id===524531317){t.firstCluster=s;break}let r=`invalid data at ${s} before the first Cluster`;if(n&&n.size!==-1&&(Or.has(n.id)||n.id===236||n.id===191)){let i=n.dataStart+n.size;if(i>t.segmentEnd&&i<=e.size&&Xr(t,e,`${oi(n.id)} at ${s} ends after the Segment`),await Yr(e,t,n,o),c=s+1,i<=e.size){s=i;continue}r=`${oi(n.id)} at ${s} ends after the end of the file`}let a=await Fr(e,c,e.size,Math.max(t.declaredEnd,e.size),{canLoad:i});if(t.warnings.push(a<0?r:`${r}: resynchronised at ${a}`),a<0)break;a>=t.segmentEnd&&Xr(t,e,`level-1 element at ${a} after the Segment end`),c=a+1,s=a}t.walkEnd=t.firstCluster??(l>=0?l:c);for(let n of[J,Y,X,Z]){let r=t.seek.get(n);if(r===void 0||o.at.has(r)||n!==290298740&&o.ids.has(n)||r>=t.segmentEnd)continue;let i=await qr(e,r);i?.id===n?await Yr(e,t,i,o):t.warnings.push(`SeekHead entry ${oi(n)} not followed`)}if(t.cuesPos??=t.seek.get(475249515)??null,o.ids.has(357149030)||t.warnings.push(`no Info element: TimestampScale 1000000 assumed`),!t.tracks.length)throw Error(o.ids.has(374648427)?`no complete TrackEntry in Tracks`:`no Tracks element found`);return t}var $r,ei,ti,ni,ri,ii,ai,oi,si=t((()=>{Ar(),Vr(),$r=1048576,ei=65536,ti=4096,ni=16,ri=new Map([[J,`SeekHead`],[Y,`Info`],[Z,`Tags`]]),ii=new Set([J,Y,X,Z,xr]),ai=new Map([[J,[tr]],[tr,[nr,rr]],[Y,[ir,ar]],[X,[174]],[174,[215,or,131,134,ur,dr,sr,cr,lr,224]],[224,[176,186,fr]],[Z,[hr]],[hr,[gr,vr]],[gr,[_r]],[vr,[yr,br,vr]],[xr,[Sr]],[Sr,[Cr]],[mr,[187]],[187,[183]],[183,[241]]]),oi=e=>e.toString(16).toUpperCase()}));function ci(e,t,n,r=1/0){let i=new Map;for(let t of n){let n=Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale;i.set(t.number,{track:t,tickNs:n,codecDelayTicks:Math.round(t.codecDelay/n),pts:new Float64Array(256),n:0,blocks:0,frames:0,invisible:0,missingPts:0,noPtsFrames:0,nextPts:NaN,pending:[],overLimit:0,maxPts:-1/0,maxPtsDur:0})}return{header:e,tracks:i,known:new Set(e.tracks.map(e=>e.number)),fileSize:t,maxSamples:r,clusters:0,truncated:!1,missingClusterTs:0,maxAnyTicks:-1/0,lastGood:-1,resyncs:0,afterSegment:-1,switchReads:1/0,largeWindow:0,warnings:[]}}function li(e,t,n){if(e.n===e.pts.length){let t=new Float64Array(Math.max(e.n+1,Math.min(e.pts.length*2,n)));t.set(e.pts),e.pts=t}e.pts[e.n++]=t}function ui(e,t,n){let r=Math.min(e.length,t+n),i=qn(e,t,r);if(!i)return null;let a=t+i.length;if(a+3>r)return null;let o=e[a]<<24>>16|e[a+1],s=e[a+2],c=1;if(s&6){if(a+4>r)return null;c=e[a+3]+1}return{track:i.value,rel:o,flags:s,laces:c}}function di(e,t,n,r){if(t>=n)return`invalid`;if(t>=r)return`more`;let i=K(e[t]);if(!i||t+i>n)return`invalid`;if(t+i>r)return`more`;let a=BigInt(e[t]&255>>i);for(let n=1;n<i;n++)a=a*256n+BigInt(e[t+n]);return{v:a,n:i}}function fi(e,t,n,r){let i=t+n,a=Math.min(i,e.length),o=ui(e,t,a-t);if(!o){let n=t<a?K(e[t]):0;return a<i&&(t>=a||n>0&&t+n+4>a)?`more`:`invalid`}let s=t+K(e[t]);if(r&&!r.has(o.track))return`invalid`;let c=o.flags>>1&3;if(!c)return o;let l=i-s-4;if(l<0)return`invalid`;let u=o.laces,d=s+4;if(c===2)return l%u?`invalid`:o;if(c===1){let t=0;for(let n=0;n<u-1;n++){let n;do{if(l<=t)return`invalid`;if(d>=a)return`more`;n=e[d++],t+=n,l--}while(n===255)}return l<t?`invalid`:o}let f=di(e,d,i,a);if(typeof f==`string`)return f;if(f.v>Di)return`invalid`;let p=f.v,m=f.v;d+=f.n;for(let t=1;t<u-1;t++){if(f=di(e,d,i,a),typeof f==`string`)return f;let t=p+f.v-((1n<<BigInt(7*f.n-1))-1n);if(t<0n||t>Di)return`invalid`;p=t,m+=t,d+=f.n}return BigInt(i-d)<m?`invalid`:o}function pi(e,t,n,r){t.n<e.maxSamples?li(t,n,e.maxSamples):t.overLimit++,n>=t.maxPts&&(t.maxPts=n,t.maxPtsDur=r),t.nextPts=n+r}function mi(e,t,n,r){let i=n+t.rel;i>e.maxAnyTicks&&(e.maxAnyTicks=i);let a=e.tracks.get(t.track);if(!a)return null;let o=t.laces;a.blocks++,a.frames+=o,t.flags&8&&a.invisible++;let s=r>0?r:Math.floor(a.track.defaultDuration*o/e.header.timestampScale),c=e=>Math.floor(s*e/o);if(i<0){a.noPtsFrames+=o;for(let t=0;t<o;t++)Number.isNaN(a.nextPts)?a.pending.push(c(t+1)-c(t)):pi(e,a,a.nextPts,c(t+1)-c(t));return a}let l=a.track.trackTimestampScale,u=(l===1?n:Math.floor(n/l))+t.rel-a.codecDelayTicks,d=u;for(let e of a.pending)d-=e;for(let t of a.pending.splice(0))pi(e,a,d,t),d+=t;for(let t=0;t<o;t++){if(t>0&&s===0){a.missingPts+=o-t;break}pi(e,a,u+c(t),c(t+1)-c(t))}return a}async function hi(e,t,n){let r=Math.min(n.size,Ti);for(;;){e.has(n.dataStart,r)||await e.load(n.dataStart,r);let i=fi(e.buf,n.dataStart-e.base,n.size,t.known);if(i!==`more`)return i;if(r>=n.size)return`invalid`;r=Math.min(n.size,r*8)}}function gi(e,t){return e.has(t,12)?q(e.buf,t-e.base,e.base):void 0}async function _i(e,t){return(gi(e,t)??await e.header(t))||(Kn(e.buf,t-e.base)?`eof`:`invalid`)}function vi(e,t){return e.has(t.dataStart,t.size)?Jn(e.buf,t.dataStart-e.base,t.size):void 0}async function yi(e,t){return await e.load(t.dataStart,t.size),Jn(e.buf,t.dataStart-e.base,t.size)}function bi(e,t){return e.size===-1||e.dataStart+e.size>t||ji.has(e.id)&&e.size>8||(e.id===163||e.id===161)&&e.size>Ei?`invalid`:null}async function xi(e,t,n,r=1/0){let i=gi(e,n)??await e.header(n);if(!i||i.id!==524531317)return null;let a=t.fileSize,o=i.size===-1?1/0:i.dataStart+i.size;t.clusters++;let s=-1,c=0,l=i.dataStart,u=e=>({next:l,videoBlocks:c,error:e});for(;l<o;){if(c>=r||t.stop)return{next:Math.min(o,l),videoBlocks:c,error:null};if(t.switchReads<=e.reader.reads&&(e.window=t.largeWindow,t.switchReads=1/0),l>=a)return o===1/0?{next:l,videoBlocks:c,error:null}:u(`eof`);let n=gi(e,l);if(n||=await _i(e,l),typeof n==`string`)return u(n);let i=ki.has(n.id);if(!i&&o===1/0&&(Or.has(n.id)||n.id===408125543))return{next:l,videoBlocks:c,error:null};let d=bi(n,o);if(d)return u(d);i&&(t.lastGood=l);let f=n.dataStart+n.size;if(f>a)return u(`eof`);if(n.id===231)s=vi(e,n)??await yi(e,n);else if(n.id===163||n.id===160){let r=n,i=0;if(n.id===160){r=null;for(let a=n.dataStart;a<f;){let n=gi(e,a)||await _i(e,a),o=typeof n==`string`?n:bi(n,f);if(o||typeof n==`string`)return l=a,u(o??`invalid`);Ai.has(n.id)&&(t.lastGood=a),n.id===161?r=n:n.id===155&&(i=vi(e,n)??await yi(e,n)),a=n.dataStart+n.size}}if(r){let n=e.has(r.dataStart,Math.min(r.size,Ti))?fi(e.buf,r.dataStart-e.base,r.size,t.known):`more`;if(n===`more`&&(n=await hi(e,t,r)),n===`invalid`)return u(`invalid`);s<0&&(t.missingClusterTs++,s=0);let a=mi(t,n,s,i);t.onBlock?.(n,s,i,r),a&&a.track.type===1&&c++}}l=f}return{next:o,videoBlocks:c,error:null}}function Si(e,t,n,r){n<0&&r===`eof`?e.truncated=!0:++e.resyncs>Oi||(n<0?e.warnings.push(`invalid data at ${t}, no further level-1 element`):n>=t?e.warnings.push(`skipped ${n-t} bytes of invalid data at ${t}`):e.warnings.push(`invalid data at ${t}: resynchronised at ${n}`))}async function Ci(e,t,n,r){let i=t.header,a=t.fileSize,o=i.segmentUnknownSize||i.segmentExtended?1/0:i.declaredEnd,s=n;for(t.lastGood=n-1;!t.stop;){e.reader.checkAbort(),r?.(s,Math.min(a,o));let n=null,i=s;if(s>=a){s<o&&o!==1/0&&(t.truncated=!0);break}if(s>=o){o=1/0;let n=await Fr(e,Math.max(t.lastGood+1,s),a,1/0);if(n<0)break;t.afterSegment<0&&(t.afterSegment=s),s=n;continue}let c=await _i(e,s);if(typeof c==`string`)n=c;else{let r=Or.has(c.id)||c.id===236||c.id===191;if(c.id===408125543&&o===1/0?(t.afterSegment<0&&(t.afterSegment=s),n=`invalid`):c.size===-1?c.id===524531317?o=1/0:n=`invalid`:c.dataStart+c.size>o&&(n=`invalid`),!n){if(r&&(t.lastGood=s),c.id===524531317){let r=await xi(e,t,s);r.error?(n=r.error,i=r.next):s=r.next}else c.dataStart+c.size>a?n=`eof`:s=c.dataStart+c.size}}if(!n)continue;o=1/0;let l=await Fr(e,t.lastGood+1,a,1/0);if((n!==`invalid`||i!==t.afterSegment)&&Si(t,i,l,n),l<0)break;s=l}t.resyncs>Oi&&t.warnings.push(`${t.resyncs-Oi} more resynchronisation(s) after invalid data`),t.afterSegment>=0&&t.warnings.push(`data after the Segment end at ${t.afterSegment} was scanned like ffprobe does (concatenated files?)`)}async function wi(e,t,n,r){await e.load(t,n-t,n-t);let i=e.buf,a=e.base,o=[];for(let e=n-a-4;e>=t-a;e--)i[e]===31&&jr(i,e,r-a)&&o.push(a+e);return o}var Ti,Ei,Di,Oi,ki,Ai,ji,Mi=t((()=>{Ar(),Vr(),Ti=16,Ei=268435456,Di=2147483647n,Oi=5,ki=new Set([231,163,160,167,171,236,191]),Ai=new Set([161,155,251,Dr,Er,164,236,191]),ji=new Set([231,155,251,Dr])})),Ni=n({attachEstimate:()=>Wi,av1TimingInfo:()=>Vi,h264Sps:()=>Ri,setupUnsupported:()=>Ui});function Pi(e){let t=Math.floor(e),n=e-t;return n>.5||n===.5&&t%2!=0?t+1:t}function Fi(e,t){for(;t;)[e,t]=[t,e%t];return e}function Ii(e,t){let n=e>>3,r=n<12?[480,960,1920,2880][n&3]:n<16?[480,960][n&1]:[120,240,480,960][n&3],i=e&3,a=i===0?1:i<3?2:t&63;return a>0&&r*a<=5760?r*a:0}function Li(e){let t=[];for(let n=1,r=0;n<e.length;n++)r>=2&&e[n]===3?r=0:(t.push(e[n]),r=e[n]?0:r+1);let n=0,r=e=>{let r=0;for(let i=n+e;n<i;n++){if(n>>3>=t.length)throw RangeError();r=r*2+(t[n>>3]>>7-(n&7)&1)}return r};return{u:r,ue:()=>{let e=0;for(;!r(1);)if(++e>31)throw RangeError();return 2**e-1+r(e)}}}function Ri(e){let{u:t,ue:n}=Li(e);try{let e=t(8);if(e!==66)return`H.264 profile ${e}`;t(16),n();let r={frameNumBits:n()+4,pocType:n(),pocLsbBits:0,fixedDelay:!1};if(r.pocType===0&&(r.pocLsbBits=n()+4),r.pocType===1){t(1),n(),n();for(let e=n();e>0;e--)n()}if(r.frameNumBits>16||r.pocLsbBits>16||r.pocType>2)return`bad H.264 SPS`;n(),t(1),n(),n();let i=t(1)||(t(1),0);if(t(1),t(1))for(let e=0;e<4;e++)n();if(t(1)){if(t(1)&&t(8)===255&&t(32),t(1)&&t(1),t(1)&&(t(4),t(1))&&t(24),t(1)&&(n(),n()),t(1))return`H.264 timing info`;if(t(1)||t(1)||t(1))return`H.264 HRD or pic_struct`;if(t(1)){t(1);for(let e=0;e<4;e++)n();if(n())return`H.264 reordering`;r.fixedDelay=!0}}return r.pocType===1?`H.264 pic_order_cnt_type 1`:i?r:`H.264 field coding`}catch{return`bad H.264 SPS`}}function zi(e,t){let n=[];if(t)for(let r=0;r+t<=e.length;){let i=0;for(let n=r+t;r<n;r++)i=i*256+e[r];n.push(e.subarray(r,r+=i))}else for(let t=0,r=-1;t<=e.length;t++)t<e.length&&(e[t]||e[t+1]||e[t+2]!==1)||(r>=0&&n.push(e.subarray(r,t)),r=t+3,t+=2);return n}function Bi(e,t){let n=e?(e[4]&3)+1:0,r=e?[]:zi(t[0],0);if(e){let t=5;for(let n of[31,255])for(let i=e[t++]&n,a=0;i-->0&&t+2<=e.length;t+=2+a)a=e[t]<<8|e[t+1],r.push(e.subarray(t+2,t+2+a))}let i=e=>e[0]&31,a=r.find(e=>i(e)===7),o=a?Ri(a):`no H.264 SPS`;if(typeof o==`string`)return o;let s=[];for(let e of t){let t=zi(e,n).find(e=>i(e)===1||i(e)===5);if(!t)return`no H.264 slice header`;s.push(t)}if(i(s[0])!==5)return`H.264 does not start with an IDR`;let c=r.filter(e=>i(e)===8);if(!c.length)return`no H.264 PPS`;let l=2**o.frameNumBits,u=0,d=NaN,f=-1,p=0,m=null;try{for(let e of c){let{u:t,ue:n}=Li(e);if(n(),n(),t(1),t(1)&&!o.pocType)return`H.264 bottom field POC`}for(let e of s){let{u:t,ue:n}=Li(e);n(),n(),n();let r=t(o.frameNumBits);if(i(e)===5)n(),u=p=0,d=NaN,m=null;else if(f>=0&&r!==f&&r!==(f+1)%l)return`H.264 frame_num gap`;else r<f&&(p+=l);f=r;let a=2*(p+r)-(e[0]&96?0:1);if(!o.pocType){let n=t(o.pocLsbBits),r=2**o.pocLsbBits;d>=0||(d=n);let i=n<d&&d-n>=r/2?u+r:n>d&&n-d>r/2?u-r:u;a=i+n,e[0]&96&&([u,d]=[i,n])}if(m!==null&&(o.fixedDelay?a<m:a-m!==1&&a-m!==2))return`H.264 POC step ${a-m}`;m=a}}catch{return`bad H.264 PPS or slice header`}return null}function Vi(e){for(let t=0;t<e.length;){let n=e[t],r=t+1+(n>>2&1),i=e.length-r;if(n&2)for(let t=0,n=128;n&128;t+=7)i=(t?i:0)+((n=e[r++]??0)&127)*2**t;if((n>>3&15)==1)return r<e.length?(e[r]&12)==4:null;t=r+i}return null}function Hi(e,t){let n=e.codecPrivate;if(e.codecId===Xi){let e=Vi(n&&n.length>4?n.subarray(4):t[0]);return e===null?`no AV1 sequence header`:e?`AV1 timing info`:null}return e.codecId===Yi?Bi(n,t):null}function Ui(e){let t=e.tracks.filter(e=>e.type===1);if(t.length!==1)return`${t.length} video tracks`;if(new Set(e.tracks.map(e=>e.number)).size<e.tracks.length)return`duplicate track numbers`;if(e.attachedImages)return`attached pictures`;if(![`V_VP8`,`V_VP9`,Xi,Yi].includes(t[0].codecId))return`codec ${t[0].codecId}`;for(let t of e.tracks){if(t.trackTimestampScale!==1||t.encoded)return`track ${t.number} scale or encoding`;let e=t.codecPrivate;if(t.type!==1&&(t.codecId!==`A_OPUS`||!e||String.fromCharCode(...e.subarray(0,8))!==`OpusHead`||e[18]!==0))return`track ${t.number} (${t.codecId||t.type})`}return null}function Wi(e,t,n,r,i=!1){let a=Ui(t);if(a)return a;let o=new Map;for(let e of t.tracks){let n=N(Math.trunc(t.timestampScale*e.trackTimestampScale),1e9,L);o.set(e.number,{tb:n,nb:0,cid:0,durs:0,seen:!1,first:null,firstIdx:0,last:null,lastIdx:0})}let s=t.tracks.find(e=>e.type===1),c=o.get(s.number),l=c.tb,u=l.num/l.den,d=s.codecId===Yi,f=d||l.den>=101*l.num||l.den<5*l.num,p=f?u>5e-4?40:20:0,m=new Float64Array(4*Q),h=(e,t)=>{let n=m[2*e*Q+t]/_;return m[(2*e+1)*Q+t]/_-n*n},g=null,_=0,v=0,y=0,b=0,x=null,S=null,C=null,w=()=>r.resyncs||r.truncated||r.missingClusterTs,T=[],E=n.newScanState(t,e.size,t.tracks),D=(r,i,a,s)=>{let f=n.addBlock(E,r,i,a);if(b>=Gi||c.nb&&_>=p&&[...o.values()].every(e=>e.seen||e.nb>=Ki))return!1;let S=o.get(f.track.number),C=s.dataStart+Math.clz32(e.buf[s.dataStart-e.base])-20,w=s.dataStart+s.size-C,D=S===c,O=a||Math.floor(f.track.defaultDuration*r.laces/t.timestampScale);if(r.laces>1||f.noPtsFrames?x=`laced or untimed blocks`:!O&&!D?(O=Math.floor(Ii(e.buf[C-e.base],w>1?e.buf[C+1-e.base]:0)*S.tb.den/(48e3*S.tb.num)),(!O||w<1)&&(x=`a bad Opus packet`)):!O&&l.num*1e3>l.den&&(O=1),D&&!c.nb&&s.id===163&&!(r.flags&128)&&(x=`no keyframe first`),x)return!1;b+=w;let k=D&&d&&c.nb<qi?null:f.pts[f.n-1];if(k!==null&&S.nb>1&&(S.last!==null&&(S.last>=k||S.first!==null&&S.lastIdx>S.firstIdx&&Math.floor((k-S.last)/1e3)>Math.floor((S.last-S.first)/(S.lastIdx-S.firstIdx)))&&(S.first=null),S.first===null&&(S.first=k,S.firstIdx=S.nb),S.last=k,S.lastIdx=S.nb),S.nb>1){let e=Qi(S.cid,S.tb);if(!e&&S.nb>30&&S.first!==null&&S.last!==null&&(e=Qi(S.last-S.first,S.tb)),e>=Gi)return!1;O>0&&(S.cid+=O,S.durs++)}if(D&&k!==null&&g!==null&&k>g){let e=k*u;for(let t=0;t<Q;t++){if(!(m[Q+t]<1e10))continue;let n=e*Zi(t)/12012;for(let e=0;e<2;e++){let r=n-Pi(n+e*.5)+e*.5;m[2*e*Q+t]+=r,m[(2*e+1)*Q+t]+=r*r}}if(_++,v+=k-g,_%10==0)for(let e=0;e<Q;e++)m[Q+e]<1e10&&h(0,e)>.04&&h(1,e)>.04&&(m[Q+e]=m[3*Q+e]=2e10);_>3&&(y=Fi(y,k-g))}if(D&&k!==null&&(g=k),k!==null&&(S.seen=!0),D&&c.nb<(d?qi:1)){let t=Math.min(w,Ji);T.push(e.has(C,t)?e.buf.slice(C-e.base,C+t-e.base):[C,t])}return S.nb++,!0};return r.onBlock=(e,t,n,a)=>{if(C===null){try{if(D(e,t,n,a))return}catch(e){S=[e]}C=w(),i&&(r.stop=!0)}},async()=>{if(S)throw S[0];if(x)return x;if(!c.nb||(C??w()))return`damaged first Clusters`;let t=[];for(let n of T)t.push(n instanceof Uint8Array?n:(await e.load(n[0],n[1],n[1]),e.buf.slice(n[0]-e.base,n[0]+n[1]-e.base)));let n=Hi(s,t);if(n)return n;let r=null,i=null;if(f&&_>15&&y>Math.max(1,Math.floor(l.den/(500*l.num)))&&(r=N(l.den,BigInt(l.num)*BigInt(y),L)),_>1&&!r&&f){let e=0,t=.01;for(let n=0;n<Q;n++){let r=Zi(n);if(!((c.cid?c.cid*u<11511.5/r:r<12012)||u*v/_<9609.6/r))for(let i=0;i<2;i++){let a=h(i,n);a<t&&t>1e-9&&(t=a,e=r)}}e&&e/12012<1.01*(l.den/l.num)&&(r=N(e,12012,L))}if(r&&v&&c.cid<=0&&_>2&&Math.abs(1/(r.num/r.den*u)-v/_)<=1&&(i=r),c.durs&&!i&&c.cid){i=N(BigInt(c.durs)*BigInt(l.den),BigInt(c.cid)*BigInt(l.num),6e4);let e=.01,t=0;for(let n=0;n<Q;n++){let r=Math.abs(i.num/i.den/(Zi(n)/12012)-1);r<e&&(e=r,t=Zi(n))}t&&(i=N(t,12012,L))}return r??={num:l.den,den:l.num},{avg:i?`${i.num}/${i.den}`:`0/0`,r:`${r.num}/${r.den}`,packets:c.nb}}}var Q,Gi,Ki,qi,Ji,Yi,Xi,Zi,Qi,$i=t((()=>{oe(),Q=399,Gi=5e6,Ki=50,qi=7,Ji=1024,Yi=`V_MPEG4/ISO/AVC`,Xi=`V_AV1`,Zi=e=>e<360?(e+1)*1001:e<390?(e-329)*12012:e<393?[80,120,240][e-390]*12012:[24,30,60,12,15,48][e-393]*12e3,Qi=(e,t)=>Number((BigInt(e)*BigInt(t.num)*1000000n+BigInt(t.den>>1))/BigInt(t.den))})),ea=n({CPU_MS_PER_BLOCK:()=>Ia,LARGE_FRAME_BYTES:()=>wa,MAX_CUES_BYTES:()=>Ea,MAX_TAIL_BYTES:()=>Ta,PROBE_BLOCKS:()=>32,PROBE_CLUSTERS:()=>8,SMALL_SCAN_WINDOW:()=>$,analyzeMatroska:()=>Ca,codecNameOf:()=>ta,declaredRate:()=>na,estimateScan:()=>da,estimateWalkMs:()=>fa,mergeRunStats:()=>ra,planExactScan:()=>pa});function ta(e){for(let t of za.split(` `)){let[n,r]=t.split(`:`);if(e.startsWith(n))return r}return``}function na(e){if(!(e>0))return null;let t=I(1e9,e,3e4),n=P(t);return{avg:n,r:t.num<t.den*1e3&&t.num>t.den*5?n:null}}function ra(e,t){let n=new Map,r={minFps:null,maxFps:null,isVfr:null,vfrRatio:0,distinctDeltas:0,duplicateTimestamps:0,timestampsQuantized:!1,medianDelta:null},i=0;for(let e of t){r.duplicateTimestamps+=e.duplicateTimestamps;for(let[t,r]of e.histogram)n.set(t,(n.get(t)??0)+r),i+=r}let a=[...n.keys()].sort((e,t)=>e-t);if(r.distinctDeltas=a.length,i===0)return r;let o=0,s=a.find(e=>(o+=n.get(e)??0)*2>=i)??a[0],c=ve(s,e,a),l=0;for(let e of a)Math.abs(e-s)>c&&(l+=n.get(e)??0);return r.medianDelta=s,r.minFps=z(e,a[a.length-1]),r.maxFps=z(e,a[0]),r.isVfr=i>=2&&l>0,r.vfrRatio=l/i,r.timestampsQuantized=!r.isVfr&&a.length>1,r}function ia(e,t,n){e.minFps=t.minFps,e.maxFps=t.maxFps,e.isVfr=t.isVfr,e.vfrRatio=t.vfrRatio,e.distinctDeltas=t.distinctDeltas,e.duplicateTimestamps=t.duplicateTimestamps,e.timestampsQuantized=t.timestampsQuantized;for(let t of[`minFps`,`maxFps`,`isVfr`,`duplicateTimestamps`])e.provenance[t]=n}function aa(e,t){let n=v(t.number);n.fourccOrCodecId=t.codecId,n.codecName=ta(t.codecId),n.width=t.width,n.height=t.height,n.timescale=1e9/(Math.trunc(e.timestampScale*t.trackTimestampScale)||e.timestampScale),n.provenance.codec=n.provenance.dimensions=`header`;let r=na(t.defaultDuration);r?(n.avgFpsFfprobe=r.avg,n.rFpsFfprobe=r.r,n.nominalFps={...I(1e9,t.defaultDuration,3e4),kind:`declared`},n.provenance.nominalFps=`header`,t.frameRate>0&&t.defaultDuration===Math.trunc(1e9/t.frameRate)&&n.warnings.push(`DefaultDuration derived from Video FrameRate ${t.frameRate}`)):n.warnings.push(Ra);let i=e.tagDurations.get(t.uid);return i!==void 0&&(n.durationSec=i,n.provenance.durationSec=`header`),n}function oa(e){return e.duration*e.timestampScale/1e9}function sa(e,t,n){let r=n.durationSec??oa(e);r>0&&t.defaultDuration>0&&n.warnings.push(`about ${Math.round(r*1e9/t.defaultDuration)} frames (estimated from duration x DefaultDuration, assumes CFR)`)}function ca(e,t,n){let r=oa(e),i=t*e.timestampScale/1e9;r>0&&Number.isFinite(i)&&r-i>Math.max(.5,.02*r)&&n.push(`Info Duration ${r.toFixed(3)} s exceeds the last block at ${i.toFixed(3)} s (false Duration or truncated file)`)}function la(e,t,n){e.provenance.durationSec===`header`&&e.durationSec!==null&&Math.abs(e.durationSec-t)>Math.max(2/e.timescale,1/(e.nominalFps?.value||1/0))&&e.warnings.push(`DURATION tag ${e.durationSec.toFixed(3)} s differs from the scanned ${t.toFixed(3)} s`),e.durationSec=t,e.provenance.durationSec=n}async function ua(e,t,n,r){let i=Math.min(r,Aa);await e.load(n,i,i);let a=e.chunkAt(n);if(!a)return null;let o=a.buf,s=a.base,c=s+o.length,l={bytes:0,blocks:0,video:0,large:0,smallBytes:0},u=n;for(;u<c;){let e=q(o,u-s,s);if(e?.id===524531317){u=e.dataStart;continue}if(!e||e.size===-1)break;let i=e.dataStart+e.size,a=e.id===163||e.id===160;if(a?e.size>Pa||i>n+r:i>c||!Fa.has(e.id))break;if(a){let n=e.id===160?q(o,e.dataStart-s,s):e,r=n&&(n.id===163||n.id===161)?ui(o,n.dataStart-s,n.size):null,a=r&&t.some(e=>e.number===r.track)?r.laces:0;l.blocks+=Math.max(1,a),l.video+=a,i-e.pos>=4096?l.large++:l.smallBytes+=i-e.pos}l.bytes=i-n,u=i}return l.blocks&&l.bytes>0?l:null}function da(e,t,n){if(!t){if(!(n>0))return null;let t=e/n>=$;return{blocks:n,large:t?n:0,smallBytes:t?0:e}}let r=e/t.bytes,i=t.video*r;return{blocks:t.blocks*r*(t.video>0&&n>i?n/i:1),large:t.large*r,smallBytes:t.smallBytes*r}}function fa(e,t,n){let r=Math.min(e,Ma,t?.video?Math.ceil(ja*t.bytes/t.video):Ma);return s(n.costModel,Math.ceil(r/n.readAhead.head),r)}function pa(e,t,n){let r=(t?.blocks??0)*n.costModel.perBlockMs,i=(e,t,i)=>({window:e,reads:t,bytes:i,ms:s(n.costModel,t,i)+r}),a=n.readAhead.matroskaScan,o=i(a,Math.ceil(e/a),e);if(!t)return o;let c=Math.ceil(t.large+t.smallBytes/$),l=i($,c,Math.min(e,c*$));return l.ms<o.ms?l:o}async function ma(){try{return await Promise.resolve().then(()=>($i(),Ni))}catch{return`the estimate code did not load`}}async function ha(e,t){try{return await t()}catch(t){return e.reader.checkAbort(),`the estimate failed: ${t instanceof Error?t.message:String(t)}`}}async function ga(e,t,n,r){let i=e.reader,a=r.onProgress,o=i.reads,s=t.header.segmentEnd-n;a?.({phase:`matroska-exact`,done:0,total:s}),await Ci(e,t,n,(e,t)=>{s=Math.max(s,t-n),a&&i.reads!==o&&(o=i.reads,a({phase:`matroska-exact`,done:Math.min(e-n,s),total:s}))}),a?.({phase:`matroska-exact`,done:s,total:s})}async function _a(e,t){let n=t.firstCluster===null?null:await e.header(t.firstCluster);if(n?.id===524531317)return n.pos;let r=Math.max(t.segmentData,t.walkEnd),i=await Pr(e,r,Math.min(t.segmentEnd,r+ka),t.declaredEnd,{step:Oa});if(i>=0)return i;for(let n of(await va(e,t)).slice(0,Na))if((await e.header(n))?.id===524531317)return n;return null}async function va(e,t){let n=t.cuesPos===null||t.cuesPos>=t.segmentEnd?null:await e.header(t.cuesPos);if(n?.id!==475249515||n.size===-1)return[];let r=Math.min(n.size,Ea,e.size-n.dataStart);await e.load(n.dataStart,r,r);let i=[];return Kr(t,e.buf,n.dataStart-e.base,n.dataStart-e.base+r,mr,i),[...new Set(i)].filter(e=>e<t.segmentEnd).sort((e,t)=>e-t)}function ya(e,t){return e.length<=t?[...e]:[...new Set(Array.from({length:t},(n,r)=>e[Math.round(r*(e.length-1)/(t-1))]))]}async function ba(e,t,n,r,i){let a=Math.max(i.readAhead.tail,4096),o=t.segmentEnd,s=-1/0;for(;;){let i=Math.max(r,t.segmentEnd-a);for(let r of i<o?await wi(e,i,o,t.declaredEnd):[]){let i=ci(t,e.size,n);if(await xi(e,i,r),s=Math.max(s,i.maxAnyTicks),i.tracks.get(n[0].number)?.n)return{st:i,maxAnyTicks:s}}if(i<=r||a>=16777216)return null;o=i+4,a=Math.min(a*4,Ta)}}async function xa(e,t,n,r,i,a,o){let s=await ba(e,t,n,i,a),c=await va(e,t),l=ya(c[0]===i||!c.length?c:[i,...c.filter(e=>e>i)],8);if(!c.length){l=[i];let n=t.segmentEnd-i;for(let r=1;r<8;r++){let a=i+Math.floor(r*n/8),o=await Pr(e,a,Math.min(t.segmentEnd,a+Da),t.declaredEnd,{step:Oa});o>l[l.length-1]&&l.push(o)}}let u=new Map,d=null,f=0;for(let r of l){let a=ci(t,e.size,n);if(await xi(e,a,r,32)){f++,r===i&&(d=a);for(let e of a.tracks.values()){if(e.n<2)continue;let t=u.get(e.track.number)??[];t.push(xe({timescale:1e9/e.tickNs,pts:e.pts.subarray(0,e.n),tickQuantized:!0})),u.set(e.track.number,t)}}}o.push(`probe: ${f} cluster(s) sampled via ${c.length?`Cues`:`sync search`}, up to 32 video blocks each`),s||o.push(`probe: no video block found in the tail`),ca(t,s?.maxAnyTicks??-1/0,o),n.forEach((e,n)=>{let i=r[n],a=i.timescale,o=ra(a,u.get(e.number)??[]);o.isVfr===null?f>0&&i.warnings.push(`probe: every sampled cluster holds fewer than 2 frames of this track, so no frame interval was measured; scan all frames for min, max and VFR`):ia(i,o,`sampled`);let c=d?.tracks.get(e.number),l=c?.n?Math.min(...c.pts.subarray(0,c.n)):null;l!==null&&(i.startSec=l/a,i.provenance.startSec=`sampled`);let p=s?.st.tracks.get(e.number);p?.n&&la(i,(p.maxPts+(p.maxPtsDur>0?p.maxPtsDur:o.medianDelta??0)-(l??0))/a,`sampled`),sa(t,e,i)})}function Sa(e,t){let n=e.timescale;if(e.frames=e.presentedFrames=t.frames,e.provenance.frames=e.provenance.presentedFrames=`computed`,e.isStill=t.frames===1,t.invisible&&e.warnings.push(`${t.invisible} invisible block(s) counted as frames`),t.missingPts&&e.warnings.push(`${t.missingPts} laced frame(s) without a timestamp`),t.noPtsFrames&&e.warnings.push(`${t.noPtsFrames} frame(s) before time 0 have no timestamp; interpolated from the neighbouring frames like ffmpeg`),t.overLimit&&e.warnings.push(`per-frame statistics skipped: more than ${t.n} frames`),!t.n||t.overLimit)return t.n||e.warnings.push(`no blocks for this track`),null;let r=xe({timescale:n,pts:t.pts.subarray(0,t.n),lastDuration:t.maxPtsDur>0?t.maxPtsDur:null,tickQuantized:!0});return e.warnings.push(...r.warnings),la(e,r.durationSum/n,`exact`),ia(e,r,`exact`),e.avgFps=t.frames!==t.n&&Number.isSafeInteger(n)&&Number.isSafeInteger(r.durationSum)?ae(n,t.frames,r.durationSum):r.avgFps,e.startSec=r.firstPts===null?null:r.firstPts/n,e.dominantFps=r.dominantFps,e.provenance.avgFps=e.provenance.startSec=e.provenance.dominantFps=`exact`,!e.nominalFps&&r.nominalFps?(e.nominalFps=r.nominalFps,e.provenance.nominalFps=`exact`):e.nominalFps&&e.avgFps&&Math.abs(e.avgFps.value/e.nominalFps.value-1)>.005&&e.warnings.push(`declared rate ${e.avgFpsFfprobe} differs from the measured average ${e.avgFps.value.toFixed(3)}`),r.duplicateTimestamps&&e.warnings.push(`${r.duplicateTimestamps} duplicate block timestamp(s) excluded from the instantaneous rates`),r.profile}async function Ca(e,t){let n=new Lr(e,t.readAhead.head),r=await Qr(n),i=_(r.docType===`webm`?`webm`:`matroska`),a=i.warnings;i.brand=r.docType,i.scan=`header`,a.push(...r.warnings),r.docType!==`webm`&&r.docType!==`matroska`&&a.push(`unexpected DocType '${r.docType}'`),r.segmentUnknownSize&&a.push(`Segment has an unknown size (live or unfinished recording)`),i.formatDurationSec=r.duration===0?null:Math.trunc(r.duration*r.timestampScale*1e3/1e6)/1e6,i.audioTrackCount=r.tracks.filter(e=>e.type===2).length,r.attachedImages&&a.push(`${r.attachedImages} attached image(s) ignored: ffprobe lists them as attached_pic video streams`);let o=r.tracks.filter(e=>e.type===1);if(!o.length)return a.push(`no video track`),i;i.primaryTrackId=o[0].number,i.videoTracks=o.map(e=>aa(r,e));let s=t.matroskaMode,c=null;if(s!==`header`&&(c=await _a(n,r),c===null&&a.push(`no Cluster found: nothing to scan`)),c===null)return o.forEach((e,t)=>sa(r,e,i.videoTracks[t])),i;let l=r.segmentEnd-c,u=o[0],d=r.tagDurations.get(u.uid)??oa(r),f=d>0&&u.defaultDuration>0?d*1e9/u.defaultDuration:0,p=await ua(n,o,c,l),m=pa(l,da(l,p,f),t),h=u.defaultDuration?null:await ma();if(s===`auto`){let e=typeof h==`object`&&h&&!h.setupUnsupported(r)?fa(l,p,t):0;s=m.ms<=t.exactBudgetMs+e?`exact`:`probe`;let n=e?` plus the ${e.toFixed(0)} ms that probe mode reads for the ffprobe estimate`:``;s===`probe`&&a.push(`exact block scan skipped: predicted ${m.ms.toFixed(0)} ms exceeds the ${t.exactBudgetMs} ms budget${n}`)}let g=i.videoTracks[0],v=e=>{typeof e!=`string`&&(g.avgFpsFfprobe=e.avg,g.rFpsFfprobe=e.r),g.warnings[g.warnings.indexOf(Ra)]=typeof e==`string`?`${La}not reproduced (${e})`:`${La}estimated like ffprobe from ${e.packets} video packets`};if(s===`exact`){n.window=m.window;let s=ci(r,n.size,o,t.maxExpandedSamples);m.window<t.readAhead.matroskaScan&&(s.switchReads=e.reads+2*m.reads+16,s.largeWindow=t.readAhead.matroskaScan);let l=typeof h==`object`&&h?h.attachEstimate(n,r,Ba,s):h;await ga(n,s,c,t),l!==null&&v(typeof l==`function`?await ha(n,l):l),i.scan=`exact`,a.push(...s.warnings),s.truncated&&a.push(`truncated file: the last Cluster or block ends beyond EOF`),s.missingClusterTs&&a.push(`${s.missingClusterTs} block(s) in Clusters without a Timestamp`),ca(r,s.maxAnyTicks,a);for(let[e,t]of o.entries()){let n=i.videoTracks[e];n.rateProfile=await Pe(Sa(n,s.tracks.get(t.number)))}return i}if(h!==null){let e=ci(r,n.size,[]),t=typeof h==`string`?h:h.attachEstimate(n,r,Ba,e,!0);v(typeof t==`string`?t:await ha(n,()=>Ci(n,e,c).then(t)))}return n.window=m.window===4096?$:t.readAhead.head,await xa(n,r,o,i.videoTracks,c,t,a),i.scan=`probe`,i}var wa,$,Ta,Ea,Da,Oa,ka,Aa,ja,Ma,Na,Pa,Fa,Ia,La,Ra,za,Ba,Va=t((()=>{u(),oe(),y(),$e(),Ar(),si(),Mi(),Vr(),wa=32768,$=4096,Ta=16777216,Ea=524288,Da=1048576,Oa=262144,ka=16777216,Aa=16384,ja=48,Ma=5e6,Na=4,Pa=268435456,Fa=new Set([231,236,191,167,171]),Ia=l.perBlockMs,La=`no DefaultDuration: avg_frame_rate and r_frame_rate `,Ra=`${La}come from the first packets, which header mode does not read`,za=`V_AV1:av1 V_VP8:vp8 V_VP9:vp9 V_MPEG4/ISO/AVC:h264 V_MPEGH/ISO/HEVC:hevc V_MPEGI/ISO/VVC:vvc V_MPEG4/ISO/ASP:mpeg4 V_MPEG4/ISO/AP:mpeg4 V_MPEG4/ISO/SP:mpeg4 V_MPEG4/MS/V3:msmpeg4v3 V_MPEG1:mpeg1video V_MPEG2:mpeg2video V_PRORES:prores V_MJPEG:mjpeg V_FFV1:ffv1 V_THEORA:theora V_UNCOMPRESSED:rawvideo V_DIRAC:dirac`,Ba={newScanState:ci,addBlock:mi}}));let Ha={isobmff:async()=>(await Promise.all([Promise.resolve().then(()=>(Un(),Sn)),Promise.resolve().then(()=>($e(),he))]))[0].analyzeIsoBmff,matroska:async()=>(await Promise.all([Promise.resolve().then(()=>(Va(),ea)),Promise.resolve().then(()=>($e(),he))]))[0].analyzeMatroska},Ua={isobmff:async(e,t)=>(await Ha.isobmff())(e,t),matroska:async(e,t)=>(await Ha.matroska())(e,t)};function Wa(e,t,n={},r=Ua,i=r===Ua?Ha:null){return j(e,t,n,i?e=>i[e]():e=>r[e])}let Ga=(e,t)=>Object.assign(Error(e),{code:t}),Ka=e=>e===`isobmff`||e===`matroska`;function qa(e){let t=self,n=new Map,r=new Map,i=e=>t.postMessage({v:1,...e}),a=t=>{let r=n.get(t);if(!r){let i=Object.hasOwn(e,t)?e[t]:void 0;if(!i)return Promise.reject(Ga(`unknown engine ${t}`,`unknown-engine`));r=(typeof i==`function`?Promise.all([i(),Promise.resolve().then(()=>($e(),he))]).then(([e])=>e):Promise.resolve(i)).catch(e=>{throw n.delete(t),e}),n.set(t,r)}return r},o=(e,t,n=!1,r=!1)=>{let a=t?.code,o=a===`unknown-engine`||a===`protocol`;i({type:`error`,id:e,message:A(t),aborted:n||ee(t),...o?{code:a}:r&&{reason:`load`}})},s=async e=>{let t=new AbortController;r.set(e.id,t);let n=0,s=!0;try{if(!(e.file instanceof Blob))throw Ga(`malformed analyze request`,`protocol`);let r=await a(e.engine);if(s=!1,r.containers!==`any`){let t=await O(e.file);if(!t||!r.containers.includes(t))return i({type:`skipped`,id:e.id,reason:`unsupported-container`,family:t})}let o=await r.run(e.file,e.name,{...e.options,signal:t.signal,onProgress:t=>{let r=performance.now();r-n<50||(n=r,i({type:`progress`,id:e.id,progress:t}))}});i({type:`result`,id:e.id,result:o})}catch(n){o(e.id,n,t.signal.aborted,s)}finally{r.delete(e.id)}},c=async e=>{try{if(![e.engines,e.containers].every(Array.isArray)||!e.containers.every(Ka))throw Ga(`malformed warm request`,`protocol`);await Promise.all(e.engines.map(async t=>(await a(t)).warm?.(e.containers))),i({type:`warmed`,id:e.id})}catch(t){o(e.id,t,!1,!0)}};t.onmessage=({data:e})=>{if(e?.v!==1)return o(e?.id??0,Ga(`unsupported protocol version ${e?.v}`,`protocol`));if(e.type===`cancel`)r.get(e.id)?.abort();else if(e.type===`analyze`)s(e);else if(e.type===`warm`)c(e);else{let t=e;o(t.id,Ga(`unknown request type ${t.type}`,`protocol`))}}}qa({own:{run:(e,t,n)=>Wa(e,t,n),containers:`any`,warm:async e=>{await Promise.all(e.map(e=>Ha[e]()))}}})})();
|
package/dist/worker/runtime.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { EngineModule
|
|
2
|
-
export type EngineSource
|
|
1
|
+
import type { EngineModule } from '../plugins/types.js';
|
|
2
|
+
export { serveProbeWorker, type EngineSource } from './serve.js';
|
|
3
3
|
export declare const ownEngine: EngineModule;
|
|
4
|
-
export declare function serveProbeWorker(engines: Partial<Record<WorkerEngineId, EngineSource>>): void;
|
package/dist/worker/runtime.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { analyze, DEFAULT_LOADERS
|
|
2
|
-
|
|
3
|
-
import { PROTOCOL_VERSION } from "./protocol.js";
|
|
4
|
-
const PROGRESS_INTERVAL_MS = 50;
|
|
1
|
+
import { analyze, DEFAULT_LOADERS } from "../core/analyze.js";
|
|
2
|
+
export { serveProbeWorker } from "./serve.js";
|
|
5
3
|
export const ownEngine = {
|
|
6
4
|
run: (blob, name, opts) => analyze(blob, name, opts),
|
|
7
5
|
containers: 'any',
|
|
@@ -9,96 +7,3 @@ export const ownEngine = {
|
|
|
9
7
|
await Promise.all(containers.map((c) => DEFAULT_LOADERS[c]()));
|
|
10
8
|
},
|
|
11
9
|
};
|
|
12
|
-
const failure = (message, code) => Object.assign(new Error(message), { code });
|
|
13
|
-
const isFamily = (c) => c === 'isobmff' || c === 'matroska';
|
|
14
|
-
export function serveProbeWorker(engines) {
|
|
15
|
-
const ctx = self;
|
|
16
|
-
const loaded = new Map();
|
|
17
|
-
const running = new Map();
|
|
18
|
-
const post = (reply) => ctx.postMessage({ v: PROTOCOL_VERSION, ...reply });
|
|
19
|
-
const load = (id) => {
|
|
20
|
-
let module = loaded.get(id);
|
|
21
|
-
if (!module) {
|
|
22
|
-
const source = Object.hasOwn(engines, id) ? engines[id] : undefined;
|
|
23
|
-
if (!source)
|
|
24
|
-
return Promise.reject(failure(`unknown engine ${id}`, 'unknown-engine'));
|
|
25
|
-
module = (typeof source === 'function' ? Promise.all([source(), import("../core/stats.js")]).then(([m]) => m) : Promise.resolve(source)).catch((e) => {
|
|
26
|
-
loaded.delete(id);
|
|
27
|
-
throw e;
|
|
28
|
-
});
|
|
29
|
-
loaded.set(id, module);
|
|
30
|
-
}
|
|
31
|
-
return module;
|
|
32
|
-
};
|
|
33
|
-
const fail = (id, e, aborted = false, loading = false) => {
|
|
34
|
-
const code = e?.code;
|
|
35
|
-
const known = code === 'unknown-engine' || code === 'protocol';
|
|
36
|
-
post({
|
|
37
|
-
type: 'error',
|
|
38
|
-
id,
|
|
39
|
-
message: errorMessage(e),
|
|
40
|
-
aborted: aborted || isAbortError(e),
|
|
41
|
-
...(known ? { code } : loading && { reason: 'load' }),
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
const analyzeJob = async (job) => {
|
|
45
|
-
const controller = new AbortController();
|
|
46
|
-
running.set(job.id, controller);
|
|
47
|
-
let lastProgress = 0;
|
|
48
|
-
let loading = true;
|
|
49
|
-
try {
|
|
50
|
-
if (!(job.file instanceof Blob))
|
|
51
|
-
throw failure('malformed analyze request', 'protocol');
|
|
52
|
-
const engine = await load(job.engine);
|
|
53
|
-
loading = false;
|
|
54
|
-
if (engine.containers !== 'any') {
|
|
55
|
-
const family = await containerFamily(job.file);
|
|
56
|
-
if (!family || !engine.containers.includes(family))
|
|
57
|
-
return post({ type: 'skipped', id: job.id, reason: 'unsupported-container', family });
|
|
58
|
-
}
|
|
59
|
-
const result = await engine.run(job.file, job.name, {
|
|
60
|
-
...job.options,
|
|
61
|
-
signal: controller.signal,
|
|
62
|
-
onProgress: (progress) => {
|
|
63
|
-
const now = performance.now();
|
|
64
|
-
if (now - lastProgress < PROGRESS_INTERVAL_MS)
|
|
65
|
-
return;
|
|
66
|
-
lastProgress = now;
|
|
67
|
-
post({ type: 'progress', id: job.id, progress });
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
post({ type: 'result', id: job.id, result });
|
|
71
|
-
}
|
|
72
|
-
catch (e) {
|
|
73
|
-
fail(job.id, e, controller.signal.aborted, loading);
|
|
74
|
-
}
|
|
75
|
-
finally {
|
|
76
|
-
running.delete(job.id);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
const warmJob = async (job) => {
|
|
80
|
-
try {
|
|
81
|
-
if (![job.engines, job.containers].every(Array.isArray) || !job.containers.every(isFamily))
|
|
82
|
-
throw failure('malformed warm request', 'protocol');
|
|
83
|
-
await Promise.all(job.engines.map(async (id) => (await load(id)).warm?.(job.containers)));
|
|
84
|
-
post({ type: 'warmed', id: job.id });
|
|
85
|
-
}
|
|
86
|
-
catch (e) {
|
|
87
|
-
fail(job.id, e, false, true);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
ctx.onmessage = ({ data }) => {
|
|
91
|
-
if (data?.v !== PROTOCOL_VERSION)
|
|
92
|
-
return fail(data?.id ?? 0, failure(`unsupported protocol version ${data?.v}`, 'protocol'));
|
|
93
|
-
if (data.type === 'cancel')
|
|
94
|
-
running.get(data.id)?.abort();
|
|
95
|
-
else if (data.type === 'analyze')
|
|
96
|
-
void analyzeJob(data);
|
|
97
|
-
else if (data.type === 'warm')
|
|
98
|
-
void warmJob(data);
|
|
99
|
-
else {
|
|
100
|
-
const unknown = data;
|
|
101
|
-
fail(unknown.id, failure(`unknown request type ${unknown.type}`, 'protocol'));
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|