jassub 1.6.4 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -46,12 +46,13 @@ npm i jassub
46
46
  ```js
47
47
  import JASSUB from 'jassub'
48
48
  import workerUrl from 'jassub/dist/jassub-worker.js?url'
49
- import 'jassub/dist/jassub-worker.wasm?url'
49
+ import wasmUrl from 'jassub/dist/jassub-worker.wasm?url'
50
50
 
51
51
  const renderer = new JASSUB({
52
52
  video: document.querySelector('video'),
53
53
  subContent: subtitleString,
54
- workerUrl // you can also use: `new URL('jassub/dist/jassub-worker.js', import.meta.url)` instead of importing it as an url
54
+ workerUrl, // you can also use: `new URL('jassub/dist/jassub-worker.js', import.meta.url)` instead of importing it as an url
55
+ wasmUrl
55
56
  })
56
57
  ```
57
58
  ## Using only with canvas
@@ -99,8 +100,11 @@ The default options are best, and automatically fallback to the next fastest opt
99
100
  - `{Number} options.prescaleHeightLimit` { Optional = 1080 } The height in pixels beyond which the subtitles canvas won't be prescaled.
100
101
  - `{Number} options.maxRenderHeight` { Optional = 0 } The maximum rendering height in pixels of the subtitles canvas. Beyond this subtitles will be upscaled by the browser.
101
102
  - `{Boolean} options.dropAllAnimations` { Optional = false } Attempt to discard all animated tags. Enabling this may severly mangle complex subtitles and should only be considered as an last ditch effort of uncertain success for hardware otherwise incapable of displaing anything. Will not reliably work with manually edited or allocated events.
103
+ - `{Boolean} options.dropAllBlur` { Optional = false } The holy grail of performance gains. If heavy TS lags a lot, disabling this will make it ~x10 faster. This drops blur from all added subtitle tracks making most text and backgrounds look sharper, this is way less intrusive than dropping all animations, while still offering major performance gains.
102
104
  - `{String} options.workerUrl` { Optional = 'jassub-worker.js' } The URL of the worker.
103
- - `{String} options.legacyWorkerUrl` { Optional = 'jassub-worker-legacy.js' } The URL of the legacy worker. Only loaded if the browser doesn't support WASM.
105
+ - `{String} options.wasmUrl` { Optional = 'jassub-worker.wasm' } The URL of the worker WASM.
106
+ - `{String} options.legacyWasmUrl` { Optional = 'jassub-worker.wasm.js' } The URL of the legacy worker WASM. Only loaded if the browser doesn't support WASM.
107
+ - `{String} options.modernWasmUrl` { Optional } The URL of the modern worker WASM. This includes faster ASM instructions, but is only supported by newer browsers, disabled if the URL isn't defined.
104
108
  - `{String} [options.subUrl=options.subContent]` The URL of the subtitle file to play.
105
109
  - `{String} [options.subContent=options.subUrl]` The content of the subtitle file to play.
106
110
  - `{String[]|Uint8Array[]} options.fonts` { Optional } An array of links or Uint8Arrays to the fonts used in the subtitle. If Uint8Array is used the array is copied, not referenced. This forces all the fonts in this array to be loaded by the renderer, regardless of if they are used.
@@ -121,11 +125,12 @@ This library has a lot of methods and properties, however many aren't made for m
121
125
  - `busy` - Boolean which specifies if the renderer is currently busy.
122
126
  - `timeOffset` - -||-
123
127
  ### List of methods:
124
- - `resize(width = 0, height = 0, top = 0, left = 0)` - Resize the canvas to given parameters. Auto-generated if values are ommited.
128
+ - `resize(width = 0, height = 0, top = 0, left = 0, force)` - Resize the canvas to given parameters. Auto-generated if values are ommited.
125
129
  - {Number} [width=0]
126
130
  - {Number} [height=0]
127
131
  - {Number} [top=0]
128
132
  - {Number} [left=0]
133
+ - {Boolean} force
129
134
  - `setVideo(video)` - Change the video to use as target for event listeners.
130
135
  - {HTMLVideoElement} video
131
136
  - `setTrackByUrl(url)` - Overwrites the current subtitle content.
Binary file
@@ -1,15 +1,16 @@
1
- var Module=Module,out=r=>console.log(r),err=r=>console.error(r);function ready(){}self.assert||(self.assert=(r,t)=>{if(!r)throw t});String.prototype.startsWith||(String.prototype.startsWith=function(r,t){return t===void 0&&(t=0),this.substring(t,r.length)===r});String.prototype.includes||(String.prototype.includes=function(r,t){return this.indexOf(r,t)!==-1});if(!ArrayBuffer.isView){const r=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];ArrayBuffer.isView=t=>t&&t.constructor&&r.indexOf(t.constructor)!==-1}Uint8Array.prototype.slice||(Uint8Array.prototype.slice=function(r,t){return new Uint8Array(this.subarray(r,t))});Date.now||(Date.now=()=>new Date().getTime());"performance"in self||(self.performance={now:()=>Date.now()});if(typeof console>"u"){const r=(t,n)=>{postMessage({target:"console",command:t,content:JSON.stringify(Array.prototype.slice.call(n))})};console={log:function(){r("log",arguments)},debug:function(){r("debug",arguments)},info:function(){r("info",arguments)},warn:function(){r("warn",arguments)},error:function(){r("error",arguments)}},console.log("Detected lack of console, overridden console")}const read_=(r,t)=>{const n=new XMLHttpRequest;return n.open("GET",r,!1),n.responseType=t?"arraybuffer":"text",n.send(null),n.response},readAsync=(r,t,n)=>{const i=new XMLHttpRequest;i.open("GET",r,!0),i.responseType="arraybuffer",i.onload=()=>{if((i.status===200||i.status===0)&&i.response)return t(i.response);n()},i.onerror=n,i.send(null)};Module={wasm:WebAssembly&&!WebAssembly.instantiateStreaming&&read_("jassub-worker.wasm",!0)};try{const r=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(!(r instanceof WebAssembly.Module)||!(new WebAssembly.Instance(r)instanceof WebAssembly.Instance))throw new Error("WASM not supported")}catch(e){console.warn(e),eval(read_("jassub-worker.wasm.js"))}ready=()=>postMessage({target:"ready"});out=r=>{r==="JASSUB: No usable fontconfig configuration file found, using fallback."?console.debug(r):console.log(r)};err=r=>{r==="Fontconfig error: Cannot load default config file: No such file: (null)"?console.debug(r):console.error(r)};let lastCurrentTime=0;const rate=1;let rafId=null,nextIsRaf=!1,lastCurrentTimeReceivedAt=Date.now(),targetFps=24,useLocalFonts=!1,blendMode="js",availableFonts={};const fontMap_={};let fontId=0,debug;self.width=0;self.height=0;let asyncRender=!1;self.addFont=({font:r})=>asyncWrite(r);const findAvailableFonts=r=>{r=r.trim().toLowerCase(),r.startsWith("@")&&(r=r.substring(1)),!fontMap_[r]&&(fontMap_[r]=!0,availableFonts[r]?asyncWrite(availableFonts[r]):useLocalFonts&&postMessage({target:"getLocalFont",font:r}))},asyncWrite=r=>{ArrayBuffer.isView(r)?allocFont(r):readAsync(r,t=>{allocFont(new Uint8Array(t))},console.error)},allocFont=r=>{const t=_malloc(r.byteLength);HEAPU8.set(r,t),jassubObj.addFont("font-"+fontId++,t,r.byteLength),jassubObj.reloadFonts()},processAvailableFonts=r=>{if(!availableFonts)return;const t=parseAss(r);for(let s=0;s<t.length;s++)for(let l=0;l<t[s].body.length;l++)t[s].body[l].key==="Style"&&findAvailableFonts(t[s].body[l].value.Fontname);const n=/\\fn([^\\}]*?)[\\}]/g;let i;for(;(i=n.exec(r))!==null;)findAvailableFonts(i[1])};self.setTrack=({content:r})=>{processAvailableFonts(r),jassubObj.createTrackMem(r),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],postMessage({target:"verifyColorSpace",subtitleColorSpace})};self.getColorSpace=()=>postMessage({target:"verifyColorSpace",subtitleColorSpace});self.freeTrack=()=>{jassubObj.removeTrack()};self.setTrackByUrl=({url:r})=>{self.setTrack({content:read_(r)})};const getCurrentTime=()=>{const r=(Date.now()-lastCurrentTimeReceivedAt)/1e3;return _isPaused?lastCurrentTime:(r>5&&(console.error("Didn't received currentTime > 5 seconds. Assuming video was paused."),setIsPaused(!0)),lastCurrentTime+r*rate)},setCurrentTime=r=>{lastCurrentTime=r,lastCurrentTimeReceivedAt=Date.now(),rafId||(nextIsRaf?rafId=requestAnimationFrame(renderLoop):(renderLoop(),setTimeout(()=>{nextIsRaf=!1},20)))};let _isPaused=!0;const setIsPaused=r=>{r!==_isPaused&&(_isPaused=r,r?rafId&&(clearTimeout(rafId),rafId=null):(lastCurrentTimeReceivedAt=Date.now(),rafId=requestAnimationFrame(renderLoop)))},a="BT601",b="BT709",c="SMPTE240M",d="FCC",libassYCbCrMap=[null,a,null,a,a,b,b,c,c,d,d],render=(r,t)=>{const n={},i=performance.now(),s=blendMode==="wasm"?jassubObj.renderBlend(r,t||0):jassubObj.renderImage(r,t||0);if(debug){const l=performance.now(),u=jassubObj.time;n.WASMRenderTime=u-i,n.WASMBitmapDecodeTime=l-u,n.JSRenderTime=Date.now()}if(jassubObj.changed!==0||t){const l=[],u=[];if(!s)return paintImages({images:l,buffers:u,times:n});if(asyncRender){const o=[];for(let g=s,f=0;f<jassubObj.count;g=g.next,++f){const p={w:g.w,h:g.h,x:g.x,y:g.y},h=g.image;o.push(createImageBitmap(new ImageData(HEAPU8C.subarray(h,h+p.w*p.h*4),p.w,p.h))),l.push(p)}Promise.all(o).then(g=>{for(let f=0;f<l.length;f++)l[f].image=g[f];debug&&(n.JSBitmapGenerationTime=Date.now()-n.JSRenderTime),paintImages({images:l,buffers:g,times:n})})}else{for(let o=s,g=0;g<jassubObj.count;o=o.next,++g){const f={w:o.w,h:o.h,x:o.x,y:o.y,image:o.image};if(!offCanvasCtx){const p=wasmMemory.buffer.slice(o.image,o.image+o.w*o.h*4);u.push(p),f.image=p}l.push(f)}paintImages({images:l,buffers:u,times:n})}}else postMessage({target:"unbusy"})};self.demand=({time:r})=>{lastCurrentTime=r,render(r)};const renderLoop=r=>{rafId=0,render(getCurrentTime(),r),_isPaused||(rafId=requestAnimationFrame(renderLoop))},paintImages=({times:r,images:t,buffers:n})=>{const i={target:"render",asyncRender,images:t,times:r,width:self.width,height:self.height,colorSpace:subtitleColorSpace};if(offscreenRender){(offCanvas.height!==self.height||offCanvas.width!==self.width)&&(offCanvas.width=self.width,offCanvas.height=self.height),offCanvasCtx.clearRect(0,0,self.width,self.height);for(const s of t)s.image&&(asyncRender?(offCanvasCtx.drawImage(s.image,s.x,s.y),s.image.close()):(bufferCanvas.width=s.w,bufferCanvas.height=s.h,bufferCtx.putImageData(new ImageData(HEAPU8C.subarray(s.image,s.image+s.w*s.h*4),s.w,s.h),0,0),offCanvasCtx.drawImage(bufferCanvas,s.x,s.y)));if(offscreenRender==="hybrid"){if(!t.length)return postMessage(i);debug&&(r.bitmaps=t.length);try{const s=offCanvas.transferToImageBitmap();i.images=[{image:s,x:0,y:0}],i.asyncRender=!0,postMessage(i,[s])}catch{postMessage({target:"unbusy"})}}else{if(debug){r.JSRenderTime=Date.now()-r.JSRenderTime-(r.JSBitmapGenerationTime||0);let s=0;for(const l in r)s+=r[l];console.log("Bitmaps: "+t.length+" Total: "+(s|0)+"ms",r)}postMessage({target:"unbusy"})}}else postMessage(i,n)},parseAss=r=>{let t,n,i,s,l,u,o,g,f,p;const h=[],v=r.split(/[\r\n]+/g);for(g=0;g<v.length;g++)if(t=v[g].match(/^\[(.*)\]$/),t)n=null,h.push({name:t[1],body:[]});else{if(/^\s*$/.test(v[g])||h.length===0)continue;if(p=h[h.length-1].body,v[g][0]===";")p.push({type:"comment",value:v[g].substring(1)});else{if(s=v[g].split(":"),l=s[0],u=s.slice(1).join(":").trim(),(n||l==="Format")&&(u=u.split(","),n&&u.length>n.length&&(i=u.slice(n.length-1).join(","),u=u.slice(0,n.length-1),u.push(i)),u=u.map(m=>m.trim()),n)){for(o={},f=0;f<u.length;f++)o[n[f]]=u[f];u=o}l==="Format"&&(n=u),p.push({key:l,value:u})}}return h},requestAnimationFrame=(()=>{let r=0;return t=>{const n=Date.now();if(r===0)r=n+1e3/targetFps;else for(;n+2>=r;)r+=1e3/targetFps;const i=Math.max(r-n,0);return setTimeout(t,i)}})(),_applyKeys=(r,t)=>{for(const n of Object.keys(r))t[n]=r[n]};let offCanvas,offCanvasCtx,offscreenRender,bufferCanvas,bufferCtx,jassubObj,subtitleColorSpace;self.init=r=>{self.width=r.width,self.height=r.height,blendMode=r.blendMode,asyncRender=r.asyncRender,asyncRender&&typeof createImageBitmap>"u"&&(asyncRender=!1,console.error("'createImageBitmap' needed for 'asyncRender' unsupported!")),availableFonts=r.availableFonts,debug=r.debug,targetFps=r.targetFps||targetFps,useLocalFonts=r.useLocalFonts;const t=r.fallbackFont.toLowerCase();jassubObj=new Module.JASSUB(self.width,self.height,t||null,debug),t&&findAvailableFonts(t);let n=r.subContent;n||(n=read_(r.subUrl)),processAvailableFonts(n);for(const i of r.fonts||[])asyncWrite(i);jassubObj.createTrackMem(n),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],postMessage({target:"verifyColorSpace",subtitleColorSpace}),jassubObj.setDropAnimations(r.dropAllAnimations||0),(r.libassMemoryLimit>0||r.libassGlyphLimit>0)&&jassubObj.setMemoryLimits(r.libassGlyphLimit||0,r.libassMemoryLimit||0)};self.offscreenCanvas=({transferable:r})=>{offCanvas=r[0],offCanvasCtx=offCanvas.getContext("2d"),asyncRender||(bufferCanvas=new OffscreenCanvas(self.height,self.width),bufferCtx=bufferCanvas.getContext("2d",{desynchronized:!0})),offscreenRender=!0};self.detachOffscreen=()=>{offCanvas=new OffscreenCanvas(self.height,self.width),offCanvasCtx=offCanvas.getContext("2d",{desynchronized:!0}),offscreenRender="hybrid"};self.canvas=({width:r,height:t,force:n})=>{if(r==null)throw new Error("Invalid canvas size specified");self.width=r,self.height=t,jassubObj.resizeCanvas(r,t),n&&render(lastCurrentTime,!0)};self.video=({currentTime:r,isPaused:t,rate:n})=>{r!=null&&setCurrentTime(r),t!=null&&setIsPaused(t),n=n||n};self.destroy=()=>{jassubObj.quitLibrary()};self.createEvent=({event:r})=>{_applyKeys(r,jassubObj.getEvent(jassubObj.allocEvent()))};self.getEvents=()=>{const r=[];for(let t=0;t<jassubObj.getEventCount();t++){const{Start:n,Duration:i,ReadOrder:s,Layer:l,Style:u,MarginL:o,MarginR:g,MarginV:f,Name:p,Text:h,Effect:v}=jassubObj.getEvent(t);r.push({Start:n,Duration:i,ReadOrder:s,Layer:l,Style:u,MarginL:o,MarginR:g,MarginV:f,Name:p,Text:h,Effect:v})}postMessage({target:"getEvents",events:r})};self.setEvent=({event:r,index:t})=>{_applyKeys(r,jassubObj.getEvent(t))};self.removeEvent=({index:r})=>{jassubObj.removeEvent(r)};self.createStyle=({style:r})=>{_applyKeys(r,jassubObj.getStyle(jassubObj.allocStyle()))};self.getStyles=()=>{const r=[];for(let t=0;t<jassubObj.getStyleCount();t++){const{Name:n,FontName:i,FontSize:s,PrimaryColour:l,SecondaryColour:u,OutlineColour:o,BackColour:g,Bold:f,Italic:p,Underline:h,StrikeOut:v,ScaleX:m,ScaleY:y,Spacing:w,Angle:_,BorderStyle:T,Outline:P,Shadow:C,Alignment:S,MarginL:E,MarginR:A,MarginV:F,Encoding:$,treat_fontname_as_pattern:M,Blur:U,Justify:H}=jassubObj.getStyle(t);r.push({Name:n,FontName:i,FontSize:s,PrimaryColour:l,SecondaryColour:u,OutlineColour:o,BackColour:g,Bold:f,Italic:p,Underline:h,StrikeOut:v,ScaleX:m,ScaleY:y,Spacing:w,Angle:_,BorderStyle:T,Outline:P,Shadow:C,Alignment:S,MarginL:E,MarginR:A,MarginV:F,Encoding:$,treat_fontname_as_pattern:M,Blur:U,Justify:H})}postMessage({target:"getStyles",time:Date.now(),styles:r})};self.setStyle=({style:r,index:t})=>{_applyKeys(r,jassubObj.getStyle(t))};self.removeStyle=({index:r})=>{jassubObj.removeStyle(r)};onmessage=({data:r})=>{if(self[r.target])self[r.target](r);else throw new Error("Unknown event target "+r.target)};let HEAPU8C=null;updateMemoryViews=(r=>()=>{r(),HEAPU8C=new Uint8ClampedArray(wasmMemory.buffer)})(updateMemoryViews);function abort(r){throw r}var HEAP8,HEAP16,HEAP32,HEAPU8,HEAPU16,HEAPU32,HEAPF32,HEAPF64,wasmMemory,wasmTable;function updateMemoryViews(){var r=wasmMemory.buffer;HEAP8=new Int8Array(r),HEAP16=new Int16Array(r),HEAP32=new Int32Array(r),HEAPU8=new Uint8Array(r),HEAPU16=new Uint16Array(r),HEAPU32=new Uint32Array(r),HEAPF32=new Float32Array(r),HEAPF64=new Float64Array(r)}wasmMemory=new WebAssembly.Memory({initial:256,maximum:32768});updateMemoryViews();(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=(r,t)=>{var n=r>>>16,i=r&65535,s=t>>>16,l=t&65535;return i*l+(n*l+i*s<<16)|0});if(!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=r=>(froundBuffer[0]=r,froundBuffer[0])}Math.clz32||(Math.clz32=r=>{var t=32,n=r>>16;return n&&(t-=16,r=n),n=r>>8,n&&(t-=8,r=n),n=r>>4,n&&(t-=4,r=n),n=r>>2,n&&(t-=2,r=n),n=r>>1,n?t-2:t-r});Math.trunc||(Math.trunc=r=>r<0?Math.ceil(r):Math.floor(r));var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(r,t,n){for(var i=t+n,s=t;r[s]&&!(s>=i);)++s;if(s-t>16&&r.buffer&&UTF8Decoder)return UTF8Decoder.decode(r.subarray(t,s));for(var l="";t<s;){var u=r[t++];if(!(u&128)){l+=String.fromCharCode(u);continue}var o=r[t++]&63;if((u&224)==192){l+=String.fromCharCode((u&31)<<6|o);continue}var g=r[t++]&63;if((u&240)==224?u=(u&15)<<12|o<<6|g:u=(u&7)<<18|o<<12|g<<6|r[t++]&63,u<65536)l+=String.fromCharCode(u);else{var f=u-65536;l+=String.fromCharCode(55296|f>>10,56320|f&1023)}}return l}function UTF8ToString(r,t){return r?UTF8ArrayToString(HEAPU8,r,t):""}function ___assert_fail(r,t,n,i){abort(`Assertion failed: ${UTF8ToString(r)}, at: `+[t?UTF8ToString(t):"unknown filename",n,i?UTF8ToString(i):"unknown function"])}function ___syscall_fcntl64(r,t,n){return 0}function stringToUTF8Array(r,t,n,i){if(!(i>0))return 0;for(var s=n,l=n+i-1,u=0;u<r.length;++u){var o=r.charCodeAt(u);if(o>=55296&&o<=57343){var g=r.charCodeAt(++u);o=65536+((o&1023)<<10)|g&1023}if(o<=127){if(n>=l)break;t[n++]=o}else if(o<=2047){if(n+1>=l)break;t[n++]=192|o>>6,t[n++]=128|o&63}else if(o<=65535){if(n+2>=l)break;t[n++]=224|o>>12,t[n++]=128|o>>6&63,t[n++]=128|o&63}else{if(n+3>=l)break;t[n++]=240|o>>18,t[n++]=128|o>>12&63,t[n++]=128|o>>6&63,t[n++]=128|o&63}}return t[n]=0,n-s}function stringToUTF8(r,t,n){return stringToUTF8Array(r,HEAPU8,t,n)}function ___syscall_getdents64(r,t,n){}function ___syscall_ioctl(r,t,n){return 0}function ___syscall_openat(r,t,n,i){}function __embind_register_bigint(r,t,n,i,s){}function getShiftFromSize(r){switch(r){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+r)}}function embind_init_charCodes(){for(var r=new Array(256),t=0;t<256;++t)r[t]=String.fromCharCode(t);embind_charCodes=r}var embind_charCodes=void 0;function readLatin1String(r){for(var t="",n=r;HEAPU8[n];)t+=embind_charCodes[HEAPU8[n++]];return t}var awaitingDependencies={},registeredTypes={},typeDependencies={},char_0=48,char_9=57;function makeLegalFunctionName(r){if(r===void 0)return"_unknown";r=r.replace(/[^a-zA-Z0-9_]/g,"$");var t=r.charCodeAt(0);return t>=char_0&&t<=char_9?"_"+r:r}function createNamedFunction(r,t){return r=makeLegalFunctionName(r),{[r]:function(){return t.apply(this,arguments)}}[r]}function extendError(r,t){var n=createNamedFunction(t,function(i){this.name=t,this.message=i;var s=new Error(i).stack;s!==void 0&&(this.stack=this.toString()+`
2
- `+s.replace(/^Error(:[^\n]*)?\n/,""))});return n.prototype=Object.create(r.prototype),n.prototype.constructor=n,n.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},n}var BindingError=void 0;function throwBindingError(r){throw new BindingError(r)}var InternalError=void 0;function throwInternalError(r){throw new InternalError(r)}function whenDependentTypesAreResolved(r,t,n){r.forEach(function(o){typeDependencies[o]=t});function i(o){var g=n(o);g.length!==r.length&&throwInternalError("Mismatched type converter count");for(var f=0;f<r.length;++f)registerType(r[f],g[f])}var s=new Array(t.length),l=[],u=0;t.forEach((o,g)=>{registeredTypes.hasOwnProperty(o)?s[g]=registeredTypes[o]:(l.push(o),awaitingDependencies.hasOwnProperty(o)||(awaitingDependencies[o]=[]),awaitingDependencies[o].push(()=>{s[g]=registeredTypes[o],++u,u===l.length&&i(s)}))}),l.length===0&&i(s)}function registerType(r,t,n={}){if(!("argPackAdvance"in t))throw new TypeError("registerType registeredInstance requires argPackAdvance");var i=t.name;if(r||throwBindingError(`type "${i}" must have a positive integer typeid pointer`),registeredTypes.hasOwnProperty(r)){if(n.ignoreDuplicateRegistrations)return;throwBindingError(`Cannot register type '${i}' twice`)}if(registeredTypes[r]=t,delete typeDependencies[r],awaitingDependencies.hasOwnProperty(r)){var s=awaitingDependencies[r];delete awaitingDependencies[r],s.forEach(l=>l())}}function __embind_register_bool(r,t,n,i,s){var l=getShiftFromSize(n);t=readLatin1String(t),registerType(r,{name:t,fromWireType:function(u){return!!u},toWireType:function(u,o){return o?i:s},argPackAdvance:8,readValueFromPointer:function(u){var o;if(n===1)o=HEAP8;else if(n===2)o=HEAP16;else if(n===4)o=HEAP32;else throw new TypeError("Unknown boolean type size: "+t);return this.fromWireType(o[u>>l])},destructorFunction:null})}function ClassHandle_isAliasOf(r){if(!(this instanceof ClassHandle)||!(r instanceof ClassHandle))return!1;for(var t=this.$$.ptrType.registeredClass,n=this.$$.ptr,i=r.$$.ptrType.registeredClass,s=r.$$.ptr;t.baseClass;)n=t.upcast(n),t=t.baseClass;for(;i.baseClass;)s=i.upcast(s),i=i.baseClass;return t===i&&n===s}function shallowCopyInternalPointer(r){return{count:r.count,deleteScheduled:r.deleteScheduled,preservePointerOnDelete:r.preservePointerOnDelete,ptr:r.ptr,ptrType:r.ptrType,smartPtr:r.smartPtr,smartPtrType:r.smartPtrType}}function throwInstanceAlreadyDeleted(r){function t(n){return n.$$.ptrType.registeredClass.name}throwBindingError(t(r)+" instance already deleted")}var finalizationRegistry=!1;function detachFinalizer(r){}function runDestructor(r){r.smartPtr?r.smartPtrType.rawDestructor(r.smartPtr):r.ptrType.registeredClass.rawDestructor(r.ptr)}function releaseClassHandle(r){r.count.value-=1;var t=r.count.value===0;t&&runDestructor(r)}function downcastPointer(r,t,n){if(t===n)return r;if(n.baseClass===void 0)return null;var i=downcastPointer(r,t,n.baseClass);return i===null?null:n.downcast(i)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var r=[];for(var t in registeredInstances)registeredInstances.hasOwnProperty(t)&&r.push(registeredInstances[t]);return r}var deletionQueue=[];function flushPendingDeletes(){for(;deletionQueue.length;){var r=deletionQueue.pop();r.$$.deleteScheduled=!1,r.delete()}}var delayFunction=void 0;function setDelayFunction(r){delayFunction=r,deletionQueue.length&&delayFunction&&delayFunction(flushPendingDeletes)}function init_embind(){Module.getInheritedInstanceCount=getInheritedInstanceCount,Module.getLiveInheritedInstances=getLiveInheritedInstances,Module.flushPendingDeletes=flushPendingDeletes,Module.setDelayFunction=setDelayFunction}var registeredInstances={};function getBasestPointer(r,t){for(t===void 0&&throwBindingError("ptr should not be undefined");r.baseClass;)t=r.upcast(t),r=r.baseClass;return t}function getInheritedInstance(r,t){return t=getBasestPointer(r,t),registeredInstances[t]}function makeClassHandle(r,t){(!t.ptrType||!t.ptr)&&throwInternalError("makeClassHandle requires ptr and ptrType");var n=!!t.smartPtrType,i=!!t.smartPtr;return n!==i&&throwInternalError("Both smartPtrType and smartPtr must be specified"),t.count={value:1},attachFinalizer(Object.create(r,{$$:{value:t}}))}function RegisteredPointer_fromWireType(r){var t=this.getPointee(r);if(!t)return this.destructor(r),null;var n=getInheritedInstance(this.registeredClass,t);if(n!==void 0){if(n.$$.count.value===0)return n.$$.ptr=t,n.$$.smartPtr=r,n.clone();var i=n.clone();return this.destructor(r),i}function s(){return this.isSmartPointer?makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:t,smartPtrType:this,smartPtr:r}):makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:r})}var l=this.registeredClass.getActualType(t),u=registeredPointers[l];if(!u)return s.call(this);var o;this.isConst?o=u.constPointerType:o=u.pointerType;var g=downcastPointer(t,this.registeredClass,o.registeredClass);return g===null?s.call(this):this.isSmartPointer?makeClassHandle(o.registeredClass.instancePrototype,{ptrType:o,ptr:g,smartPtrType:this,smartPtr:r}):makeClassHandle(o.registeredClass.instancePrototype,{ptrType:o,ptr:g})}function attachFinalizer(r){return typeof FinalizationRegistry>"u"?(attachFinalizer=t=>t,r):(finalizationRegistry=new FinalizationRegistry(t=>{releaseClassHandle(t.$$)}),attachFinalizer=t=>{var n=t.$$,i=!!n.smartPtr;if(i){var s={$$:n};finalizationRegistry.register(t,s,t)}return t},detachFinalizer=t=>finalizationRegistry.unregister(t),attachFinalizer(r))}function ClassHandle_clone(){if(this.$$.ptr||throwInstanceAlreadyDeleted(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var r=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));return r.$$.count.value+=1,r.$$.deleteScheduled=!1,r}function ClassHandle_delete(){this.$$.ptr||throwInstanceAlreadyDeleted(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&throwBindingError("Object already scheduled for deletion"),detachFinalizer(this),releaseClassHandle(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){return this.$$.ptr||throwInstanceAlreadyDeleted(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&throwBindingError("Object already scheduled for deletion"),deletionQueue.push(this),deletionQueue.length===1&&delayFunction&&delayFunction(flushPendingDeletes),this.$$.deleteScheduled=!0,this}function init_ClassHandle(){ClassHandle.prototype.isAliasOf=ClassHandle_isAliasOf,ClassHandle.prototype.clone=ClassHandle_clone,ClassHandle.prototype.delete=ClassHandle_delete,ClassHandle.prototype.isDeleted=ClassHandle_isDeleted,ClassHandle.prototype.deleteLater=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(r,t,n){if(r[t].overloadTable===void 0){var i=r[t];r[t]=function(){return r[t].overloadTable.hasOwnProperty(arguments.length)||throwBindingError(`Function '${n}' called with an invalid number of arguments (${arguments.length}) - expects one of (${r[t].overloadTable})!`),r[t].overloadTable[arguments.length].apply(this,arguments)},r[t].overloadTable=[],r[t].overloadTable[i.argCount]=i}}function exposePublicSymbol(r,t,n){Module.hasOwnProperty(r)?((n===void 0||Module[r].overloadTable!==void 0&&Module[r].overloadTable[n]!==void 0)&&throwBindingError(`Cannot register public name '${r}' twice`),ensureOverloadTable(Module,r,r),Module.hasOwnProperty(n)&&throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${n})!`),Module[r].overloadTable[n]=t):(Module[r]=t,n!==void 0&&(Module[r].numArguments=n))}function RegisteredClass(r,t,n,i,s,l,u,o){this.name=r,this.constructor=t,this.instancePrototype=n,this.rawDestructor=i,this.baseClass=s,this.getActualType=l,this.upcast=u,this.downcast=o,this.pureVirtualFunctions=[]}function upcastPointer(r,t,n){for(;t!==n;)t.upcast||throwBindingError(`Expected null or instance of ${n.name}, got an instance of ${t.name}`),r=t.upcast(r),t=t.baseClass;return r}function constNoSmartPtrRawPointerToWireType(r,t){if(t===null)return this.isReference&&throwBindingError("null is not a valid "+this.name),0;t.$$||throwBindingError(`Cannot pass "${embindRepr(t)}" as a ${this.name}`),t.$$.ptr||throwBindingError("Cannot pass deleted object as a pointer of type "+this.name);var n=t.$$.ptrType.registeredClass,i=upcastPointer(t.$$.ptr,n,this.registeredClass);return i}function genericPointerToWireType(r,t){var n;if(t===null)return this.isReference&&throwBindingError("null is not a valid "+this.name),this.isSmartPointer?(n=this.rawConstructor(),r!==null&&r.push(this.rawDestructor,n),n):0;t.$$||throwBindingError(`Cannot pass "${embindRepr(t)}" as a ${this.name}`),t.$$.ptr||throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&t.$$.ptrType.isConst&&throwBindingError(`Cannot convert argument of type ${t.$$.smartPtrType?t.$$.smartPtrType.name:t.$$.ptrType.name} to parameter type ${this.name}`);var i=t.$$.ptrType.registeredClass;if(n=upcastPointer(t.$$.ptr,i,this.registeredClass),this.isSmartPointer)switch(t.$$.smartPtr===void 0&&throwBindingError("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:t.$$.smartPtrType===this?n=t.$$.smartPtr:throwBindingError(`Cannot convert argument of type ${t.$$.smartPtrType?t.$$.smartPtrType.name:t.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:n=t.$$.smartPtr;break;case 2:if(t.$$.smartPtrType===this)n=t.$$.smartPtr;else{var s=t.clone();n=this.rawShare(n,Emval.toHandle(function(){s.delete()})),r!==null&&r.push(this.rawDestructor,n)}break;default:throwBindingError("Unsupporting sharing policy")}return n}function nonConstNoSmartPtrRawPointerToWireType(r,t){if(t===null)return this.isReference&&throwBindingError("null is not a valid "+this.name),0;t.$$||throwBindingError(`Cannot pass "${embindRepr(t)}" as a ${this.name}`),t.$$.ptr||throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`),t.$$.ptrType.isConst&&throwBindingError(`Cannot convert argument of type ${t.$$.ptrType.name} to parameter type ${this.name}`);var n=t.$$.ptrType.registeredClass,i=upcastPointer(t.$$.ptr,n,this.registeredClass);return i}function simpleReadValueFromPointer(r){return this.fromWireType(HEAP32[r>>2])}function RegisteredPointer_getPointee(r){return this.rawGetPointee&&(r=this.rawGetPointee(r)),r}function RegisteredPointer_destructor(r){this.rawDestructor&&this.rawDestructor(r)}function RegisteredPointer_deleteObject(r){r!==null&&r.delete()}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee,RegisteredPointer.prototype.destructor=RegisteredPointer_destructor,RegisteredPointer.prototype.argPackAdvance=8,RegisteredPointer.prototype.readValueFromPointer=simpleReadValueFromPointer,RegisteredPointer.prototype.deleteObject=RegisteredPointer_deleteObject,RegisteredPointer.prototype.fromWireType=RegisteredPointer_fromWireType}function RegisteredPointer(r,t,n,i,s,l,u,o,g,f,p){this.name=r,this.registeredClass=t,this.isReference=n,this.isConst=i,this.isSmartPointer=s,this.pointeeType=l,this.sharingPolicy=u,this.rawGetPointee=o,this.rawConstructor=g,this.rawShare=f,this.rawDestructor=p,!s&&t.baseClass===void 0?i?(this.toWireType=constNoSmartPtrRawPointerToWireType,this.destructorFunction=null):(this.toWireType=nonConstNoSmartPtrRawPointerToWireType,this.destructorFunction=null):this.toWireType=genericPointerToWireType}function replacePublicSymbol(r,t,n){Module.hasOwnProperty(r)||throwInternalError("Replacing nonexistant public symbol"),Module[r].overloadTable!==void 0&&n!==void 0?Module[r].overloadTable[n]=t:(Module[r]=t,Module[r].argCount=n)}function dynCallLegacy(r,t,n){var i=dynCalls[r];return n&&n.length?i.apply(null,[t].concat(n)):i.call(null,t)}var wasmTableMirror=[];function getWasmTableEntry(r){var t=wasmTableMirror[r];return t||(r>=wasmTableMirror.length&&(wasmTableMirror.length=r+1),wasmTableMirror[r]=t=wasmTable.get(r)),t}function dynCall(r,t,n){if(r.includes("j"))return dynCallLegacy(r,t,n);var i=getWasmTableEntry(t).apply(null,n);return i}function getDynCaller(r,t){var n=[];return function(){return n.length=0,Object.assign(n,arguments),dynCall(r,t,n)}}function embind__requireFunction(r,t){r=readLatin1String(r);function n(){return r.includes("j")?getDynCaller(r,t):getWasmTableEntry(t)}var i=n();return typeof i!="function"&&throwBindingError(`unknown function pointer with signature ${r}: ${t}`),i}var UnboundTypeError=void 0;function getTypeName(r){var t=___getTypeName(r),n=readLatin1String(t);return _free(t),n}function throwUnboundTypeError(r,t){var n=[],i={};function s(l){if(!i[l]&&!registeredTypes[l]){if(typeDependencies[l]){typeDependencies[l].forEach(s);return}n.push(l),i[l]=!0}}throw t.forEach(s),new UnboundTypeError(r+": "+n.map(getTypeName).join([", "]))}function __embind_register_class(r,t,n,i,s,l,u,o,g,f,p,h,v){p=readLatin1String(p),l=embind__requireFunction(s,l),o&&(o=embind__requireFunction(u,o)),f&&(f=embind__requireFunction(g,f)),v=embind__requireFunction(h,v);var m=makeLegalFunctionName(p);exposePublicSymbol(m,function(){throwUnboundTypeError(`Cannot construct ${p} due to unbound types`,[i])}),whenDependentTypesAreResolved([r,t,n],i?[i]:[],function(y){y=y[0];var w,_;i?(w=y.registeredClass,_=w.instancePrototype):_=ClassHandle.prototype;var T=createNamedFunction(m,function(){if(Object.getPrototypeOf(this)!==P)throw new BindingError("Use 'new' to construct "+p);if(C.constructor_body===void 0)throw new BindingError(p+" has no accessible constructor");var F=C.constructor_body[arguments.length];if(F===void 0)throw new BindingError(`Tried to invoke ctor of ${p} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(C.constructor_body).toString()}) parameters instead!`);return F.apply(this,arguments)}),P=Object.create(_,{constructor:{value:T}});T.prototype=P;var C=new RegisteredClass(p,T,P,v,w,l,o,f);C.baseClass&&(C.baseClass.__derivedClasses===void 0&&(C.baseClass.__derivedClasses=[]),C.baseClass.__derivedClasses.push(C));var S=new RegisteredPointer(p,C,!0,!1,!1),E=new RegisteredPointer(p+"*",C,!1,!1,!1),A=new RegisteredPointer(p+" const*",C,!1,!0,!1);return registeredPointers[r]={pointerType:E,constPointerType:A},replacePublicSymbol(m,T),[S,E,A]})}function heap32VectorToArray(r,t){for(var n=[],i=0;i<r;i++)n.push(HEAPU32[t+i*4>>2]);return n}function runDestructors(r){for(;r.length;){var t=r.pop(),n=r.pop();n(t)}}function newFunc(r,t){if(!(r instanceof Function))throw new TypeError(`new_ called with constructor type ${typeof r} which is not a function`);var n=createNamedFunction(r.name||"unknownFunctionName",function(){});n.prototype=r.prototype;var i=new n,s=r.apply(i,t);return s instanceof Object?s:i}function craftInvokerFunction(r,t,n,i,s,l){var u=t.length;u<2&&throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var o=t[1]!==null&&n!==null,g=!1,f=1;f<t.length;++f)if(t[f]!==null&&t[f].destructorFunction===void 0){g=!0;break}for(var p=t[0].name!=="void",h="",v="",f=0;f<u-2;++f)h+=(f!==0?", ":"")+"arg"+f,v+=(f!==0?", ":"")+"arg"+f+"Wired";var m="return function "+makeLegalFunctionName(r)+"("+h+`) {
3
- if (arguments.length !== `+(u-2)+`) {
4
- throwBindingError('function `+r+" called with ' + arguments.length + ' arguments, expected "+(u-2)+` args!');
5
- }
6
- `;g&&(m+=`var destructors = [];
7
- `);var y=g?"destructors":"null",w=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],_=[throwBindingError,i,s,runDestructors,t[0],t[1]];o&&(m+="var thisWired = classParam.toWireType("+y+`, this);
8
- `);for(var f=0;f<u-2;++f)m+="var arg"+f+"Wired = argType"+f+".toWireType("+y+", arg"+f+"); // "+t[f+2].name+`
9
- `,w.push("argType"+f),_.push(t[f+2]);if(o&&(v="thisWired"+(v.length>0?", ":"")+v),m+=(p||l?"var rv = ":"")+"invoker(fn"+(v.length>0?", ":"")+v+`);
10
- `,g)m+=`runDestructors(destructors);
11
- `;else for(var f=o?1:2;f<t.length;++f){var T=f===1?"thisWired":"arg"+(f-2)+"Wired";t[f].destructorFunction!==null&&(m+=T+"_dtor("+T+"); // "+t[f].name+`
12
- `,w.push(T+"_dtor"),_.push(t[f].destructorFunction))}return p&&(m+=`var ret = retType.fromWireType(rv);
13
- return ret;
14
- `),m+=`}
15
- `,w.push(m),newFunc(Function,w).apply(null,_)}function __embind_register_class_constructor(r,t,n,i,s,l){assert(t>0);var u=heap32VectorToArray(t,n);s=embind__requireFunction(i,s),whenDependentTypesAreResolved([],[r],function(o){o=o[0];var g="constructor "+o.name;if(o.registeredClass.constructor_body===void 0&&(o.registeredClass.constructor_body=[]),o.registeredClass.constructor_body[t-1]!==void 0)throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${t-1}) for class '${o.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return o.registeredClass.constructor_body[t-1]=()=>{throwUnboundTypeError(`Cannot construct ${o.name} due to unbound types`,u)},whenDependentTypesAreResolved([],u,function(f){return f.splice(1,0,null),o.registeredClass.constructor_body[t-1]=craftInvokerFunction(g,f,null,s,l),[]}),[]})}function __embind_register_class_function(r,t,n,i,s,l,u,o,g){var f=heap32VectorToArray(n,i);t=readLatin1String(t),l=embind__requireFunction(s,l),whenDependentTypesAreResolved([],[r],function(p){p=p[0];var h=p.name+"."+t;t.startsWith("@@")&&(t=Symbol[t.substring(2)]),o&&p.registeredClass.pureVirtualFunctions.push(t);function v(){throwUnboundTypeError(`Cannot call ${h} due to unbound types`,f)}var m=p.registeredClass.instancePrototype,y=m[t];return y===void 0||y.overloadTable===void 0&&y.className!==p.name&&y.argCount===n-2?(v.argCount=n-2,v.className=p.name,m[t]=v):(ensureOverloadTable(m,t,h),m[t].overloadTable[n-2]=v),whenDependentTypesAreResolved([],f,function(w){var _=craftInvokerFunction(h,w,p,l,u,g);return m[t].overloadTable===void 0?(_.argCount=n-2,m[t]=_):m[t].overloadTable[n-2]=_,[]}),[]})}function validateThis(r,t,n){return r instanceof Object||throwBindingError(n+' with invalid "this": '+r),r instanceof t.registeredClass.constructor||throwBindingError(n+' incompatible with "this" of type '+r.constructor.name),r.$$.ptr||throwBindingError(`cannot call emscripten binding method ${n} on deleted object`),upcastPointer(r.$$.ptr,r.$$.ptrType.registeredClass,t.registeredClass)}function __embind_register_class_property(r,t,n,i,s,l,u,o,g,f){t=readLatin1String(t),s=embind__requireFunction(i,s),whenDependentTypesAreResolved([],[r],function(p){p=p[0];var h=p.name+"."+t,v={get:function(){throwUnboundTypeError(`Cannot access ${h} due to unbound types`,[n,u])},enumerable:!0,configurable:!0};return g?v.set=()=>{throwUnboundTypeError(`Cannot access ${h} due to unbound types`,[n,u])}:v.set=m=>{throwBindingError(h+" is a read-only property")},Object.defineProperty(p.registeredClass.instancePrototype,t,v),whenDependentTypesAreResolved([],g?[n,u]:[n],function(m){var y=m[0],w={get:function(){var T=validateThis(this,p,h+" getter");return y.fromWireType(s(l,T))},enumerable:!0};if(g){g=embind__requireFunction(o,g);var _=m[1];w.set=function(T){var P=validateThis(this,p,h+" setter"),C=[];g(f,P,_.toWireType(C,T)),runDestructors(C)}}return Object.defineProperty(p.registeredClass.instancePrototype,t,w),[]}),[]})}function HandleAllocator(){this.allocated=[void 0],this.freelist=[],this.get=function(r){return this.allocated[r]},this.allocate=function(r){var t=this.freelist.pop()||this.allocated.length;return this.allocated[t]=r,t},this.free=function(r){this.allocated[r]=void 0,this.freelist.push(r)}}var emval_handles=new HandleAllocator;function __emval_decref(r){r>=emval_handles.reserved&&--emval_handles.get(r).refcount===0&&emval_handles.free(r)}function count_emval_handles(){for(var r=0,t=emval_handles.reserved;t<emval_handles.allocated.length;++t)emval_handles.allocated[t]!==void 0&&++r;return r}function init_emval(){emval_handles.allocated.push({value:void 0},{value:null},{value:!0},{value:!1}),emval_handles.reserved=emval_handles.allocated.length,Module.count_emval_handles=count_emval_handles}var Emval={toValue:r=>(r||throwBindingError("Cannot use deleted val. handle = "+r),emval_handles.get(r).value),toHandle:r=>{switch(r){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:return emval_handles.allocate({refcount:1,value:r})}}};function __embind_register_emval(r,t){t=readLatin1String(t),registerType(r,{name:t,fromWireType:function(n){var i=Emval.toValue(n);return __emval_decref(n),i},toWireType:function(n,i){return Emval.toHandle(i)},argPackAdvance:8,readValueFromPointer:simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(r){if(r===null)return"null";var t=typeof r;return t==="object"||t==="array"||t==="function"?r.toString():""+r}function floatReadValueFromPointer(r,t){switch(t){case 2:return function(n){return this.fromWireType(HEAPF32[n>>2])};case 3:return function(n){return this.fromWireType(HEAPF64[n>>3])};default:throw new TypeError("Unknown float type: "+r)}}function __embind_register_float(r,t,n){var i=getShiftFromSize(n);t=readLatin1String(t),registerType(r,{name:t,fromWireType:function(s){return s},toWireType:function(s,l){return l},argPackAdvance:8,readValueFromPointer:floatReadValueFromPointer(t,i),destructorFunction:null})}function integerReadValueFromPointer(r,t,n){switch(t){case 0:return n?function(s){return HEAP8[s]}:function(s){return HEAPU8[s]};case 1:return n?function(s){return HEAP16[s>>1]}:function(s){return HEAPU16[s>>1]};case 2:return n?function(s){return HEAP32[s>>2]}:function(s){return HEAPU32[s>>2]};default:throw new TypeError("Unknown integer type: "+r)}}function __embind_register_integer(r,t,n,i,s){t=readLatin1String(t);var l=getShiftFromSize(n),u=h=>h;if(i===0){var o=32-8*n;u=h=>h<<o>>>o}var g=t.includes("unsigned"),f=(h,v)=>{},p;g?p=function(h,v){return f(v,this.name),v>>>0}:p=function(h,v){return f(v,this.name),v},registerType(r,{name:t,fromWireType:u,toWireType:p,argPackAdvance:8,readValueFromPointer:integerReadValueFromPointer(t,l,i!==0),destructorFunction:null})}function __embind_register_memory_view(r,t,n){var i=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],s=i[t];function l(u){u=u>>2;var o=HEAPU32,g=o[u],f=o[u+1];return new s(o.buffer,f,g)}n=readLatin1String(n),registerType(r,{name:n,fromWireType:l,argPackAdvance:8,readValueFromPointer:l},{ignoreDuplicateRegistrations:!0})}function lengthBytesUTF8(r){for(var t=0,n=0;n<r.length;++n){var i=r.charCodeAt(n);i<=127?t++:i<=2047?t+=2:i>=55296&&i<=57343?(t+=4,++n):t+=3}return t}function __embind_register_std_string(r,t){t=readLatin1String(t);var n=t==="std::string";registerType(r,{name:t,fromWireType:function(i){var s=HEAPU32[i>>2],l=i+4,u;if(n)for(var o=l,g=0;g<=s;++g){var f=l+g;if(g==s||HEAPU8[f]==0){var p=f-o,h=UTF8ToString(o,p);u===void 0?u=h:(u+=String.fromCharCode(0),u+=h),o=f+1}}else{for(var v=new Array(s),g=0;g<s;++g)v[g]=String.fromCharCode(HEAPU8[l+g]);u=v.join("")}return _free(i),u},toWireType:function(i,s){s instanceof ArrayBuffer&&(s=new Uint8Array(s));var l,u=typeof s=="string";u||s instanceof Uint8Array||s instanceof Uint8ClampedArray||s instanceof Int8Array||throwBindingError("Cannot pass non-string to std::string"),n&&u?l=lengthBytesUTF8(s):l=s.length;var o=_malloc(4+l+1),g=o+4;if(HEAPU32[o>>2]=l,n&&u)stringToUTF8(s,g,l+1);else if(u)for(var f=0;f<l;++f){var p=s.charCodeAt(f);p>255&&(_free(g),throwBindingError("String has UTF-16 code units that do not fit in 8 bits")),HEAPU8[g+f]=p}else for(var f=0;f<l;++f)HEAPU8[g+f]=s[f];return i!==null&&i.push(_free,o),o},argPackAdvance:8,readValueFromPointer:simpleReadValueFromPointer,destructorFunction:function(i){_free(i)}})}var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function UTF16ToString(r,t){for(var n=r,i=n>>1,s=i+t/2;!(i>=s)&&HEAPU16[i];)++i;if(n=i<<1,n-r>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(r,n));for(var l="",u=0;!(u>=t/2);++u){var o=HEAP16[r+u*2>>1];if(o==0)break;l+=String.fromCharCode(o)}return l}function stringToUTF16(r,t,n){if(n===void 0&&(n=2147483647),n<2)return 0;n-=2;for(var i=t,s=n<r.length*2?n/2:r.length,l=0;l<s;++l){var u=r.charCodeAt(l);HEAP16[t>>1]=u,t+=2}return HEAP16[t>>1]=0,t-i}function lengthBytesUTF16(r){return r.length*2}function UTF32ToString(r,t){for(var n=0,i="";!(n>=t/4);){var s=HEAP32[r+n*4>>2];if(s==0)break;if(++n,s>=65536){var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|l&1023)}else i+=String.fromCharCode(s)}return i}function stringToUTF32(r,t,n){if(n===void 0&&(n=2147483647),n<4)return 0;for(var i=t,s=i+n-4,l=0;l<r.length;++l){var u=r.charCodeAt(l);if(u>=55296&&u<=57343){var o=r.charCodeAt(++l);u=65536+((u&1023)<<10)|o&1023}if(HEAP32[t>>2]=u,t+=4,t+4>s)break}return HEAP32[t>>2]=0,t-i}function lengthBytesUTF32(r){for(var t=0,n=0;n<r.length;++n){var i=r.charCodeAt(n);i>=55296&&i<=57343&&++n,t+=4}return t}function __embind_register_std_wstring(r,t,n){n=readLatin1String(n);var i,s,l,u,o;t===2?(i=UTF16ToString,s=stringToUTF16,u=lengthBytesUTF16,l=()=>HEAPU16,o=1):t===4&&(i=UTF32ToString,s=stringToUTF32,u=lengthBytesUTF32,l=()=>HEAPU32,o=2),registerType(r,{name:n,fromWireType:function(g){for(var f=HEAPU32[g>>2],p=l(),h,v=g+4,m=0;m<=f;++m){var y=g+4+m*t;if(m==f||p[y>>o]==0){var w=y-v,_=i(v,w);h===void 0?h=_:(h+=String.fromCharCode(0),h+=_),v=y+t}}return _free(g),h},toWireType:function(g,f){typeof f!="string"&&throwBindingError("Cannot pass non-string to C++ string type "+n);var p=u(f),h=_malloc(4+p+t);return HEAPU32[h>>2]=p>>o,s(f,h+4,p+t),g!==null&&g.push(_free,h),h},argPackAdvance:8,readValueFromPointer:simpleReadValueFromPointer,destructorFunction:function(g){_free(g)}})}function __embind_register_void(r,t){t=readLatin1String(t),registerType(r,{isVoid:!0,name:t,argPackAdvance:0,fromWireType:function(){},toWireType:function(n,i){}})}function __emscripten_throw_longjmp(){throw 1/0}function _abort(){abort("")}var _emscripten_get_now;typeof performance<"u"&&performance.now?_emscripten_get_now=()=>performance.now():_emscripten_get_now=Date.now;var _emscripten_memcpy_big=Uint8Array.prototype.copyWithin?(r,t,n)=>HEAPU8.copyWithin(r,t,t+n):(r,t,n)=>HEAPU8.set(HEAPU8.subarray(t,t+n),r);function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(r){var t=wasmMemory.buffer;try{return wasmMemory.grow(r-t.byteLength+65535>>>16),updateMemoryViews(),1}catch{}}function _emscripten_resize_heap(r){var t=HEAPU8.length;r=r>>>0;var n=getHeapMax();if(r>n)return!1;for(var i=(g,f)=>g+(f-g%f)%f,s=1;s<=4;s*=2){var l=t*(1+.2/s);l=Math.min(l,r+100663296);var u=Math.min(n,i(Math.max(r,l),65536)),o=emscripten_realloc_buffer(u);if(o)return!0}return!1}var ENV={};function getExecutableName(){return"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var r=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:r,_:getExecutableName()};for(var n in ENV)ENV[n]===void 0?delete t[n]:t[n]=ENV[n];var i=[];for(var n in t)i.push(n+"="+t[n]);getEnvStrings.strings=i}return getEnvStrings.strings}function stringToAscii(r,t){for(var n=0;n<r.length;++n)HEAP8[t++>>0]=r.charCodeAt(n);HEAP8[t>>0]=0}function _environ_get(r,t){var n=0;return getEnvStrings().forEach(function(i,s){var l=t+n;HEAPU32[r+s*4>>2]=l,stringToAscii(i,l),n+=i.length+1}),0}function _environ_sizes_get(r,t){var n=getEnvStrings();HEAPU32[r>>2]=n.length;var i=0;return n.forEach(function(s){i+=s.length+1}),HEAPU32[t>>2]=i,0}function _proc_exit(r){throw"exit("+r+")"}var _exit=_proc_exit;function _fd_close(r){return 52}function _fd_read(r,t,n,i){return 52}function _fd_seek(r,t,n,i,s){return 70}var printCharBuffers=[null,[],[]];function printChar(r,t){var n=printCharBuffers[r];t===0||t===10?((r===1?out:err)(UTF8ArrayToString(n,0)),n.length=0):n.push(t)}function _fd_write(r,t,n,i){for(var s=0,l=0;l<n;l++){var u=HEAPU32[t>>2],o=HEAPU32[t+4>>2];t+=8;for(var g=0;g<o;g++)printChar(r,HEAPU8[u+g]);s+=o}return HEAPU32[i>>2]=s,0}embind_init_charCodes();BindingError=Module.BindingError=extendError(Error,"BindingError");InternalError=Module.InternalError=extendError(Error,"InternalError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module.UnboundTypeError=extendError(Error,"UnboundTypeError");init_emval();var wasmImports={b:___assert_fail,n:___syscall_fcntl64,A:___syscall_getdents64,G:___syscall_ioctl,m:___syscall_openat,t:__embind_register_bigint,q:__embind_register_bool,j:__embind_register_class,v:__embind_register_class_constructor,d:__embind_register_class_function,c:__embind_register_class_property,H:__embind_register_emval,o:__embind_register_float,g:__embind_register_integer,e:__embind_register_memory_view,p:__embind_register_std_string,k:__embind_register_std_wstring,r:__embind_register_void,y:__emscripten_throw_longjmp,f:_abort,l:_emscripten_get_now,D:_emscripten_memcpy_big,z:_emscripten_resize_heap,B:_environ_get,C:_environ_sizes_get,h:_exit,i:_fd_close,F:_fd_read,s:_fd_seek,E:_fd_write,x:invoke_iii,u:invoke_iiii,w:invoke_iiiii,a:wasmMemory};function invoke_iii(r,t,n){var i=stackSave();try{return getWasmTableEntry(r)(t,n)}catch(s){if(stackRestore(i),s!==s+0)throw s;_setThrew(1,0)}}function invoke_iiiii(r,t,n,i,s){var l=stackSave();try{return getWasmTableEntry(r)(t,n,i,s)}catch(u){if(stackRestore(l),u!==u+0)throw u;_setThrew(1,0)}}function invoke_iiii(r,t,n,i){var s=stackSave();try{return getWasmTableEntry(r)(t,n,i)}catch(l){if(stackRestore(s),l!==l+0)throw l;_setThrew(1,0)}}function initRuntime(r){r.I()}var imports={a:wasmImports},_malloc,_free,___getTypeName,_setThrew,stackSave,stackRestore;(WebAssembly.instantiateStreaming?WebAssembly.instantiateStreaming(fetch("jassub-worker.wasm"),imports):WebAssembly.instantiate(Module.wasm,imports)).then(function(r){asm=(r.instance||r).exports,_malloc=asm.J,_free=asm.K,___getTypeName=asm.L,asm.M,_setThrew=asm.O,asm.P,asm.Q,stackSave=asm.R,stackRestore=asm.S,asm.T,asm.U,asm.V,asm.W,wasmTable=asm.N,initRuntime(asm),ready()},function(r){var t=location.search;t.indexOf("_rwasm=0")<0&&(location.href+=(t?t+"&":"?")+"_rwasm=0")});
1
+ "use strict";var Module=function(p={}){var p=p,h;p.ready=new Promise((r,t)=>{h=r});var w=r=>console.log(r),m=r=>console.error(r);function T(){h(p)}function F(r,t){if(!r)throw t}let C=null;w=r=>{r==="JASSUB: No usable fontconfig configuration file found, using fallback."?console.debug(r):console.log(r)},m=r=>{r==="Fontconfig error: Cannot load default config file: No such file: (null)"?console.debug(r):console.error(r)},Y=(r=>()=>{r(),self.wasmMemory=x,self.HEAPU8C=new Uint8ClampedArray(x.buffer),self.HEAPU8=new Uint8Array(x.buffer)})(Y),String.prototype.startsWith||(String.prototype.startsWith=function(r,t){return t===void 0&&(t=0),this.substring(t,r.length)===r}),String.prototype.includes||(String.prototype.includes=function(r,t){return this.indexOf(r,t)!==-1});function S(r){throw r}var j,E,k,O,G,R,fe,le,x,ue;function Y(){var r=x.buffer;j=new Int8Array(r),E=new Int16Array(r),k=new Int32Array(r),O=new Uint8Array(r),G=new Uint16Array(r),R=new Uint32Array(r),fe=new Float32Array(r),le=new Float64Array(r)}x=new WebAssembly.Memory({initial:256,maximum:32768}),Y();var ce=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function de(r,t,n){for(var s=t+n,o=t;r[o]&&!(o>=s);)++o;if(o-t>16&&r.buffer&&ce)return ce.decode(r.subarray(t,o));for(var l="";t<o;){var u=r[t++];if(!(u&128)){l+=String.fromCharCode(u);continue}var f=r[t++]&63;if((u&224)==192){l+=String.fromCharCode((u&31)<<6|f);continue}var v=r[t++]&63;if((u&240)==224?u=(u&15)<<12|f<<6|v:u=(u&7)<<18|f<<12|v<<6|r[t++]&63,u<65536)l+=String.fromCharCode(u);else{var g=u-65536;l+=String.fromCharCode(55296|g>>10,56320|g&1023)}}return l}function X(r,t){return r?de(O,r,t):""}function _e(r,t,n,s){S(`Assertion failed: ${X(r)}, at: `+[t?X(t):"unknown filename",n,s?X(s):"unknown function"])}function $e(r,t,n){return 0}function Te(r,t){}function Pe(r,t,n,s){if(!(s>0))return 0;for(var o=n,l=n+s-1,u=0;u<r.length;++u){var f=r.charCodeAt(u);if(f>=55296&&f<=57343){var v=r.charCodeAt(++u);f=65536+((f&1023)<<10)|v&1023}if(f<=127){if(n>=l)break;t[n++]=f}else if(f<=2047){if(n+1>=l)break;t[n++]=192|f>>6,t[n++]=128|f&63}else if(f<=65535){if(n+2>=l)break;t[n++]=224|f>>12,t[n++]=128|f>>6&63,t[n++]=128|f&63}else{if(n+3>=l)break;t[n++]=240|f>>18,t[n++]=128|f>>12&63,t[n++]=128|f>>6&63,t[n++]=128|f&63}}return t[n]=0,n-o}function Fe(r,t,n){return Pe(r,O,t,n)}function ir(r,t,n){}function ar(r,t,n){return 0}function or(r,t,n,s){}function fr(r,t,n,s){}function lr(r,t){}function ur(r,t,n,s,o){}function Ae(r){switch(r){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+r)}}function cr(){for(var r=new Array(256),t=0;t<256;++t)r[t]=String.fromCharCode(t);Ie=r}var Ie=void 0;function I(r){for(var t="",n=r;O[n];)t+=Ie[O[n++]];return t}var Q={},Z={},pe={},dr=48,pr=57;function Se(r){if(r===void 0)return"_unknown";r=r.replace(/[^a-zA-Z0-9_]/g,"$");var t=r.charCodeAt(0);return t>=dr&&t<=pr?"_"+r:r}function je(r,t){return r=Se(r),{[r]:function(){return t.apply(this,arguments)}}[r]}function Oe(r,t){var n=je(t,function(s){this.name=t,this.message=s;var o=new Error(s).stack;o!==void 0&&(this.stack=this.toString()+`
2
+ `+o.replace(/^Error(:[^\n]*)?\n/,""))});return n.prototype=Object.create(r.prototype),n.prototype.constructor=n,n.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},n}var N=void 0;function _(r){throw new N(r)}var Le=void 0;function ge(r){throw new Le(r)}function K(r,t,n){r.forEach(function(f){pe[f]=t});function s(f){var v=n(f);v.length!==r.length&&ge("Mismatched type converter count");for(var g=0;g<r.length;++g)B(r[g],v[g])}var o=new Array(t.length),l=[],u=0;t.forEach((f,v)=>{Z.hasOwnProperty(f)?o[v]=Z[f]:(l.push(f),Q.hasOwnProperty(f)||(Q[f]=[]),Q[f].push(()=>{o[v]=Z[f],++u,u===l.length&&s(o)}))}),l.length===0&&s(o)}function B(r,t,n={}){if(!("argPackAdvance"in t))throw new TypeError("registerType registeredInstance requires argPackAdvance");var s=t.name;if(r||_(`type "${s}" must have a positive integer typeid pointer`),Z.hasOwnProperty(r)){if(n.ignoreDuplicateRegistrations)return;_(`Cannot register type '${s}' twice`)}if(Z[r]=t,delete pe[r],Q.hasOwnProperty(r)){var o=Q[r];delete Q[r],o.forEach(l=>l())}}function gr(r,t,n,s,o){var l=Ae(n);t=I(t),B(r,{name:t,fromWireType:function(u){return!!u},toWireType:function(u,f){return f?s:o},argPackAdvance:8,readValueFromPointer:function(u){var f;if(n===1)f=j;else if(n===2)f=E;else if(n===4)f=k;else throw new TypeError("Unknown boolean type size: "+t);return this.fromWireType(f[u>>l])},destructorFunction:null})}function vr(r){if(!(this instanceof z)||!(r instanceof z))return!1;for(var t=this.$$.ptrType.registeredClass,n=this.$$.ptr,s=r.$$.ptrType.registeredClass,o=r.$$.ptr;t.baseClass;)n=t.upcast(n),t=t.baseClass;for(;s.baseClass;)o=s.upcast(o),s=s.baseClass;return t===s&&n===o}function hr(r){return{count:r.count,deleteScheduled:r.deleteScheduled,preservePointerOnDelete:r.preservePointerOnDelete,ptr:r.ptr,ptrType:r.ptrType,smartPtr:r.smartPtr,smartPtrType:r.smartPtrType}}function Ee(r){function t(n){return n.$$.ptrType.registeredClass.name}_(t(r)+" instance already deleted")}var ke=!1;function He(r){}function yr(r){r.smartPtr?r.smartPtrType.rawDestructor(r.smartPtr):r.ptrType.registeredClass.rawDestructor(r.ptr)}function xe(r){r.count.value-=1;var t=r.count.value===0;t&&yr(r)}function Be(r,t,n){if(t===n)return r;if(n.baseClass===void 0)return null;var s=Be(r,t,n.baseClass);return s===null?null:n.downcast(s)}var Ve={};function br(){return Object.keys(te).length}function mr(){var r=[];for(var t in te)te.hasOwnProperty(t)&&r.push(te[t]);return r}var ee=[];function Re(){for(;ee.length;){var r=ee.pop();r.$$.deleteScheduled=!1,r.delete()}}var re=void 0;function Cr(r){re=r,ee.length&&re&&re(Re)}function wr(){p.getInheritedInstanceCount=br,p.getLiveInheritedInstances=mr,p.flushPendingDeletes=Re,p.setDelayFunction=Cr}var te={};function _r(r,t){for(t===void 0&&_("ptr should not be undefined");r.baseClass;)t=r.upcast(t),r=r.baseClass;return t}function $r(r,t){return t=_r(r,t),te[t]}function ve(r,t){(!t.ptrType||!t.ptr)&&ge("makeClassHandle requires ptr and ptrType");var n=!!t.smartPtrType,s=!!t.smartPtr;return n!==s&&ge("Both smartPtrType and smartPtr must be specified"),t.count={value:1},ne(Object.create(r,{$$:{value:t}}))}function Tr(r){var t=this.getPointee(r);if(!t)return this.destructor(r),null;var n=$r(this.registeredClass,t);if(n!==void 0){if(n.$$.count.value===0)return n.$$.ptr=t,n.$$.smartPtr=r,n.clone();var s=n.clone();return this.destructor(r),s}function o(){return this.isSmartPointer?ve(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:t,smartPtrType:this,smartPtr:r}):ve(this.registeredClass.instancePrototype,{ptrType:this,ptr:r})}var l=this.registeredClass.getActualType(t),u=Ve[l];if(!u)return o.call(this);var f;this.isConst?f=u.constPointerType:f=u.pointerType;var v=Be(t,this.registeredClass,f.registeredClass);return v===null?o.call(this):this.isSmartPointer?ve(f.registeredClass.instancePrototype,{ptrType:f,ptr:v,smartPtrType:this,smartPtr:r}):ve(f.registeredClass.instancePrototype,{ptrType:f,ptr:v})}function ne(r){return typeof FinalizationRegistry>"u"?(ne=t=>t,r):(ke=new FinalizationRegistry(t=>{xe(t.$$)}),ne=t=>{var n=t.$$,s=!!n.smartPtr;if(s){var o={$$:n};ke.register(t,o,t)}return t},He=t=>ke.unregister(t),ne(r))}function Pr(){if(this.$$.ptr||Ee(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var r=ne(Object.create(Object.getPrototypeOf(this),{$$:{value:hr(this.$$)}}));return r.$$.count.value+=1,r.$$.deleteScheduled=!1,r}function Fr(){this.$$.ptr||Ee(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&_("Object already scheduled for deletion"),He(this),xe(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function Ar(){return!this.$$.ptr}function Sr(){return this.$$.ptr||Ee(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&_("Object already scheduled for deletion"),ee.push(this),ee.length===1&&re&&re(Re),this.$$.deleteScheduled=!0,this}function jr(){z.prototype.isAliasOf=vr,z.prototype.clone=Pr,z.prototype.delete=Fr,z.prototype.isDeleted=Ar,z.prototype.deleteLater=Sr}function z(){}function Je(r,t,n){if(r[t].overloadTable===void 0){var s=r[t];r[t]=function(){return r[t].overloadTable.hasOwnProperty(arguments.length)||_(`Function '${n}' called with an invalid number of arguments (${arguments.length}) - expects one of (${r[t].overloadTable})!`),r[t].overloadTable[arguments.length].apply(this,arguments)},r[t].overloadTable=[],r[t].overloadTable[s.argCount]=s}}function Or(r,t,n){p.hasOwnProperty(r)?((n===void 0||p[r].overloadTable!==void 0&&p[r].overloadTable[n]!==void 0)&&_(`Cannot register public name '${r}' twice`),Je(p,r,r),p.hasOwnProperty(n)&&_(`Cannot register multiple overloads of a function with the same number of arguments (${n})!`),p[r].overloadTable[n]=t):(p[r]=t,n!==void 0&&(p[r].numArguments=n))}function Er(r,t,n,s,o,l,u,f){this.name=r,this.constructor=t,this.instancePrototype=n,this.rawDestructor=s,this.baseClass=o,this.getActualType=l,this.upcast=u,this.downcast=f,this.pureVirtualFunctions=[]}function he(r,t,n){for(;t!==n;)t.upcast||_(`Expected null or instance of ${n.name}, got an instance of ${t.name}`),r=t.upcast(r),t=t.baseClass;return r}function kr(r,t){if(t===null)return this.isReference&&_("null is not a valid "+this.name),0;t.$$||_(`Cannot pass "${De(t)}" as a ${this.name}`),t.$$.ptr||_("Cannot pass deleted object as a pointer of type "+this.name);var n=t.$$.ptrType.registeredClass,s=he(t.$$.ptr,n,this.registeredClass);return s}function Rr(r,t){var n;if(t===null)return this.isReference&&_("null is not a valid "+this.name),this.isSmartPointer?(n=this.rawConstructor(),r!==null&&r.push(this.rawDestructor,n),n):0;t.$$||_(`Cannot pass "${De(t)}" as a ${this.name}`),t.$$.ptr||_(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&t.$$.ptrType.isConst&&_(`Cannot convert argument of type ${t.$$.smartPtrType?t.$$.smartPtrType.name:t.$$.ptrType.name} to parameter type ${this.name}`);var s=t.$$.ptrType.registeredClass;if(n=he(t.$$.ptr,s,this.registeredClass),this.isSmartPointer)switch(t.$$.smartPtr===void 0&&_("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:t.$$.smartPtrType===this?n=t.$$.smartPtr:_(`Cannot convert argument of type ${t.$$.smartPtrType?t.$$.smartPtrType.name:t.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:n=t.$$.smartPtr;break;case 2:if(t.$$.smartPtrType===this)n=t.$$.smartPtr;else{var o=t.clone();n=this.rawShare(n,Me.toHandle(function(){o.delete()})),r!==null&&r.push(this.rawDestructor,n)}break;default:_("Unsupporting sharing policy")}return n}function Mr(r,t){if(t===null)return this.isReference&&_("null is not a valid "+this.name),0;t.$$||_(`Cannot pass "${De(t)}" as a ${this.name}`),t.$$.ptr||_(`Cannot pass deleted object as a pointer of type ${this.name}`),t.$$.ptrType.isConst&&_(`Cannot convert argument of type ${t.$$.ptrType.name} to parameter type ${this.name}`);var n=t.$$.ptrType.registeredClass,s=he(t.$$.ptr,n,this.registeredClass);return s}function ye(r){return this.fromWireType(k[r>>2])}function Dr(r){return this.rawGetPointee&&(r=this.rawGetPointee(r)),r}function Wr(r){this.rawDestructor&&this.rawDestructor(r)}function Ur(r){r!==null&&r.delete()}function Ir(){V.prototype.getPointee=Dr,V.prototype.destructor=Wr,V.prototype.argPackAdvance=8,V.prototype.readValueFromPointer=ye,V.prototype.deleteObject=Ur,V.prototype.fromWireType=Tr}function V(r,t,n,s,o,l,u,f,v,g,y){this.name=r,this.registeredClass=t,this.isReference=n,this.isConst=s,this.isSmartPointer=o,this.pointeeType=l,this.sharingPolicy=u,this.rawGetPointee=f,this.rawConstructor=v,this.rawShare=g,this.rawDestructor=y,!o&&t.baseClass===void 0?s?(this.toWireType=kr,this.destructorFunction=null):(this.toWireType=Mr,this.destructorFunction=null):this.toWireType=Rr}function Lr(r,t,n){p.hasOwnProperty(r)||ge("Replacing nonexistant public symbol"),p[r].overloadTable!==void 0&&n!==void 0?p[r].overloadTable[n]=t:(p[r]=t,p[r].argCount=n)}function Hr(r,t,n){var s=dynCalls[r];return n&&n.length?s.apply(null,[t].concat(n)):s.call(null,t)}var be=[];function se(r){var t=be[r];return t||(r>=be.length&&(be.length=r+1),be[r]=t=ue.get(r)),t}function xr(r,t,n){if(r.includes("j"))return Hr(r,t,n);var s=se(t).apply(null,n);return s}function Br(r,t){var n=[];return function(){return n.length=0,Object.assign(n,arguments),xr(r,t,n)}}function q(r,t){r=I(r);function n(){return r.includes("j")?Br(r,t):se(t)}var s=n();return typeof s!="function"&&_(`unknown function pointer with signature ${r}: ${t}`),s}var Ge=void 0;function Vr(r){var t=Ne(r),n=I(t);return J(t),n}function ie(r,t){var n=[],s={};function o(l){if(!s[l]&&!Z[l]){if(pe[l]){pe[l].forEach(o);return}n.push(l),s[l]=!0}}throw t.forEach(o),new Ge(r+": "+n.map(Vr).join([", "]))}function Jr(r,t,n,s,o,l,u,f,v,g,y,$,P){y=I(y),l=q(o,l),f&&(f=q(u,f)),g&&(g=q(v,g)),P=q($,P);var A=Se(y);Or(A,function(){ie(`Cannot construct ${y} due to unbound types`,[s])}),K([r,t,n],s?[s]:[],function(M){M=M[0];var W,D;s?(W=M.registeredClass,D=W.instancePrototype):D=z.prototype;var L=je(A,function(){if(Object.getPrototypeOf(this)!==oe)throw new N("Use 'new' to construct "+y);if(U.constructor_body===void 0)throw new N(y+" has no accessible constructor");var sr=U.constructor_body[arguments.length];if(sr===void 0)throw new N(`Tried to invoke ctor of ${y} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(U.constructor_body).toString()}) parameters instead!`);return sr.apply(this,arguments)}),oe=Object.create(D,{constructor:{value:L}});L.prototype=oe;var U=new Er(y,L,oe,P,W,l,f,g);U.baseClass&&(U.baseClass.__derivedClasses===void 0&&(U.baseClass.__derivedClasses=[]),U.baseClass.__derivedClasses.push(U));var Lt=new V(y,U,!0,!1,!1),tr=new V(y+"*",U,!1,!1,!1),nr=new V(y+" const*",U,!1,!0,!1);return Ve[r]={pointerType:tr,constPointerType:nr},Lr(A,L),[Lt,tr,nr]})}function ze(r,t){for(var n=[],s=0;s<r;s++)n.push(R[t+s*4>>2]);return n}function qe(r){for(;r.length;){var t=r.pop(),n=r.pop();n(t)}}function Gr(r,t){if(!(r instanceof Function))throw new TypeError(`new_ called with constructor type ${typeof r} which is not a function`);var n=je(r.name||"unknownFunctionName",function(){});n.prototype=r.prototype;var s=new n,o=r.apply(s,t);return o instanceof Object?o:s}function Ke(r,t,n,s,o,l){var u=t.length;u<2&&_("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var f=t[1]!==null&&n!==null,v=!1,g=1;g<t.length;++g)if(t[g]!==null&&t[g].destructorFunction===void 0){v=!0;break}for(var y=t[0].name!=="void",$="",P="",g=0;g<u-2;++g)$+=(g!==0?", ":"")+"arg"+g,P+=(g!==0?", ":"")+"arg"+g+"Wired";var A="return function "+Se(r)+"("+$+`) {
3
+ if (arguments.length !== `+(u-2)+`) {
4
+ throwBindingError('function `+r+" called with ' + arguments.length + ' arguments, expected "+(u-2)+` args!');
5
+ }
6
+ `;v&&(A+=`var destructors = [];
7
+ `);var M=v?"destructors":"null",W=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],D=[_,s,o,qe,t[0],t[1]];f&&(A+="var thisWired = classParam.toWireType("+M+`, this);
8
+ `);for(var g=0;g<u-2;++g)A+="var arg"+g+"Wired = argType"+g+".toWireType("+M+", arg"+g+"); // "+t[g+2].name+`
9
+ `,W.push("argType"+g),D.push(t[g+2]);if(f&&(P="thisWired"+(P.length>0?", ":"")+P),A+=(y||l?"var rv = ":"")+"invoker(fn"+(P.length>0?", ":"")+P+`);
10
+ `,v)A+=`runDestructors(destructors);
11
+ `;else for(var g=f?1:2;g<t.length;++g){var L=g===1?"thisWired":"arg"+(g-2)+"Wired";t[g].destructorFunction!==null&&(A+=L+"_dtor("+L+"); // "+t[g].name+`
12
+ `,W.push(L+"_dtor"),D.push(t[g].destructorFunction))}return y&&(A+=`var ret = retType.fromWireType(rv);
13
+ return ret;
14
+ `),A+=`}
15
+ `,W.push(A),Gr(Function,W).apply(null,D)}function zr(r,t,n,s,o,l){F(t>0);var u=ze(t,n);o=q(s,o),K([],[r],function(f){f=f[0];var v="constructor "+f.name;if(f.registeredClass.constructor_body===void 0&&(f.registeredClass.constructor_body=[]),f.registeredClass.constructor_body[t-1]!==void 0)throw new N(`Cannot register multiple constructors with identical number of parameters (${t-1}) for class '${f.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return f.registeredClass.constructor_body[t-1]=()=>{ie(`Cannot construct ${f.name} due to unbound types`,u)},K([],u,function(g){return g.splice(1,0,null),f.registeredClass.constructor_body[t-1]=Ke(v,g,null,o,l),[]}),[]})}function qr(r,t,n,s,o,l,u,f,v){var g=ze(n,s);t=I(t),l=q(o,l),K([],[r],function(y){y=y[0];var $=y.name+"."+t;t.startsWith("@@")&&(t=Symbol[t.substring(2)]),f&&y.registeredClass.pureVirtualFunctions.push(t);function P(){ie(`Cannot call ${$} due to unbound types`,g)}var A=y.registeredClass.instancePrototype,M=A[t];return M===void 0||M.overloadTable===void 0&&M.className!==y.name&&M.argCount===n-2?(P.argCount=n-2,P.className=y.name,A[t]=P):(Je(A,t,$),A[t].overloadTable[n-2]=P),K([],g,function(W){var D=Ke($,W,y,l,u,v);return A[t].overloadTable===void 0?(D.argCount=n-2,A[t]=D):A[t].overloadTable[n-2]=D,[]}),[]})}function Ye(r,t,n){return r instanceof Object||_(n+' with invalid "this": '+r),r instanceof t.registeredClass.constructor||_(n+' incompatible with "this" of type '+r.constructor.name),r.$$.ptr||_(`cannot call emscripten binding method ${n} on deleted object`),he(r.$$.ptr,r.$$.ptrType.registeredClass,t.registeredClass)}function Kr(r,t,n,s,o,l,u,f,v,g){t=I(t),o=q(s,o),K([],[r],function(y){y=y[0];var $=y.name+"."+t,P={get:function(){ie(`Cannot access ${$} due to unbound types`,[n,u])},enumerable:!0,configurable:!0};return v?P.set=()=>{ie(`Cannot access ${$} due to unbound types`,[n,u])}:P.set=A=>{_($+" is a read-only property")},Object.defineProperty(y.registeredClass.instancePrototype,t,P),K([],v?[n,u]:[n],function(A){var M=A[0],W={get:function(){var L=Ye(this,y,$+" getter");return M.fromWireType(o(l,L))},enumerable:!0};if(v){v=q(f,v);var D=A[1];W.set=function(L){var oe=Ye(this,y,$+" setter"),U=[];v(g,oe,D.toWireType(U,L)),qe(U)}}return Object.defineProperty(y.registeredClass.instancePrototype,t,W),[]}),[]})}function Yr(){this.allocated=[void 0],this.freelist=[],this.get=function(r){return this.allocated[r]},this.allocate=function(r){var t=this.freelist.pop()||this.allocated.length;return this.allocated[t]=r,t},this.free=function(r){this.allocated[r]=void 0,this.freelist.push(r)}}var H=new Yr;function Xr(r){r>=H.reserved&&--H.get(r).refcount===0&&H.free(r)}function Qr(){for(var r=0,t=H.reserved;t<H.allocated.length;++t)H.allocated[t]!==void 0&&++r;return r}function Zr(){H.allocated.push({value:void 0},{value:null},{value:!0},{value:!1}),H.reserved=H.allocated.length,p.count_emval_handles=Qr}var Me={toValue:r=>(r||_("Cannot use deleted val. handle = "+r),H.get(r).value),toHandle:r=>{switch(r){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:return H.allocate({refcount:1,value:r})}}};function Nr(r,t){t=I(t),B(r,{name:t,fromWireType:function(n){var s=Me.toValue(n);return Xr(n),s},toWireType:function(n,s){return Me.toHandle(s)},argPackAdvance:8,readValueFromPointer:ye,destructorFunction:null})}function De(r){if(r===null)return"null";var t=typeof r;return t==="object"||t==="array"||t==="function"?r.toString():""+r}function et(r,t){switch(t){case 2:return function(n){return this.fromWireType(fe[n>>2])};case 3:return function(n){return this.fromWireType(le[n>>3])};default:throw new TypeError("Unknown float type: "+r)}}function rt(r,t,n){var s=Ae(n);t=I(t),B(r,{name:t,fromWireType:function(o){return o},toWireType:function(o,l){return l},argPackAdvance:8,readValueFromPointer:et(t,s),destructorFunction:null})}function tt(r,t,n){switch(t){case 0:return n?function(o){return j[o]}:function(o){return O[o]};case 1:return n?function(o){return E[o>>1]}:function(o){return G[o>>1]};case 2:return n?function(o){return k[o>>2]}:function(o){return R[o>>2]};default:throw new TypeError("Unknown integer type: "+r)}}function nt(r,t,n,s,o){t=I(t);var l=Ae(n),u=$=>$;if(s===0){var f=32-8*n;u=$=>$<<f>>>f}var v=t.includes("unsigned"),g=($,P)=>{},y;v?y=function($,P){return g(P,this.name),P>>>0}:y=function($,P){return g(P,this.name),P},B(r,{name:t,fromWireType:u,toWireType:y,argPackAdvance:8,readValueFromPointer:tt(t,l,s!==0),destructorFunction:null})}function st(r,t,n){var s=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],o=s[t];function l(u){u=u>>2;var f=R,v=f[u],g=f[u+1];return new o(f.buffer,g,v)}n=I(n),B(r,{name:n,fromWireType:l,argPackAdvance:8,readValueFromPointer:l},{ignoreDuplicateRegistrations:!0})}function it(r){for(var t=0,n=0;n<r.length;++n){var s=r.charCodeAt(n);s<=127?t++:s<=2047?t+=2:s>=55296&&s<=57343?(t+=4,++n):t+=3}return t}function at(r,t){t=I(t);var n=t==="std::string";B(r,{name:t,fromWireType:function(s){var o=R[s>>2],l=s+4,u;if(n)for(var f=l,v=0;v<=o;++v){var g=l+v;if(v==o||O[g]==0){var y=g-f,$=X(f,y);u===void 0?u=$:(u+=String.fromCharCode(0),u+=$),f=g+1}}else{for(var P=new Array(o),v=0;v<o;++v)P[v]=String.fromCharCode(O[l+v]);u=P.join("")}return J(s),u},toWireType:function(s,o){o instanceof ArrayBuffer&&(o=new Uint8Array(o));var l,u=typeof o=="string";u||o instanceof Uint8Array||o instanceof Uint8ClampedArray||o instanceof Int8Array||_("Cannot pass non-string to std::string"),n&&u?l=it(o):l=o.length;var f=Ue(4+l+1),v=f+4;if(R[f>>2]=l,n&&u)Fe(o,v,l+1);else if(u)for(var g=0;g<l;++g){var y=o.charCodeAt(g);y>255&&(J(v),_("String has UTF-16 code units that do not fit in 8 bits")),O[v+g]=y}else for(var g=0;g<l;++g)O[v+g]=o[g];return s!==null&&s.push(J,f),f},argPackAdvance:8,readValueFromPointer:ye,destructorFunction:function(s){J(s)}})}var Xe=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function ot(r,t){for(var n=r,s=n>>1,o=s+t/2;!(s>=o)&&G[s];)++s;if(n=s<<1,n-r>32&&Xe)return Xe.decode(O.subarray(r,n));for(var l="",u=0;!(u>=t/2);++u){var f=E[r+u*2>>1];if(f==0)break;l+=String.fromCharCode(f)}return l}function ft(r,t,n){if(n===void 0&&(n=2147483647),n<2)return 0;n-=2;for(var s=t,o=n<r.length*2?n/2:r.length,l=0;l<o;++l){var u=r.charCodeAt(l);E[t>>1]=u,t+=2}return E[t>>1]=0,t-s}function lt(r){return r.length*2}function ut(r,t){for(var n=0,s="";!(n>=t/4);){var o=k[r+n*4>>2];if(o==0)break;if(++n,o>=65536){var l=o-65536;s+=String.fromCharCode(55296|l>>10,56320|l&1023)}else s+=String.fromCharCode(o)}return s}function ct(r,t,n){if(n===void 0&&(n=2147483647),n<4)return 0;for(var s=t,o=s+n-4,l=0;l<r.length;++l){var u=r.charCodeAt(l);if(u>=55296&&u<=57343){var f=r.charCodeAt(++l);u=65536+((u&1023)<<10)|f&1023}if(k[t>>2]=u,t+=4,t+4>o)break}return k[t>>2]=0,t-s}function dt(r){for(var t=0,n=0;n<r.length;++n){var s=r.charCodeAt(n);s>=55296&&s<=57343&&++n,t+=4}return t}function pt(r,t,n){n=I(n);var s,o,l,u,f;t===2?(s=ot,o=ft,u=lt,l=()=>G,f=1):t===4&&(s=ut,o=ct,u=dt,l=()=>R,f=2),B(r,{name:n,fromWireType:function(v){for(var g=R[v>>2],y=l(),$,P=v+4,A=0;A<=g;++A){var M=v+4+A*t;if(A==g||y[M>>f]==0){var W=M-P,D=s(P,W);$===void 0?$=D:($+=String.fromCharCode(0),$+=D),P=M+t}}return J(v),$},toWireType:function(v,g){typeof g!="string"&&_("Cannot pass non-string to C++ string type "+n);var y=u(g),$=Ue(4+y+t);return R[$>>2]=y>>f,o(g,$+4,y+t),v!==null&&v.push(J,$),$},argPackAdvance:8,readValueFromPointer:ye,destructorFunction:function(v){J(v)}})}function gt(r,t){t=I(t),B(r,{isVoid:!0,name:t,argPackAdvance:0,fromWireType:function(){},toWireType:function(n,s){}})}function vt(){throw 1/0}function ht(r,t,n,s,o,l,u){return-52}function yt(r,t,n,s,o,l){}function bt(){S("")}var Qe;Qe=()=>performance.now();function mt(){return 2147483648}function Ct(r){var t=x.buffer;try{return x.grow(r-t.byteLength+65535>>>16),Y(),1}catch{}}function wt(r){var t=O.length;r=r>>>0;var n=mt();if(r>n)return!1;for(var s=(v,g)=>v+(g-v%g)%g,o=1;o<=4;o*=2){var l=t*(1+.2/o);l=Math.min(l,r+100663296);var u=Math.min(n,s(Math.max(r,l),65536)),f=Ct(u);if(f)return!0}return!1}var We={};function _t(){return"./this.program"}function ae(){if(!ae.strings){var r=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",t={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:r,_:_t()};for(var n in We)We[n]===void 0?delete t[n]:t[n]=We[n];var s=[];for(var n in t)s.push(n+"="+t[n]);ae.strings=s}return ae.strings}function $t(r,t){for(var n=0;n<r.length;++n)j[t++>>0]=r.charCodeAt(n);j[t>>0]=0}function Tt(r,t){var n=0;return ae().forEach(function(s,o){var l=t+n;R[r+o*4>>2]=l,$t(s,l),n+=s.length+1}),0}function Pt(r,t){var n=ae();R[r>>2]=n.length;var s=0;return n.forEach(function(o){s+=o.length+1}),R[t>>2]=s,0}function Ft(r){throw"exit("+r+")"}var At=Ft;function St(r){return 52}function jt(r,t,n,s){return 52}function Ot(r,t,n,s,o){return 70}var Et=[null,[],[]];function kt(r,t){var n=Et[r];t===0||t===10?((r===1?w:m)(de(n,0)),n.length=0):n.push(t)}function Rt(r,t,n,s){for(var o=0,l=0;l<n;l++){var u=R[t>>2],f=R[t+4>>2];t+=8;for(var v=0;v<f;v++)kt(r,O[u+v]);o+=f}return R[s>>2]=o,0}cr(),N=p.BindingError=Oe(Error,"BindingError"),Le=p.InternalError=Oe(Error,"InternalError"),jr(),wr(),Ir(),Ge=p.UnboundTypeError=Oe(Error,"UnboundTypeError"),Zr();var Mt={b:_e,k:$e,I:Te,B:ir,K:ar,G:or,n:fr,H:lr,u:ur,r:gr,j:Jr,A:zr,d:qr,c:Kr,L:Nr,p:rt,g:nt,e:st,q:at,l:pt,s:gt,y:vt,C:ht,D:yt,f:bt,m:Qe,z:wt,E:Tt,F:Pt,h:At,i:St,o:jt,t:Ot,J:Rt,x:Dt,v:Ut,w:Wt,a:x};function Dt(r,t,n){var s=Ce();try{return se(r)(t,n)}catch(o){if(we(s),o!==o+0)throw o;me(1,0)}}function Wt(r,t,n,s,o){var l=Ce();try{return se(r)(t,n,s,o)}catch(u){if(we(l),u!==u+0)throw u;me(1,0)}}function Ut(r,t,n,s){var o=Ce();try{return se(r)(t,n,s)}catch(l){if(we(o),l!==l+0)throw l;me(1,0)}}p.getTempRet0=rr,p.setTempRet0=er;function It(r){r.M()}var Ze={a:Mt},Ue,J,Ne,me,er,rr,Ce,we;return(WebAssembly.instantiateStreaming?WebAssembly.instantiateStreaming(fetch("jassub-worker-modern.wasm"),Ze):WebAssembly.instantiate(p.wasm,Ze)).then(function(r){C=(r.instance||r).exports,p._malloc=Ue=C.N,J=C.O,Ne=C.P,p.__embind_initialize_bindings=C.Q,me=C.S,er=C.T,rr=C.U,Ce=C.V,we=C.W,C.X,C.Y,C.Z,C._,ue=C.R,It(C),T()}),p.ready};const read_=(i,p)=>{const h=new XMLHttpRequest;return h.open("GET",i,!1),h.responseType=p?"arraybuffer":"text",h.send(null),h.response},readAsync=(i,p,h)=>{const w=new XMLHttpRequest;w.open("GET",i,!0),w.responseType="arraybuffer",w.onload=()=>{if((w.status===200||w.status===0)&&w.response)return p(w.response)},w.onerror=h,w.send(null)};Date.now||(Date.now=()=>new Date().getTime());"performance"in self||(self.performance={now:()=>Date.now()});if(typeof console>"u"){const i=(p,h)=>{postMessage({target:"console",command:p,content:JSON.stringify(Array.prototype.slice.call(h))})};console={log:function(){i("log",arguments)},debug:function(){i("debug",arguments)},info:function(){i("info",arguments)},warn:function(){i("warn",arguments)},error:function(){i("error",arguments)}},console.log("Detected lack of console, overridden console")}try{const i=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(!(i instanceof WebAssembly.Module)||!(new WebAssembly.Instance(i)instanceof WebAssembly.Instance))throw new Error("WASM not supported")}catch(e){console.warn(e),eval(read_("jassub-worker.wasm.js"))}let lastCurrentTime=0;const rate=1;let rafId=null,nextIsRaf=!1,lastCurrentTimeReceivedAt=Date.now(),targetFps=24,useLocalFonts=!1,blendMode="js",availableFonts={};const fontMap_={};let fontId=0,debug;self.width=0;self.height=0;let asyncRender=!1;self.addFont=({font:i})=>asyncWrite(i);const findAvailableFonts=i=>{i=i.trim().toLowerCase(),i.startsWith("@")&&(i=i.substring(1)),!fontMap_[i]&&(fontMap_[i]=!0,availableFonts[i]?asyncWrite(availableFonts[i]):useLocalFonts&&postMessage({target:"getLocalFont",font:i}))},asyncWrite=i=>{typeof i=="string"?readAsync(i,p=>{allocFont(new Uint8Array(p))},console.error):allocFont(i)},allocFont=i=>{const p=_malloc(i.byteLength);self.HEAPU8.set(i,p),jassubObj.addFont("font-"+fontId++,p,i.byteLength),jassubObj.reloadFonts()},processAvailableFonts=i=>{if(!availableFonts)return;const p=parseAss(i);for(let m=0;m<p.length;m++)for(let T=0;T<p[m].body.length;T++)p[m].body[T].key==="Style"&&findAvailableFonts(p[m].body[T].value.Fontname);const h=/\\fn([^\\}]*?)[\\}]/g;let w;for(;(w=h.exec(i))!==null;)findAvailableFonts(w[1])};self.setTrack=({content:i})=>{processAvailableFonts(i),dropAllBlur&&(i=dropBlur(i)),jassubObj.createTrackMem(i),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],postMessage({target:"verifyColorSpace",subtitleColorSpace})};self.getColorSpace=()=>postMessage({target:"verifyColorSpace",subtitleColorSpace});self.freeTrack=()=>{jassubObj.removeTrack()};self.setTrackByUrl=({url:i})=>{self.setTrack({content:read_(i)})};const getCurrentTime=()=>{const i=(Date.now()-lastCurrentTimeReceivedAt)/1e3;return _isPaused?lastCurrentTime:(i>5&&(console.error("Didn't received currentTime > 5 seconds. Assuming video was paused."),setIsPaused(!0)),lastCurrentTime+i*rate)},setCurrentTime=i=>{lastCurrentTime=i,lastCurrentTimeReceivedAt=Date.now(),rafId||(nextIsRaf?rafId=requestAnimationFrame(renderLoop):(renderLoop(),setTimeout(()=>{nextIsRaf=!1},20)))};let _isPaused=!0;const setIsPaused=i=>{i!==_isPaused&&(_isPaused=i,i?rafId&&(clearTimeout(rafId),rafId=null):(lastCurrentTimeReceivedAt=Date.now(),rafId=requestAnimationFrame(renderLoop)))},a="BT601",b="BT709",c="SMPTE240M",d="FCC",libassYCbCrMap=[null,a,null,a,a,b,b,c,c,d,d],render=(i,p)=>{const h={},w=performance.now(),m=blendMode==="wasm"?jassubObj.renderBlend(i,p||0):jassubObj.renderImage(i,p||0);if(debug){const T=performance.now(),F=jassubObj.time;h.WASMRenderTime=F-w,h.WASMBitmapDecodeTime=T-F,h.JSRenderTime=Date.now()}if(jassubObj.changed!==0||p){const T=[],F=[];if(!m)return paintImages({images:T,buffers:F,times:h});if(asyncRender){const C=[];for(let S=m,j=0;j<jassubObj.count;S=S.next,++j){const E={w:S.w,h:S.h,x:S.x,y:S.y},k=S.image;C.push(createImageBitmap(new ImageData(self.HEAPU8C.subarray(k,k+E.w*E.h*4),E.w,E.h))),T.push(E)}Promise.all(C).then(S=>{for(let j=0;j<T.length;j++)T[j].image=S[j];debug&&(h.JSBitmapGenerationTime=Date.now()-h.JSRenderTime),paintImages({images:T,buffers:S,times:h})})}else{for(let C=m,S=0;S<jassubObj.count;C=C.next,++S){const j={w:C.w,h:C.h,x:C.x,y:C.y,image:C.image};if(!offCanvasCtx){const E=self.wasmMemory.buffer.slice(C.image,C.image+C.w*C.h*4);F.push(E),j.image=E}T.push(j)}paintImages({images:T,buffers:F,times:h})}}else postMessage({target:"unbusy"})};self.demand=({time:i})=>{lastCurrentTime=i,render(i)};const renderLoop=i=>{rafId=0,render(getCurrentTime(),i),_isPaused||(rafId=requestAnimationFrame(renderLoop))},paintImages=({times:i,images:p,buffers:h})=>{const w={target:"render",asyncRender,images:p,times:i,width:self.width,height:self.height,colorSpace:subtitleColorSpace};if(offscreenRender){(offCanvas.height!==self.height||offCanvas.width!==self.width)&&(offCanvas.width=self.width,offCanvas.height=self.height),offCanvasCtx.clearRect(0,0,self.width,self.height);for(const m of p)m.image&&(asyncRender?(offCanvasCtx.drawImage(m.image,m.x,m.y),m.image.close()):(bufferCanvas.width=m.w,bufferCanvas.height=m.h,bufferCtx.putImageData(new ImageData(self.HEAPU8C.subarray(m.image,m.image+m.w*m.h*4),m.w,m.h),0,0),offCanvasCtx.drawImage(bufferCanvas,m.x,m.y)));if(offscreenRender==="hybrid"){if(!p.length)return postMessage(w);debug&&(i.bitmaps=p.length);try{const m=offCanvas.transferToImageBitmap();w.images=[{image:m,x:0,y:0}],w.asyncRender=!0,postMessage(w,[m])}catch{postMessage({target:"unbusy"})}}else{if(debug){i.JSRenderTime=Date.now()-i.JSRenderTime-(i.JSBitmapGenerationTime||0);let m=0;for(const T in i)m+=i[T];console.log("Bitmaps: "+p.length+" Total: "+(m|0)+"ms",i)}postMessage({target:"unbusy"})}}else postMessage(w,h)},parseAss=i=>{let p,h,w,m,T,F,C,S,j,E;const k=[],O=i.split(/[\r\n]+/g);for(S=0;S<O.length;S++)if(p=O[S].match(/^\[(.*)\]$/),p)h=null,k.push({name:p[1],body:[]});else{if(/^\s*$/.test(O[S])||k.length===0)continue;if(E=k[k.length-1].body,O[S][0]===";")E.push({type:"comment",value:O[S].substring(1)});else{if(m=O[S].split(":"),T=m[0],F=m.slice(1).join(":").trim(),(h||T==="Format")&&(F=F.split(","),h&&F.length>h.length&&(w=F.slice(h.length-1).join(","),F=F.slice(0,h.length-1),F.push(w)),F=F.map(G=>G.trim()),h)){for(C={},j=0;j<F.length;j++)C[h[j]]=F[j];F=C}T==="Format"&&(h=F),E.push({key:T,value:F})}}return k},blurRegex=/\\blur(?:[0-9]+\.)?[0-9]+/gm,dropBlur=i=>i.replace(blurRegex,""),requestAnimationFrame=(()=>{let i=0;return p=>{const h=Date.now();if(i===0)i=h+1e3/targetFps;else for(;h+2>=i;)i+=1e3/targetFps;const w=Math.max(i-h,0);return setTimeout(p,w)}})(),_applyKeys=(i,p)=>{for(const h of Object.keys(i))p[h]=i[h]};let offCanvas,offCanvasCtx,offscreenRender,bufferCanvas,bufferCtx,jassubObj,subtitleColorSpace,dropAllBlur,_malloc;self.init=i=>{const p=fetch,h=!WebAssembly.instantiateStreaming&&read_(i.legacyWasmUrl,!0);WebAssembly.instantiateStreaming&&(self.fetch=w=>p(i.wasmUrl)),Module({wasm:h}).then(w=>{_malloc=w._malloc,self.width=i.width,self.height=i.height,blendMode=i.blendMode,asyncRender=i.asyncRender,asyncRender&&typeof createImageBitmap>"u"&&(asyncRender=!1,console.error("'createImageBitmap' needed for 'asyncRender' unsupported!")),availableFonts=i.availableFonts,debug=i.debug,targetFps=i.targetFps||targetFps,useLocalFonts=i.useLocalFonts,dropAllBlur=i.dropAllBlur;const m=i.fallbackFont.toLowerCase();jassubObj=new w.JASSUB(self.width,self.height,m||null,debug),m&&findAvailableFonts(m);let T=i.subContent;T||(T=read_(i.subUrl)),processAvailableFonts(T),dropAllBlur&&(T=dropBlur(T));for(const F of i.fonts||[])asyncWrite(F);jassubObj.createTrackMem(T),subtitleColorSpace=libassYCbCrMap[jassubObj.trackColorSpace],jassubObj.setDropAnimations(i.dropAllAnimations||0),(i.libassMemoryLimit>0||i.libassGlyphLimit>0)&&jassubObj.setMemoryLimits(i.libassGlyphLimit||0,i.libassMemoryLimit||0),postMessage({target:"ready"}),postMessage({target:"verifyColorSpace",subtitleColorSpace})})};self.offscreenCanvas=({transferable:i})=>{offCanvas=i[0],offCanvasCtx=offCanvas.getContext("2d"),asyncRender||(bufferCanvas=new OffscreenCanvas(self.height,self.width),bufferCtx=bufferCanvas.getContext("2d",{desynchronized:!0})),offscreenRender=!0};self.detachOffscreen=()=>{offCanvas=new OffscreenCanvas(self.height,self.width),offCanvasCtx=offCanvas.getContext("2d",{desynchronized:!0}),offscreenRender="hybrid"};self.canvas=({width:i,height:p,force:h})=>{if(i==null)throw new Error("Invalid canvas size specified");self.width=i,self.height=p,jassubObj.resizeCanvas(i,p),h&&render(lastCurrentTime,!0)};self.video=({currentTime:i,isPaused:p,rate:h})=>{i!=null&&setCurrentTime(i),p!=null&&setIsPaused(p),h=h||h};self.destroy=()=>{jassubObj.quitLibrary()};self.createEvent=({event:i})=>{_applyKeys(i,jassubObj.getEvent(jassubObj.allocEvent()))};self.getEvents=()=>{const i=[];for(let p=0;p<jassubObj.getEventCount();p++){const{Start:h,Duration:w,ReadOrder:m,Layer:T,Style:F,MarginL:C,MarginR:S,MarginV:j,Name:E,Text:k,Effect:O}=jassubObj.getEvent(p);i.push({Start:h,Duration:w,ReadOrder:m,Layer:T,Style:F,MarginL:C,MarginR:S,MarginV:j,Name:E,Text:k,Effect:O})}postMessage({target:"getEvents",events:i})};self.setEvent=({event:i,index:p})=>{_applyKeys(i,jassubObj.getEvent(p))};self.removeEvent=({index:i})=>{jassubObj.removeEvent(i)};self.createStyle=({style:i})=>{_applyKeys(i,jassubObj.getStyle(jassubObj.allocStyle()))};self.getStyles=()=>{const i=[];for(let p=0;p<jassubObj.getStyleCount();p++){const{Name:h,FontName:w,FontSize:m,PrimaryColour:T,SecondaryColour:F,OutlineColour:C,BackColour:S,Bold:j,Italic:E,Underline:k,StrikeOut:O,ScaleX:G,ScaleY:R,Spacing:fe,Angle:le,BorderStyle:x,Outline:ue,Shadow:Y,Alignment:ce,MarginL:de,MarginR:X,MarginV:_e,Encoding:$e,treat_fontname_as_pattern:Te,Blur:Pe,Justify:Fe}=jassubObj.getStyle(p);i.push({Name:h,FontName:w,FontSize:m,PrimaryColour:T,SecondaryColour:F,OutlineColour:C,BackColour:S,Bold:j,Italic:E,Underline:k,StrikeOut:O,ScaleX:G,ScaleY:R,Spacing:fe,Angle:le,BorderStyle:x,Outline:ue,Shadow:Y,Alignment:ce,MarginL:de,MarginR:X,MarginV:_e,Encoding:$e,treat_fontname_as_pattern:Te,Blur:Pe,Justify:Fe})}postMessage({target:"getStyles",time:Date.now(),styles:i})};self.setStyle=({style:i,index:p})=>{_applyKeys(i,jassubObj.getStyle(p))};self.removeStyle=({index:i})=>{jassubObj.removeStyle(i)};onmessage=({data:i})=>{if(self[i.target])self[i.target](i);else throw new Error("Unknown event target "+i.target)};
16
+
Binary file