From 94362b7bad07fbb78c6e8b9409f2163e8fa71d25 Mon Sep 17 00:00:00 2001 From: Adrien Bertrand Date: Sun, 26 May 2024 15:42:09 +0200 Subject: [PATCH] add various utility functions and tests. - TIVarFile::getRawContentHexStr - TH_Tokenized::oneTokenBytesToString - TH_Tokenized::getPosInfoAtOffsetFromHexStr --- TIVarsLib.js | 2 +- TIVarsLib.wasm | Bin 521829 -> 526372 bytes src/TIVarFile.cpp | 16 ++++++++++ src/TIVarFile.h | 2 ++ src/TypeHandlers/TH_Tokenized.cpp | 51 ++++++++++++++++++++++++++++++ src/TypeHandlers/TypeHandlers.h | 2 ++ tests.cpp | 37 ++++++++++++++++++++++ 7 files changed, 109 insertions(+), 1 deletion(-) diff --git a/TIVarsLib.js b/TIVarsLib.js index 4d717b7..f6a9b20 100644 --- a/TIVarsLib.js +++ b/TIVarsLib.js @@ -5,7 +5,7 @@ var TIVarsLib = (() => { return ( async function(TIVarsLib = {}) { -var Module=typeof TIVarsLib!="undefined"?TIVarsLib:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){const{createRequire:createRequire}=await import("module");var require=createRequire(import.meta.url);var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=require("url").fileURLToPath(new URL("./",import.meta.url))}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;if(Module["locateFile"]){wasmBinaryFile="TIVarsLib.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}}else{wasmBinaryFile=new URL("TIVarsLib.wasm",import.meta.url).href}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(binaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(binaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(binaryFile)})}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(function(binary){return WebAssembly.instantiate(binary,imports)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["G"];updateMemoryViews();wasmTable=Module["asm"]["N"];addOnInit(Module["asm"]["H"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return{[name]:function(){return body.apply(this,arguments)}}[name]}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return 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(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAP32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["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(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function newFunc(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns||isAsync?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn,isAsync){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn,isAsync);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function HandleAllocator(){this.allocated=[undefined];this.freelist=[];this.get=function(id){return this.allocated[id]};this.allocate=function(handle){let id=this.freelist.pop()||this.allocated.length;this.allocated[id]=handle;return id};this.free=function(id){this.allocated[id]=undefined;this.freelist.push(id)}}var emval_handles=new HandleAllocator;function __emval_decref(handle){if(handle>=emval_handles.reserved&&0===--emval_handles.get(handle).refcount){emval_handles.free(handle)}}function count_emval_handles(){var count=0;for(var i=emval_handles.reserved;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handles.get(handle).value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{return emval_handles.allocate({refcount:1,value:value})}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_fs_load_embedded_files(ptr){do{var name_addr=HEAPU32[ptr>>2];ptr+=4;var len=HEAPU32[ptr>>2];ptr+=4;var content=HEAPU32[ptr>>2];ptr+=4;var name=UTF8ToString(name_addr);FS.createPath("/",PATH.dirname(name),true,true);FS.createDataFile(name,null,HEAP8.subarray(content,content+len),true,true,true)}while(HEAPU32[ptr>>2])}function __emval_incref(handle){if(handle>4){emval_handles.get(handle).refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_take_value(type,arg){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function stringToUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;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={"a":___assert_fail,"b":___cxa_throw,"l":___syscall_fcntl64,"B":___syscall_ioctl,"C":___syscall_openat,"t":__embind_register_bigint,"E":__embind_register_bool,"h":__embind_register_class,"f":__embind_register_class_class_function,"g":__embind_register_class_constructor,"c":__embind_register_class_function,"D":__embind_register_emval,"m":__embind_register_float,"e":__embind_register_integer,"d":__embind_register_memory_view,"n":__embind_register_std_string,"j":__embind_register_std_wstring,"F":__embind_register_void,"o":__emscripten_fs_load_embedded_files,"q":__emval_decref,"r":__emval_incref,"p":__emval_take_value,"i":_abort,"y":_emscripten_memcpy_big,"x":_emscripten_resize_heap,"v":_environ_get,"w":_environ_sizes_get,"k":_fd_close,"A":_fd_read,"s":_fd_seek,"z":_fd_write,"u":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["H"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["I"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["J"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["K"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["L"]).apply(null,arguments)};var __embind_initialize_bindings=Module["__embind_initialize_bindings"]=function(){return(__embind_initialize_bindings=Module["__embind_initialize_bindings"]=Module["asm"]["M"]).apply(null,arguments)};var _free=function(){return(_free=Module["asm"]["O"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["P"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["V"]).apply(null,arguments)};var ___emscripten_embedded_file_data=Module["___emscripten_embedded_file_data"]=42928;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["FS"]=FS;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv>>2;args.forEach(arg=>{HEAP32[argv_ptr++]=stringToUTF8OnStack(arg)});HEAP32[argv_ptr]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); +var Module=typeof TIVarsLib!="undefined"?TIVarsLib:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){const{createRequire:createRequire}=await import("module");var require=createRequire(import.meta.url);var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=require("url").fileURLToPath(new URL("./",import.meta.url))}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;if(Module["locateFile"]){wasmBinaryFile="TIVarsLib.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}}else{wasmBinaryFile=new URL("TIVarsLib.wasm",import.meta.url).href}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(binaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(binaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(binaryFile)})}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(function(binary){return WebAssembly.instantiate(binary,imports)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["K"];updateMemoryViews();wasmTable=Module["asm"]["R"];addOnInit(Module["asm"]["L"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAP32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return{[name]:function(){return body.apply(this,arguments)}}[name]}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function __embind_finalize_value_object(structType){var reg=structRegistrations[structType];delete structRegistrations[structType];var rawConstructor=reg.rawConstructor;var rawDestructor=reg.rawDestructor;var fieldRecords=reg.fields;var fieldTypes=fieldRecords.map(field=>field.getterReturnType).concat(fieldRecords.map(field=>field.setterArgumentType));whenDependentTypesAreResolved([structType],fieldTypes,fieldTypes=>{var fields={};fieldRecords.forEach((field,i)=>{var fieldName=field.fieldName;var getterReturnType=fieldTypes[i];var getter=field.getter;var getterContext=field.getterContext;var setterArgumentType=fieldTypes[i+fieldRecords.length];var setter=field.setter;var setterContext=field.setterContext;fields[fieldName]={read:ptr=>{return getterReturnType["fromWireType"](getter(getterContext,ptr))},write:(ptr,o)=>{var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,o));runDestructors(destructors)}}});return[{name:reg.name,"fromWireType":function(ptr){var rv={};for(var i in fields){rv[i]=fields[i].read(ptr)}rawDestructor(ptr);return rv},"toWireType":function(destructors,o){for(var fieldName in fields){if(!(fieldName in o)){throw new TypeError('Missing field: "'+fieldName+'"')}}var ptr=rawConstructor();for(fieldName in fields){fields[fieldName].write(ptr,o[fieldName])}if(destructors!==null){destructors.push(rawDestructor,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:rawDestructor}]})}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return 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(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["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(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function newFunc(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns||isAsync?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn,isAsync){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn,isAsync);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function HandleAllocator(){this.allocated=[undefined];this.freelist=[];this.get=function(id){return this.allocated[id]};this.allocate=function(handle){let id=this.freelist.pop()||this.allocated.length;this.allocated[id]=handle;return id};this.free=function(id){this.allocated[id]=undefined;this.freelist.push(id)}}var emval_handles=new HandleAllocator;function __emval_decref(handle){if(handle>=emval_handles.reserved&&0===--emval_handles.get(handle).refcount){emval_handles.free(handle)}}function count_emval_handles(){var count=0;for(var i=emval_handles.reserved;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handles.get(handle).value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{return emval_handles.allocate({refcount:1,value:value})}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_fs_load_embedded_files(ptr){do{var name_addr=HEAPU32[ptr>>2];ptr+=4;var len=HEAPU32[ptr>>2];ptr+=4;var content=HEAPU32[ptr>>2];ptr+=4;var name=UTF8ToString(name_addr);FS.createPath("/",PATH.dirname(name),true,true);FS.createDataFile(name,null,HEAP8.subarray(content,content+len),true,true,true)}while(HEAPU32[ptr>>2])}function __emval_incref(handle){if(handle>4){emval_handles.get(handle).refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_take_value(type,arg){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function stringToUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var wasmImports={"a":___assert_fail,"b":___cxa_throw,"m":___syscall_fcntl64,"D":___syscall_ioctl,"E":___syscall_openat,"J":__embind_finalize_value_object,"v":__embind_register_bigint,"G":__embind_register_bool,"h":__embind_register_class,"f":__embind_register_class_class_function,"g":__embind_register_class_constructor,"c":__embind_register_class_function,"F":__embind_register_emval,"n":__embind_register_float,"p":__embind_register_function,"e":__embind_register_integer,"d":__embind_register_memory_view,"o":__embind_register_std_string,"j":__embind_register_std_wstring,"q":__embind_register_value_object,"k":__embind_register_value_object_field,"H":__embind_register_void,"I":__emscripten_fs_load_embedded_files,"s":__emval_decref,"t":__emval_incref,"r":__emval_take_value,"i":_abort,"A":_emscripten_memcpy_big,"z":_emscripten_resize_heap,"x":_environ_get,"y":_environ_sizes_get,"l":_fd_close,"C":_fd_read,"u":_fd_seek,"B":_fd_write,"w":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["L"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["M"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["N"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["O"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["P"]).apply(null,arguments)};var __embind_initialize_bindings=Module["__embind_initialize_bindings"]=function(){return(__embind_initialize_bindings=Module["__embind_initialize_bindings"]=Module["asm"]["Q"]).apply(null,arguments)};var _free=function(){return(_free=Module["asm"]["S"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["T"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["U"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["V"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["W"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["X"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["Y"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["Z"]).apply(null,arguments)};var ___emscripten_embedded_file_data=Module["___emscripten_embedded_file_data"]=42928;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["FS"]=FS;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv>>2;args.forEach(arg=>{HEAP32[argv_ptr++]=stringToUTF8OnStack(arg)});HEAP32[argv_ptr]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); return TIVarsLib.ready diff --git a/TIVarsLib.wasm b/TIVarsLib.wasm index da9f4a39dae07d1bcb7da3a0e29627dd695c3f09..351dc3215cdc66dc8d11712ee702cadc4c991264 100755 GIT binary patch delta 143581 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 delta 138915 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

Mmfifn$p5Ow&b5A;_4 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 EKey*zoB#j- diff --git a/src/TIVarFile.cpp b/src/TIVarFile.cpp index 4c5526f..273399c 100644 --- a/src/TIVarFile.cpp +++ b/src/TIVarFile.cpp @@ -6,12 +6,16 @@ */ #include "TIVarFile.h" + +#include + #include "tivarslib_utils.h" #include "TIModels.h" #include #include #include +#include namespace tivars { @@ -338,6 +342,17 @@ namespace tivars return this->getRawContent(0); } + std::string TIVarFile::getRawContentHexStr() + { + const data_t rawContent = getRawContent(); + std::ostringstream result; + for (const auto& v : rawContent) + { + result << std::setfill('0') << std::setw(sizeof(v) * 2) << std::hex << +v; + } + return result.str(); + } + std::string TIVarFile::getReadableContent(const options_t& options, uint16_t entryIdx) { const auto& entry = this->entries[entryIdx]; @@ -474,6 +489,7 @@ namespace tivars .function("setArchived" , select_overload(&tivars::TIVarFile::setArchived)) .function("isCorrupt" , &tivars::TIVarFile::isCorrupt) .function("getRawContent" , select_overload(&tivars::TIVarFile::getRawContent)) + .function("getRawContentHexStr" , &tivars::TIVarFile::getRawContentHexStr) .function("getReadableContent" , select_overload(&tivars::TIVarFile::getReadableContent)) .function("getReadableContent" , select_overload(&tivars::TIVarFile::getReadableContent)) diff --git a/src/TIVarFile.h b/src/TIVarFile.h index 695eed1..ed1439e 100644 --- a/src/TIVarFile.h +++ b/src/TIVarFile.h @@ -91,6 +91,8 @@ namespace tivars data_t getRawContent(uint16_t entryIdx); data_t getRawContent(); + std::string getRawContentHexStr(); + std::string getReadableContent(const options_t& options, uint16_t entryIdx); std::string getReadableContent(const options_t& options); std::string getReadableContent(); diff --git a/src/TypeHandlers/TH_Tokenized.cpp b/src/TypeHandlers/TH_Tokenized.cpp index 0aca9ff..1af3c4a 100644 --- a/src/TypeHandlers/TH_Tokenized.cpp +++ b/src/TypeHandlers/TH_Tokenized.cpp @@ -351,6 +351,27 @@ namespace tivars return tokStr; } + std::string TH_Tokenized::oneTokenBytesToString(uint16_t tokenBytes) + { + if (tokenBytes < 0xFF && is_in_vector(firstByteOfTwoByteTokens, (uint8_t)(tokenBytes & 0xFF))) + { + std::cerr << "[Warning] Encountered an unfinished two-byte token!"; + return ""; + } + + std::string tokStr; + if (tokens_BytesToName.find(tokenBytes) != tokens_BytesToName.end()) + { + tokStr = tokens_BytesToName[tokenBytes][LANG_EN]; + } else { + tokStr = " [???] "; + } + + tokStr = std::regex_replace(tokStr, toPrettifyRX, "$1"); + + return tokStr; + } + TH_Tokenized::token_posinfo TH_Tokenized::getPosInfoAtOffset(const data_t& data, uint16_t byteOffset, const options_t& options) { const size_t dataSize = data.size(); @@ -429,6 +450,21 @@ namespace tivars return posinfo; } + TH_Tokenized::token_posinfo TH_Tokenized::getPosInfoAtOffsetFromHexStr(const std::string& hexBytesStr, uint16_t byteOffset) + { + const size_t strLen = hexBytesStr.length(); + if (strLen % 2 != 0 || strLen > 65500 * 2) // todo: actual len? + { + throw std::invalid_argument("invalid hexBytesStr length!"); + } + + data_t data; + for (size_t i = 0; i < strLen; i += 2) { + data.push_back((char) strtol(hexBytesStr.substr(i, 2).c_str(), nullptr, 16)); + } + + return getPosInfoAtOffset(data, byteOffset, { { "prettify", 1 } }); + } void TH_Tokenized::initTokens() { @@ -488,3 +524,18 @@ namespace tivars } } + +#ifdef __EMSCRIPTEN__ + #include + using namespace emscripten; + EMSCRIPTEN_BINDINGS(_thtokenized) { + + value_object("token_posinfo") + .field("line", &tivars::TH_Tokenized::token_posinfo::line) + .field("column", &tivars::TH_Tokenized::token_posinfo::column) + .field("len", &tivars::TH_Tokenized::token_posinfo::len); + + function("TH_Tokenized_getPosInfoAtOffsetFromHexStr", &tivars::TH_Tokenized::getPosInfoAtOffsetFromHexStr); + function("TH_Tokenized_oneTokenBytesToString" , &tivars::TH_Tokenized::oneTokenBytesToString); + } +#endif diff --git a/src/TypeHandlers/TypeHandlers.h b/src/TypeHandlers/TypeHandlers.h index b5fdb41..e9b0843 100644 --- a/src/TypeHandlers/TypeHandlers.h +++ b/src/TypeHandlers/TypeHandlers.h @@ -94,7 +94,9 @@ namespace tivars struct token_posinfo { uint16_t line; uint16_t column; uint8_t len; }; std::string reindentCodeString(const std::string& str_orig, const options_t& options = options_t()); token_posinfo getPosInfoAtOffset(const data_t& data, uint16_t byteOffset, const options_t& options = options_t()); + token_posinfo getPosInfoAtOffsetFromHexStr(const std::string& hexBytesStr, uint16_t byteOffset); std::string tokenToString(const data_t& data, int *incr, const options_t& options); + std::string oneTokenBytesToString(uint16_t tokenBytes); void initTokens(); void initTokensFromCSVFilePath(const std::string& csvFilePath); void initTokensFromCSVContent(const std::string& csvFileStr); diff --git a/tests.cpp b/tests.cpp index 7af36a4..8b7a059 100644 --- a/tests.cpp +++ b/tests.cpp @@ -64,6 +64,42 @@ int main(int argc, char** argv) assert(trim(testPrgmStr1.getReadableContent({{"prettify", true}, {"reindent", true}})) == "\"42→Str1\nStr2\n123"); } + { + assert(TH_Tokenized::oneTokenBytesToString(0x00) == ""); + assert(TH_Tokenized::oneTokenBytesToString(0xBB) == ""); + assert(TH_Tokenized::oneTokenBytesToString(0x3F) == "\n"); + assert(TH_Tokenized::oneTokenBytesToString(0xAD) == "getKey"); + assert(TH_Tokenized::oneTokenBytesToString(0xEF97) == "toString("); + } + + { + TH_Tokenized::token_posinfo actual{}, expected{}; + const data_t data = { 0x12,0x00,0x41,0x40,0x42,0x3f,0xde,0x2a,0x41,0x29,0xbb,0xb0,0xbb,0xbe,0xbb,0xb3,0x29,0x42,0x2a,0x3f }; + actual = TH_Tokenized::getPosInfoAtOffset(data, 2); + expected = { 0, 0, 1 }; + assert(memcmp(&actual, &expected, sizeof(actual)) == 0); + actual = TH_Tokenized::getPosInfoAtOffset(data, 3); + expected = { 0, 1, 5 }; + assert(memcmp(&actual, &expected, sizeof(actual)) == 0); + actual = TH_Tokenized::getPosInfoAtOffset(data, 6); + expected = { 1, 0, 5 }; + assert(memcmp(&actual, &expected, sizeof(actual)) == 0); + } + + { + TH_Tokenized::token_posinfo actual{}, expected{}; + const std::string hexStr = "12004140423fde2a4129bbb0bbbebbb329422a3f"; + actual = TH_Tokenized::getPosInfoAtOffsetFromHexStr(hexStr, 2); + expected = { 0, 0, 1 }; + assert(memcmp(&actual, &expected, sizeof(actual)) == 0); + actual = TH_Tokenized::getPosInfoAtOffsetFromHexStr(hexStr, 3); + expected = { 0, 1, 5 }; + assert(memcmp(&actual, &expected, sizeof(actual)) == 0); + actual = TH_Tokenized::getPosInfoAtOffsetFromHexStr(hexStr, 6); + expected = { 1, 0, 5 }; + assert(memcmp(&actual, &expected, sizeof(actual)) == 0); + } + { // Test string interpolation behaviour TIVarFile testPrgm = TIVarFile::createNew("Program", "INTERP"); @@ -133,6 +169,7 @@ int main(int argc, char** argv) { TIVarFile testReal = TIVarFile::loadFromFile("testData/Real.8xn"); assert(testReal.getRawContent() == data_t({0x80,0x81,0x42,0x13,0x37,0x00,0x00,0x00,0x00})); + assert(testReal.getRawContentHexStr() == "808142133700000000"); assert(testReal.getReadableContent() == "-42.1337"); testReal.setContentFromString("5"); cout << "testReal.getReadableContent() : " << testReal.getReadableContent() << endl;