@wasm-fmt/clang-format 19.1.0 → 19.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,3846 @@
1
- var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=true;if(ENVIRONMENT_IS_NODE){}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;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["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;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.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++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){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);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){var f="clang-format-cli.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(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)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{a:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["Q"];updateMemoryViews();wasmTable=wasmExports["S"];addOnInit(wasmExports["R"]);removeRunDependency("wasm-instantiate");return wasmExports}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}`);return false}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||true;var wasmTable;var getWasmTableEntry=funcPtr=>wasmTable.get(funcPtr);var ___call_sighandler=(fp,sig)=>getWasmTableEntry(fp)(sig);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var PATH={isAbs:path=>nodePath["isAbsolute"](path),normalize:path=>nodePath["normalize"](path),dirname:path=>nodePath["dirname"](path),basename:path=>nodePath["basename"](path),join:(...args)=>nodePath["join"](...args),join2:(l,r)=>nodePath["join"](l,r)};var 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")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...paths)=>{paths.unshift(FS.cwd());return nodePath["posix"]["resolve"](...paths)},relative:(from,to)=>nodePath["posix"]["relative"](from||FS.cwd(),to||FS.cwd())};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var 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<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=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 FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char(tty){return FS_stdin_getChar()},put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size);return address};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;return zeroMemory(ptr,size)};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}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(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(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<CAPACITY_DOUBLING_MAX?2:1.125)>>>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(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(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(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(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(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},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(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(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}if(contents){if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}HEAP8.set(contents,ptr)}}return{ptr:ptr,allocated:allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_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){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var NODEFS={isWindows:false,staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process.binding("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],256:flags["O_NOCTTY"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"],131072:flags["O_NOFOLLOW"]}},convertNodeCode(e){var code=e.code;return ERRNO_CODES[code]},tryFSOperation(f){try{return f()}catch(e){if(!e.code)throw e;if(e.code==="UNKNOWN")throw new FS.ErrnoError(28);throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},mount(mount){return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(28)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode(path){var stat;return NODEFS.tryFSOperation(()=>{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode|=(stat.mode&292)>>2}return stat.mode})},realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join(...parts)},flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;flags&=~65536;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(flags){throw new FS.ErrnoError(28)}return newFlags},node_ops:{getattr(node){var path=NODEFS.realPath(node);var stat;NODEFS.tryFSOperation(()=>stat=fs.lstatSync(path));if(NODEFS.isWindows){if(!stat.blksize){stat.blksize=4096}if(!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}stat.mode|=(stat.mode&292)>>2}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr(node,attr){var path=NODEFS.realPath(node);NODEFS.tryFSOperation(()=>{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}})},lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);NODEFS.tryFSOperation(()=>{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}});return node},rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);NODEFS.tryFSOperation(()=>fs.renameSync(oldPath,newPath));oldNode.name=newName},unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);NODEFS.tryFSOperation(()=>fs.unlinkSync(path))},rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);NODEFS.tryFSOperation(()=>fs.rmdirSync(path))},readdir(node){var path=NODEFS.realPath(node);return NODEFS.tryFSOperation(()=>fs.readdirSync(path))},symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);NODEFS.tryFSOperation(()=>fs.symlinkSync(oldPath,newPath))},readlink(node){var path=NODEFS.realPath(node);return NODEFS.tryFSOperation(()=>fs.readlinkSync(path))}},stream_ops:{open(stream){var path=NODEFS.realPath(stream.node);NODEFS.tryFSOperation(()=>{if(FS.isFile(stream.node.mode)){stream.shared.refcount=1;stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}})},close(stream){NODEFS.tryFSOperation(()=>{if(FS.isFile(stream.node.mode)&&stream.nfd&&--stream.shared.refcount===0){fs.closeSync(stream.nfd)}})},dup(stream){stream.shared.refcount++},read(stream,buffer,offset,length,position){if(length===0)return 0;return NODEFS.tryFSOperation(()=>fs.readSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position))},write(stream,buffer,offset,length,position){return NODEFS.tryFSOperation(()=>fs.writeSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position))},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){NODEFS.tryFSOperation(()=>{var stat=fs.fstatSync(stream.nfd);position+=stat.size})}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr=mmapAlloc(length);NODEFS.stream_ops.read(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}},msync(stream,buffer,offset,length,mmapFlags){NODEFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var NODERAWFS={init(){var _wrapNodeError=function(func){return function(...args){try{return func(...args)}catch(e){if(e.code){throw new FS.ErrnoError(ERRNO_CODES[e.code])}throw e}}};for(var _key in NODERAWFS){FS[_key]=_wrapNodeError(NODERAWFS[_key])}FS.createStandardStreams()},lookup(parent,name){return FS.lookupPath(`${parent.path}/${name}`).node},lookupPath(path,opts={}){if(opts.parent){path=nodePath.dirname(path)}var st=fs.lstatSync(path);var mode=NODEFS.getMode(path);return{path:path,node:{id:st.ino,mode:mode,node_ops:NODERAWFS,path:path}}},createStandardStreams(){FS.createStream({nfd:0,position:0,path:"",flags:0,tty:true,seekable:false},0);for(var i=1;i<3;i++){FS.createStream({nfd:i,position:0,path:"",flags:577,tty:true,seekable:false},i)}},cwd(){return process.cwd()},chdir(...args){process.chdir(...args)},mknod(path,mode){if(FS.isDir(path)){fs.mkdirSync(path,mode)}else{fs.writeFileSync(path,"",{mode:mode})}},mkdir(...args){fs.mkdirSync(...args)},symlink(...args){fs.symlinkSync(...args)},rename(...args){fs.renameSync(...args)},rmdir(...args){fs.rmdirSync(...args)},readdir(...args){return[".",".."].concat(fs.readdirSync(...args))},unlink(...args){fs.unlinkSync(...args)},readlink(...args){return fs.readlinkSync(...args)},stat(...args){return fs.statSync(...args)},lstat(...args){return fs.lstatSync(...args)},chmod(...args){fs.chmodSync(...args)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);fs.fchmodSync(stream.nfd,mode)},chown(...args){fs.chownSync(...args)},fchown(fd,owner,group){var stream=FS.getStreamChecked(fd);fs.fchownSync(stream.nfd,owner,group)},truncate(...args){fs.truncateSync(...args)},ftruncate(fd,len){if(len<0){throw new FS.ErrnoError(28)}var stream=FS.getStreamChecked(fd);fs.ftruncateSync(stream.nfd,len)},utime(path,atime,mtime){fs.utimesSync(path,atime/1e3,mtime/1e3)},open(path,flags,mode){if(typeof flags=="string"){flags=FS_modeStringToFlags(flags)}var pathTruncated=path.split("/").map(function(s){return s.substr(0,255)}).join("/");var nfd=fs.openSync(pathTruncated,NODEFS.flagsForNode(flags),mode);var st=fs.fstatSync(nfd);if(flags&65536&&!st.isDirectory()){fs.closeSync(nfd);throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var newMode=NODEFS.getMode(pathTruncated);var node={id:st.ino,mode:newMode,node_ops:NODERAWFS,path:path};return FS.createStream({nfd:nfd,position:0,path:path,flags:flags,node:node,seekable:true})},createStream(stream,fd){var rtn=VFS.createStream(stream,fd);if(typeof rtn.shared.refcnt=="undefined"){rtn.shared.refcnt=1}else{rtn.shared.refcnt++}return rtn},close(stream){VFS.closeStream(stream.fd);if(!stream.stream_ops&&--stream.shared.refcnt===0){fs.closeSync(stream.nfd)}},llseek(stream,offset,whence){if(stream.stream_ops){return VFS.llseek(stream,offset,whence)}var position=offset;if(whence===1){position+=stream.position}else if(whence===2){position+=fs.fstatSync(stream.nfd).size}else if(whence!==0){throw new FS.ErrnoError(28)}if(position<0){throw new FS.ErrnoError(28)}stream.position=position;return position},read(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.read(stream,buffer,offset,length,position)}var seeking=typeof position!="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesRead=fs.readSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.write(stream,buffer,offset,length,position)}if(stream.flags&+"1024"){FS.llseek(stream,0,+"2")}var seeking=typeof position!="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesWritten=fs.writeSync(stream.nfd,new Int8Array(buffer.buffer,offset,length),0,length,position);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate(){throw new FS.ErrnoError(138)},mmap(stream,length,position,prot,flags){if(!length){throw new FS.ErrnoError(28)}if(stream.stream_ops){return VFS.mmap(stream,length,position,prot,flags)}var ptr=mmapAlloc(length);FS.read(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}},msync(stream,buffer,offset,length,mmapFlags){if(stream.stream_ops){return VFS.msync(stream,buffer,offset,length,mmapFlags)}FS.write(stream,buffer,0,length,offset);return 0},ioctl(){throw new FS.ErrnoError(59)}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(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;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},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;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count+1});current=lookup.node;if(count++>40){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<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>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)}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},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){if(!FS.isDir(dir.mode))return 54;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(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;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(...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<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){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);old_node.parent=new_dir}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.getStreamChecked(fd);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.getStreamChecked(fd);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.getStreamChecked(fd);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;if(flags&64){mode=typeof mode=="undefined"?438:mode;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)}if(!length){throw new FS.ErrnoError(28)}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)},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.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}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)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS:MEMFS,NODEFS:NODEFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){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?.buffer?.length){output(10)}},read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile(obj){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{try{obj.contents=readBinary(obj.url);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}},createLazyFile(parent,name,url,canRead,canWrite){class LazyUint8Array{constructor(){this.lengthKnown=false;this.chunks=[]}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]}setDataGetter(getter){this.getter=getter}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}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}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;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]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size}stream_ops.read=(stream,buffer,offset,length,position)=>{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}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(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(func,path,buf){var stat=func(path);HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>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.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAPU32[buf+48>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>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]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>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]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];return 0},doMsync(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)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function syscallGetVarargI(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret}var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size<cwdLengthInBytes)return-68;stringToUTF8(cwd,buf,size);return cwdLengthInBytes}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx<stream.getdents.length&&pos+struct_size<=count){var id;var type;var name=stream.getdents[idx];if(name==="."){id=stream.node.id;type=4}else if(name===".."){var lookup=FS.lookupPath(stream.path,{parent:true});id=lookup.node.id;type=4}else{var child=FS.lookupNode(stream.node,name);id=child.id;type=FS.isChrdev(child.mode)?2:FS.isDir(child.mode)?4:FS.isLink(child.mode)?10:8}tempI64=[id>>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}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:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{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_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}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?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("")};var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function __gmtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}function __mmap_js(len,prot,flags,fd,offset_low,offset_high,allocated,addr){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var timers={};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id:id,timeout_ms:timeout_ms};return 0};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var _emscripten_date_now=()=>Date.now();var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var 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};var stringToAscii=(str,buffer)=>{for(var i=0;i<str.length;++i){HEAP8[buffer++]=str.charCodeAt(i)}HEAP8[buffer]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(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 _fd_fdstat_get(fd,pbuf){try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;HEAP16[pbuf+2>>1]=flags;tempI64=[rightsBase>>>0,(tempDouble=rightsBase,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+8>>2]=tempI64[0],HEAP32[pbuf+12>>2]=tempI64[1];tempI64=[rightsInheriting>>>0,(tempDouble=rightsInheriting,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+16>>2]=tempI64[0],HEAP32[pbuf+20>>2]=tempI64[1];return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>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<len)break;if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_pread(fd,iov,iovcnt,offset_low,offset_high,pnum){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt,offset);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{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.floor(tempDouble/4294967296)>>>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}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>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(curr<len){break}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}}var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();if(ENVIRONMENT_IS_NODE){NODEFS.staticInit()}if(!ENVIRONMENT_IS_NODE){throw new Error("NODERAWFS is currently only supported on Node.js environment.")}var VFS=Object.assign({},FS);FS.init=NODERAWFS.init;var wasmImports={E:___call_sighandler,d:___cxa_throw,l:___syscall_chdir,m:___syscall_faccessat,i:___syscall_fcntl64,N:___syscall_fstat64,J:___syscall_getcwd,D:___syscall_getdents64,v:___syscall_ioctl,K:___syscall_lstat64,L:___syscall_newfstatat,h:___syscall_openat,C:___syscall_readlinkat,A:___syscall_renameat,B:___syscall_rmdir,M:___syscall_stat64,y:___syscall_statfs64,f:___syscall_unlinkat,n:__abort_js,O:__emscripten_get_now_is_monotonic,k:__emscripten_memcpy_js,F:__emscripten_runtime_keepalive_clear,s:__gmtime_js,t:__localtime_js,p:__mmap_js,r:__munmap_js,e:__setitimer_js,G:__tzset_js,P:_emscripten_date_now,x:_emscripten_get_heap_max,j:_emscripten_get_now,w:_emscripten_resize_heap,q:_environ_get,z:_environ_sizes_get,a:_exit,b:_fd_close,I:_fd_fdstat_get,o:_fd_pread,g:_fd_read,u:_fd_seek,c:_fd_write,H:_proc_exit};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["R"])();var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["T"])(a0,a1);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports["U"])(a0,a1);var __emscripten_timeout=(a0,a1)=>(__emscripten_timeout=wasmExports["V"])(a0,a1);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["W"])(a0);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;args.forEach(arg=>{HEAPU32[argv_ptr>>2]=stringToUTF8OnStack(arg);argv_ptr+=4});HEAPU32[argv_ptr>>2]=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();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();
1
+ #!/usr/bin/env node
2
+ var Module = typeof Module != 'undefined' ? Module : {};
3
+ var ENVIRONMENT_IS_WORKER = false;
4
+ var ENVIRONMENT_IS_NODE = true;
5
+ if (ENVIRONMENT_IS_NODE) {
6
+ }
7
+ var moduleOverrides = Object.assign({}, Module);
8
+ var arguments_ = [];
9
+ var thisProgram = './this.program';
10
+ var quit_ = (status, toThrow) => {
11
+ throw toThrow
12
+ };
13
+ var scriptDirectory = '';
14
+ function locateFile(path) {
15
+ if (Module['locateFile']) {
16
+ return Module['locateFile'](path, scriptDirectory)
17
+ }
18
+ return scriptDirectory + path
19
+ }
20
+ var readAsync, readBinary;
21
+ if (ENVIRONMENT_IS_NODE) {
22
+ var fs = require('fs');
23
+ var nodePath = require('path');
24
+ scriptDirectory = __dirname + '/';
25
+ readBinary = filename => {
26
+ filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
27
+ var ret = fs.readFileSync(filename);
28
+ return ret
29
+ };
30
+ readAsync = (filename, binary = true) => {
31
+ filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
32
+ return new Promise((resolve, reject) => {fs.readFile(filename, binary ? undefined : 'utf8', (err, data) => {
33
+ if (err)
34
+ reject(err);
35
+ else
36
+ resolve(binary ? data.buffer : data)
37
+ })})
38
+ };
39
+ if (!Module['thisProgram'] && process.argv.length > 1) {
40
+ thisProgram = process.argv[1].replace(/\\/g, '/')
41
+ }
42
+ arguments_ = process.argv.slice(2);
43
+ if (typeof module != 'undefined') {
44
+ module['exports'] = Module
45
+ }
46
+ quit_ = (status, toThrow) => {
47
+ process.exitCode = status;
48
+ throw toThrow
49
+ }
50
+ } else {
51
+ }
52
+ var out = Module['print'] || console.log.bind(console);
53
+ var err = Module['printErr'] || console.error.bind(console);
54
+ Object.assign(Module, moduleOverrides);
55
+ moduleOverrides = null;
56
+ if (Module['arguments']) arguments_ = Module['arguments'];
57
+ if (Module['thisProgram']) thisProgram = Module['thisProgram'];
58
+ var wasmBinary = Module['wasmBinary'];
59
+ var wasmMemory;
60
+ var ABORT = false;
61
+ var EXITSTATUS;
62
+ var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
63
+ function updateMemoryViews() {
64
+ var b = wasmMemory.buffer;
65
+ Module['HEAP8'] = HEAP8 = new Int8Array(b);
66
+ Module['HEAP16'] = HEAP16 = new Int16Array(b);
67
+ Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);
68
+ Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);
69
+ Module['HEAP32'] = HEAP32 = new Int32Array(b);
70
+ Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);
71
+ Module['HEAPF32'] = HEAPF32 = new Float32Array(b);
72
+ Module['HEAPF64'] = HEAPF64 = new Float64Array(b)
73
+ }
74
+ var __ATPRERUN__ = [];
75
+ var __ATINIT__ = [];
76
+ var __ATMAIN__ = [];
77
+ var __ATPOSTRUN__ = [];
78
+ var runtimeInitialized = false;
79
+ function preRun() {
80
+ if (Module['preRun']) {
81
+ if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
82
+ while (Module['preRun'].length) {
83
+ addOnPreRun(Module['preRun'].shift())
84
+ }
85
+ }
86
+ callRuntimeCallbacks(__ATPRERUN__)
87
+ }
88
+ function initRuntime() {
89
+ runtimeInitialized = true;
90
+ if (!Module['noFSInit'] && !FS.initialized) FS.init();
91
+ FS.ignorePermissions = false;
92
+ TTY.init();
93
+ callRuntimeCallbacks(__ATINIT__)
94
+ }
95
+ function preMain() {
96
+ callRuntimeCallbacks(__ATMAIN__)
97
+ }
98
+ function postRun() {
99
+ if (Module['postRun']) {
100
+ if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
101
+ while (Module['postRun'].length) {
102
+ addOnPostRun(Module['postRun'].shift())
103
+ }
104
+ }
105
+ callRuntimeCallbacks(__ATPOSTRUN__)
106
+ }
107
+ function addOnPreRun(cb) {
108
+ __ATPRERUN__.unshift(cb)
109
+ }
110
+ function addOnInit(cb) {
111
+ __ATINIT__.unshift(cb)
112
+ }
113
+ function addOnPostRun(cb) {
114
+ __ATPOSTRUN__.unshift(cb)
115
+ }
116
+ var runDependencies = 0;
117
+ var runDependencyWatcher = null;
118
+ var dependenciesFulfilled = null;
119
+ function getUniqueRunDependency(id) {
120
+ return id
121
+ }
122
+ function addRunDependency(id) {
123
+ runDependencies++;
124
+ Module['monitorRunDependencies']?.(runDependencies)
125
+ }
126
+ function removeRunDependency(id) {
127
+ runDependencies--;
128
+ Module['monitorRunDependencies']?.(runDependencies);
129
+ if (runDependencies == 0) {
130
+ if (runDependencyWatcher !== null) {
131
+ clearInterval(runDependencyWatcher);
132
+ runDependencyWatcher = null
133
+ }
134
+ if (dependenciesFulfilled) {
135
+ var callback = dependenciesFulfilled;
136
+ dependenciesFulfilled = null;
137
+ callback()
138
+ }
139
+ }
140
+ }
141
+ function abort(what) {
142
+ Module['onAbort']?.(what);
143
+ what = 'Aborted(' + what + ')';
144
+ err(what);
145
+ ABORT = true;
146
+ EXITSTATUS = 1;
147
+ what += '. Build with -sASSERTIONS for more info.';
148
+ var e = new WebAssembly.RuntimeError(what);
149
+ throw e
150
+ }
151
+ var dataURIPrefix = 'data:application/octet-stream;base64,';
152
+ var isDataURI = filename => filename.startsWith(dataURIPrefix);
153
+ var isFileURI = filename => filename.startsWith('file://');
154
+ function findWasmBinary() {
155
+ var f = 'clang-format-cli.wasm';
156
+ if (!isDataURI(f)) {
157
+ return locateFile(f)
158
+ }
159
+ return f
160
+ }
161
+ var wasmBinaryFile;
162
+ function getBinarySync(file) {
163
+ if (file == wasmBinaryFile && wasmBinary) {
164
+ return new Uint8Array(wasmBinary)
165
+ }
166
+ if (readBinary) {
167
+ return readBinary(file)
168
+ }
169
+ throw 'both async and sync fetching of the wasm failed'
170
+ }
171
+ function getBinaryPromise(binaryFile) {
172
+ if (!wasmBinary) {
173
+ return readAsync(binaryFile).then(response => new Uint8Array(response), () => getBinarySync(binaryFile))
174
+ }
175
+ return Promise.resolve().then(() => getBinarySync(binaryFile))
176
+ }
177
+ function instantiateArrayBuffer(binaryFile, imports, receiver) {
178
+ return getBinaryPromise(binaryFile)
179
+ .then(binary => WebAssembly.instantiate(binary, imports))
180
+ .then(receiver, reason => {
181
+ err(`failed to asynchronously prepare wasm: ${reason}`);
182
+ abort(reason)
183
+ })
184
+ }
185
+ function instantiateAsync(binary, binaryFile, imports, callback) {
186
+ if (!binary && typeof WebAssembly.instantiateStreaming == 'function' && !isDataURI(binaryFile) &&
187
+ !ENVIRONMENT_IS_NODE && typeof fetch == 'function') {
188
+ return fetch(binaryFile, {credentials: 'same-origin'}).then(response => {
189
+ var result = WebAssembly.instantiateStreaming(response, imports);
190
+ return result.then(callback, function(reason) {
191
+ err(`wasm streaming compile failed: ${reason}`);
192
+ err('falling back to ArrayBuffer instantiation');
193
+ return instantiateArrayBuffer(binaryFile, imports, callback)
194
+ })
195
+ })
196
+ }
197
+ return instantiateArrayBuffer(binaryFile, imports, callback)
198
+ }
199
+ function getWasmImports() {
200
+ return {
201
+ a: wasmImports
202
+ }
203
+ }
204
+ function createWasm() {
205
+ var info = getWasmImports();
206
+ function receiveInstance(instance, module) {
207
+ wasmExports = instance.exports;
208
+ wasmMemory = wasmExports['Q'];
209
+ updateMemoryViews();
210
+ wasmTable = wasmExports['S'];
211
+ addOnInit(wasmExports['R']);
212
+ removeRunDependency('wasm-instantiate');
213
+ return wasmExports
214
+ }
215
+ addRunDependency('wasm-instantiate');
216
+ function receiveInstantiationResult(result) {
217
+ receiveInstance(result['instance'])
218
+ }
219
+ if (Module['instantiateWasm']) {
220
+ try {
221
+ return Module['instantiateWasm'](info, receiveInstance)
222
+ } catch (e) {
223
+ err(`Module.instantiateWasm callback failed with error: ${e}`);
224
+ return false
225
+ }
226
+ }
227
+ if (!wasmBinaryFile) wasmBinaryFile = findWasmBinary();
228
+ instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult);
229
+ return {
230
+ }
231
+ }
232
+ var tempDouble;
233
+ var tempI64;
234
+ function ExitStatus(status) {
235
+ this.name = 'ExitStatus';
236
+ this.message = `Program terminated with exit(${status})`;
237
+ this.status = status
238
+ }
239
+ var callRuntimeCallbacks = callbacks => {
240
+ while (callbacks.length > 0) {
241
+ callbacks.shift()(Module)
242
+ }
243
+ };
244
+ var noExitRuntime = Module['noExitRuntime'] || true;
245
+ var wasmTable;
246
+ var getWasmTableEntry = funcPtr => wasmTable.get(funcPtr);
247
+ var ___call_sighandler = (fp, sig) => getWasmTableEntry(fp)(sig);
248
+ class ExceptionInfo {
249
+ constructor(excPtr) {
250
+ this.excPtr = excPtr;
251
+ this.ptr = excPtr - 24
252
+ }
253
+ set_type(type) {
254
+ HEAPU32[this.ptr + 4 >> 2] = type
255
+ }
256
+ get_type() {
257
+ return HEAPU32[this.ptr + 4 >> 2]
258
+ }
259
+ set_destructor(destructor) {
260
+ HEAPU32[this.ptr + 8 >> 2] = destructor
261
+ }
262
+ get_destructor() {
263
+ return HEAPU32[this.ptr + 8 >> 2]
264
+ }
265
+ set_caught(caught) {
266
+ caught = caught ? 1 : 0;
267
+ HEAP8[this.ptr + 12] = caught
268
+ }
269
+ get_caught() {
270
+ return HEAP8[this.ptr + 12] != 0
271
+ }
272
+ set_rethrown(rethrown) {
273
+ rethrown = rethrown ? 1 : 0;
274
+ HEAP8[this.ptr + 13] = rethrown
275
+ }
276
+ get_rethrown() {
277
+ return HEAP8[this.ptr + 13] != 0
278
+ }
279
+ init(type, destructor) {
280
+ this.set_adjusted_ptr(0);
281
+ this.set_type(type);
282
+ this.set_destructor(destructor)
283
+ }
284
+ set_adjusted_ptr(adjustedPtr) {
285
+ HEAPU32[this.ptr + 16 >> 2] = adjustedPtr
286
+ }
287
+ get_adjusted_ptr() {
288
+ return HEAPU32[this.ptr + 16 >> 2]
289
+ }
290
+ }
291
+ var exceptionLast = 0;
292
+ var uncaughtExceptionCount = 0;
293
+ var ___cxa_throw = (ptr, type, destructor) => {
294
+ var info = new ExceptionInfo(ptr);
295
+ info.init(type, destructor);
296
+ exceptionLast = ptr;
297
+ uncaughtExceptionCount++;
298
+ throw exceptionLast
299
+ };
300
+ var PATH = {
301
+ isAbs: path => nodePath['isAbsolute'](path),
302
+ normalize: path => nodePath['normalize'](path),
303
+ dirname: path => nodePath['dirname'](path),
304
+ basename: path => nodePath['basename'](path),
305
+ join: (...args) => nodePath['join'](...args),
306
+ join2: (l, r) => nodePath['join'](l, r)
307
+ };
308
+ var initRandomFill = () => {
309
+ if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') {
310
+ return view => crypto.getRandomValues(view)
311
+ } else if (ENVIRONMENT_IS_NODE) {
312
+ try {
313
+ var crypto_module = require('crypto');
314
+ var randomFillSync = crypto_module['randomFillSync'];
315
+ if (randomFillSync) {
316
+ return view => crypto_module['randomFillSync'](view)
317
+ }
318
+ var randomBytes = crypto_module['randomBytes'];
319
+ return view => (view.set(randomBytes(view.byteLength)), view)
320
+ } catch (e) {
321
+ }
322
+ }
323
+ abort('initRandomDevice')
324
+ };
325
+ var randomFill = view => (randomFill = initRandomFill())(view);
326
+ var PATH_FS = {
327
+ resolve: (...paths) => {
328
+ paths.unshift(FS.cwd());
329
+ return nodePath['posix']['resolve'](...paths)
330
+ },
331
+ relative: (from, to) => nodePath['posix']['relative'](from || FS.cwd(), to || FS.cwd())
332
+ };
333
+ var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder : undefined;
334
+ var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => {
335
+ var endIdx = idx + maxBytesToRead;
336
+ var endPtr = idx;
337
+ while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
338
+ if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
339
+ return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr))
340
+ }
341
+ var str = '';
342
+ while (idx < endPtr) {
343
+ var u0 = heapOrArray[idx++];
344
+ if (!(u0 & 128)) {
345
+ str += String.fromCharCode(u0);
346
+ continue
347
+ }
348
+ var u1 = heapOrArray[idx++] & 63;
349
+ if ((u0 & 224) == 192) {
350
+ str += String.fromCharCode((u0 & 31) << 6 | u1);
351
+ continue
352
+ }
353
+ var u2 = heapOrArray[idx++] & 63;
354
+ if ((u0 & 240) == 224) {
355
+ u0 = (u0 & 15) << 12 | u1 << 6 | u2
356
+ } else {
357
+ u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63
358
+ }
359
+ if (u0 < 65536) {
360
+ str += String.fromCharCode(u0)
361
+ } else {
362
+ var ch = u0 - 65536;
363
+ str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
364
+ }
365
+ }
366
+ return str
367
+ };
368
+ var FS_stdin_getChar_buffer = [];
369
+ var lengthBytesUTF8 = str => {
370
+ var len = 0;
371
+ for (var i = 0; i < str.length; ++i) {
372
+ var c = str.charCodeAt(i);
373
+ if (c <= 127) {
374
+ len++
375
+ } else if (c <= 2047) {
376
+ len += 2
377
+ } else if (c >= 55296 && c <= 57343) {
378
+ len += 4;
379
+ ++i
380
+ } else {
381
+ len += 3
382
+ }
383
+ }
384
+ return len
385
+ };
386
+ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
387
+ if (!(maxBytesToWrite > 0)) return 0;
388
+ var startIdx = outIdx;
389
+ var endIdx = outIdx + maxBytesToWrite - 1;
390
+ for (var i = 0; i < str.length; ++i) {
391
+ var u = str.charCodeAt(i);
392
+ if (u >= 55296 && u <= 57343) {
393
+ var u1 = str.charCodeAt(++i);
394
+ u = 65536 + ((u & 1023) << 10) | u1 & 1023
395
+ }
396
+ if (u <= 127) {
397
+ if (outIdx >= endIdx) break;
398
+ heap[outIdx++] = u
399
+ } else if (u <= 2047) {
400
+ if (outIdx + 1 >= endIdx) break;
401
+ heap[outIdx++] = 192 | u >> 6;
402
+ heap[outIdx++] = 128 | u & 63
403
+ } else if (u <= 65535) {
404
+ if (outIdx + 2 >= endIdx) break;
405
+ heap[outIdx++] = 224 | u >> 12;
406
+ heap[outIdx++] = 128 | u >> 6 & 63;
407
+ heap[outIdx++] = 128 | u & 63
408
+ } else {
409
+ if (outIdx + 3 >= endIdx) break;
410
+ heap[outIdx++] = 240 | u >> 18;
411
+ heap[outIdx++] = 128 | u >> 12 & 63;
412
+ heap[outIdx++] = 128 | u >> 6 & 63;
413
+ heap[outIdx++] = 128 | u & 63
414
+ }
415
+ }
416
+ heap[outIdx] = 0;
417
+ return outIdx - startIdx
418
+ };
419
+ function intArrayFromString(stringy, dontAddNull, length) {
420
+ var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
421
+ var u8array = new Array(len);
422
+ var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
423
+ if (dontAddNull) u8array.length = numBytesWritten;
424
+ return u8array
425
+ }
426
+ var FS_stdin_getChar = () => {
427
+ if (!FS_stdin_getChar_buffer.length) {
428
+ var result = null;
429
+ if (ENVIRONMENT_IS_NODE) {
430
+ var BUFSIZE = 256;
431
+ var buf = Buffer.alloc(BUFSIZE);
432
+ var bytesRead = 0;
433
+ var fd = process.stdin.fd;
434
+ try {
435
+ bytesRead = fs.readSync(fd, buf, 0, BUFSIZE)
436
+ } catch (e) {
437
+ if (e.toString().includes('EOF'))
438
+ bytesRead = 0;
439
+ else
440
+ throw e
441
+ }
442
+ if (bytesRead > 0) {
443
+ result = buf.slice(0, bytesRead).toString('utf-8')
444
+ }
445
+ } else {
446
+ }
447
+ if (!result) {
448
+ return null
449
+ }
450
+ FS_stdin_getChar_buffer = intArrayFromString(result, true)
451
+ }
452
+ return FS_stdin_getChar_buffer.shift()
453
+ };
454
+ var TTY = {
455
+ ttys: [],
456
+ init() {},
457
+ shutdown() {},
458
+ register(dev, ops) {
459
+ TTY.ttys[dev] = {input: [], output: [], ops: ops};
460
+ FS.registerDevice(dev, TTY.stream_ops)
461
+ },
462
+ stream_ops: {
463
+ open(stream) {
464
+ var tty = TTY.ttys[stream.node.rdev];
465
+ if (!tty) {
466
+ throw new FS.ErrnoError(43)
467
+ }
468
+ stream.tty = tty;
469
+ stream.seekable = false
470
+ },
471
+ close(stream) {
472
+ stream.tty.ops.fsync(stream.tty)
473
+ },
474
+ fsync(stream) {
475
+ stream.tty.ops.fsync(stream.tty)
476
+ },
477
+ read(stream, buffer, offset, length, pos) {
478
+ if (!stream.tty || !stream.tty.ops.get_char) {
479
+ throw new FS.ErrnoError(60)
480
+ }
481
+ var bytesRead = 0;
482
+ for (var i = 0; i < length; i++) {
483
+ var result;
484
+ try {
485
+ result = stream.tty.ops.get_char(stream.tty)
486
+ } catch (e) {
487
+ throw new FS.ErrnoError(29)
488
+ }
489
+ if (result === undefined && bytesRead === 0) {
490
+ throw new FS.ErrnoError(6)
491
+ }
492
+ if (result === null || result === undefined) break;
493
+ bytesRead++;
494
+ buffer[offset + i] = result
495
+ }
496
+ if (bytesRead) {
497
+ stream.node.timestamp = Date.now()
498
+ }
499
+ return bytesRead
500
+ },
501
+ write(stream, buffer, offset, length, pos) {
502
+ if (!stream.tty || !stream.tty.ops.put_char) {
503
+ throw new FS.ErrnoError(60)
504
+ }
505
+ try {
506
+ for (var i = 0; i < length; i++) {
507
+ stream.tty.ops.put_char(stream.tty, buffer[offset + i])
508
+ }
509
+ } catch (e) {
510
+ throw new FS.ErrnoError(29)
511
+ }
512
+ if (length) {
513
+ stream.node.timestamp = Date.now()
514
+ }
515
+ return i
516
+ }
517
+ },
518
+ default_tty_ops: {
519
+ get_char(tty) {
520
+ return FS_stdin_getChar()
521
+ },
522
+ put_char(tty, val) {
523
+ if (val === null || val === 10) {
524
+ out(UTF8ArrayToString(tty.output, 0));
525
+ tty.output = []
526
+ } else {
527
+ if (val != 0) tty.output.push(val)
528
+ }
529
+ },
530
+ fsync(tty) {
531
+ if (tty.output && tty.output.length > 0) {
532
+ out(UTF8ArrayToString(tty.output, 0));
533
+ tty.output = []
534
+ }
535
+ },
536
+ ioctl_tcgets(tty) {
537
+ return {
538
+ c_iflag: 25856, c_oflag: 5, c_cflag: 191, c_lflag: 35387, c_cc: [
539
+ 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22,
540
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
541
+ ]
542
+ }
543
+ },
544
+ ioctl_tcsets(tty, optional_actions, data) {
545
+ return 0
546
+ },
547
+ ioctl_tiocgwinsz(tty) {
548
+ return [24, 80]
549
+ }
550
+ },
551
+ default_tty1_ops: {
552
+ put_char(tty, val) {
553
+ if (val === null || val === 10) {
554
+ err(UTF8ArrayToString(tty.output, 0));
555
+ tty.output = []
556
+ } else {
557
+ if (val != 0) tty.output.push(val)
558
+ }
559
+ },
560
+ fsync(tty) {
561
+ if (tty.output && tty.output.length > 0) {
562
+ err(UTF8ArrayToString(tty.output, 0));
563
+ tty.output = []
564
+ }
565
+ }
566
+ }
567
+ };
568
+ var zeroMemory = (address, size) => {
569
+ HEAPU8.fill(0, address, address + size);
570
+ return address
571
+ };
572
+ var alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;
573
+ var mmapAlloc = size => {
574
+ size = alignMemory(size, 65536);
575
+ var ptr = _emscripten_builtin_memalign(65536, size);
576
+ if (!ptr) return 0;
577
+ return zeroMemory(ptr, size)
578
+ };
579
+ var MEMFS = {
580
+ ops_table: null,
581
+ mount(mount) {
582
+ return MEMFS.createNode(null, '/', 16384 | 511, 0)
583
+ },
584
+ createNode(parent, name, mode, dev) {
585
+ if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
586
+ throw new FS.ErrnoError(63)
587
+ }
588
+ MEMFS.ops_table ||= {
589
+ dir: {
590
+ node: {
591
+ getattr: MEMFS.node_ops.getattr,
592
+ setattr: MEMFS.node_ops.setattr,
593
+ lookup: MEMFS.node_ops.lookup,
594
+ mknod: MEMFS.node_ops.mknod,
595
+ rename: MEMFS.node_ops.rename,
596
+ unlink: MEMFS.node_ops.unlink,
597
+ rmdir: MEMFS.node_ops.rmdir,
598
+ readdir: MEMFS.node_ops.readdir,
599
+ symlink: MEMFS.node_ops.symlink
600
+ },
601
+ stream: {llseek: MEMFS.stream_ops.llseek}
602
+ },
603
+ file: {
604
+ node: {getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr},
605
+ stream: {
606
+ llseek: MEMFS.stream_ops.llseek,
607
+ read: MEMFS.stream_ops.read,
608
+ write: MEMFS.stream_ops.write,
609
+ allocate: MEMFS.stream_ops.allocate,
610
+ mmap: MEMFS.stream_ops.mmap,
611
+ msync: MEMFS.stream_ops.msync
612
+ }
613
+ },
614
+ link: {
615
+ node: {
616
+ getattr: MEMFS.node_ops.getattr,
617
+ setattr: MEMFS.node_ops.setattr,
618
+ readlink: MEMFS.node_ops.readlink
619
+ },
620
+ stream: {}
621
+ },
622
+ chrdev:
623
+ {node: {getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr}, stream: FS.chrdev_stream_ops}
624
+ };
625
+ var node = FS.createNode(parent, name, mode, dev);
626
+ if (FS.isDir(node.mode)) {
627
+ node.node_ops = MEMFS.ops_table.dir.node;
628
+ node.stream_ops = MEMFS.ops_table.dir.stream;
629
+ node.contents = {}
630
+ } else if (FS.isFile(node.mode)) {
631
+ node.node_ops = MEMFS.ops_table.file.node;
632
+ node.stream_ops = MEMFS.ops_table.file.stream;
633
+ node.usedBytes = 0;
634
+ node.contents = null
635
+ } else if (FS.isLink(node.mode)) {
636
+ node.node_ops = MEMFS.ops_table.link.node;
637
+ node.stream_ops = MEMFS.ops_table.link.stream
638
+ } else if (FS.isChrdev(node.mode)) {
639
+ node.node_ops = MEMFS.ops_table.chrdev.node;
640
+ node.stream_ops = MEMFS.ops_table.chrdev.stream
641
+ }
642
+ node.timestamp = Date.now();
643
+ if (parent) {
644
+ parent.contents[name] = node;
645
+ parent.timestamp = node.timestamp
646
+ }
647
+ return node
648
+ },
649
+ getFileDataAsTypedArray(node) {
650
+ if (!node.contents) return new Uint8Array(0);
651
+ if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes);
652
+ return new Uint8Array(node.contents)
653
+ },
654
+ expandFileStorage(node, newCapacity) {
655
+ var prevCapacity = node.contents ? node.contents.length : 0;
656
+ if (prevCapacity >= newCapacity) return;
657
+ var CAPACITY_DOUBLING_MAX = 1024 * 1024;
658
+ newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0);
659
+ if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);
660
+ var oldContents = node.contents;
661
+ node.contents = new Uint8Array(newCapacity);
662
+ if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0)
663
+ },
664
+ resizeFileStorage(node, newSize) {
665
+ if (node.usedBytes == newSize) return;
666
+ if (newSize == 0) {
667
+ node.contents = null;
668
+ node.usedBytes = 0
669
+ } else {
670
+ var oldContents = node.contents;
671
+ node.contents = new Uint8Array(newSize);
672
+ if (oldContents) {
673
+ node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)))
674
+ }
675
+ node.usedBytes = newSize
676
+ }
677
+ },
678
+ node_ops: {
679
+ getattr(node) {
680
+ var attr = {};
681
+ attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
682
+ attr.ino = node.id;
683
+ attr.mode = node.mode;
684
+ attr.nlink = 1;
685
+ attr.uid = 0;
686
+ attr.gid = 0;
687
+ attr.rdev = node.rdev;
688
+ if (FS.isDir(node.mode)) {
689
+ attr.size = 4096
690
+ } else if (FS.isFile(node.mode)) {
691
+ attr.size = node.usedBytes
692
+ } else if (FS.isLink(node.mode)) {
693
+ attr.size = node.link.length
694
+ } else {
695
+ attr.size = 0
696
+ }
697
+ attr.atime = new Date(node.timestamp);
698
+ attr.mtime = new Date(node.timestamp);
699
+ attr.ctime = new Date(node.timestamp);
700
+ attr.blksize = 4096;
701
+ attr.blocks = Math.ceil(attr.size / attr.blksize);
702
+ return attr
703
+ },
704
+ setattr(node, attr) {
705
+ if (attr.mode !== undefined) {
706
+ node.mode = attr.mode
707
+ }
708
+ if (attr.timestamp !== undefined) {
709
+ node.timestamp = attr.timestamp
710
+ }
711
+ if (attr.size !== undefined) {
712
+ MEMFS.resizeFileStorage(node, attr.size)
713
+ }
714
+ },
715
+ lookup(parent, name) {
716
+ throw FS.genericErrors[44]
717
+ },
718
+ mknod(parent, name, mode, dev) {
719
+ return MEMFS.createNode(parent, name, mode, dev)
720
+ },
721
+ rename(old_node, new_dir, new_name) {
722
+ if (FS.isDir(old_node.mode)) {
723
+ var new_node;
724
+ try {
725
+ new_node = FS.lookupNode(new_dir, new_name)
726
+ } catch (e) {
727
+ }
728
+ if (new_node) {
729
+ for (var i in new_node.contents) {
730
+ throw new FS.ErrnoError(55)
731
+ }
732
+ }
733
+ }
734
+ delete old_node.parent.contents[old_node.name];
735
+ old_node.parent.timestamp = Date.now();
736
+ old_node.name = new_name;
737
+ new_dir.contents[new_name] = old_node;
738
+ new_dir.timestamp = old_node.parent.timestamp
739
+ },
740
+ unlink(parent, name) {
741
+ delete parent.contents[name];
742
+ parent.timestamp = Date.now()
743
+ },
744
+ rmdir(parent, name) {
745
+ var node = FS.lookupNode(parent, name);
746
+ for (var i in node.contents) {
747
+ throw new FS.ErrnoError(55)
748
+ }
749
+ delete parent.contents[name];
750
+ parent.timestamp = Date.now()
751
+ },
752
+ readdir(node) {
753
+ var entries = ['.', '..'];
754
+ for (var key of Object.keys(node.contents)) {
755
+ entries.push(key)
756
+ }
757
+ return entries
758
+ },
759
+ symlink(parent, newname, oldpath) {
760
+ var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);
761
+ node.link = oldpath;
762
+ return node
763
+ },
764
+ readlink(node) {
765
+ if (!FS.isLink(node.mode)) {
766
+ throw new FS.ErrnoError(28)
767
+ }
768
+ return node.link
769
+ }
770
+ },
771
+ stream_ops: {
772
+ read(stream, buffer, offset, length, position) {
773
+ var contents = stream.node.contents;
774
+ if (position >= stream.node.usedBytes) return 0;
775
+ var size = Math.min(stream.node.usedBytes - position, length);
776
+ if (size > 8 && contents.subarray) {
777
+ buffer.set(contents.subarray(position, position + size), offset)
778
+ } else {
779
+ for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]
780
+ }
781
+ return size
782
+ },
783
+ write(stream, buffer, offset, length, position, canOwn) {
784
+ if (buffer.buffer === HEAP8.buffer) {
785
+ canOwn = false
786
+ }
787
+ if (!length) return 0;
788
+ var node = stream.node;
789
+ node.timestamp = Date.now();
790
+ if (buffer.subarray && (!node.contents || node.contents.subarray)) {
791
+ if (canOwn) {
792
+ node.contents = buffer.subarray(offset, offset + length);
793
+ node.usedBytes = length;
794
+ return length
795
+ } else if (node.usedBytes === 0 && position === 0) {
796
+ node.contents = buffer.slice(offset, offset + length);
797
+ node.usedBytes = length;
798
+ return length
799
+ } else if (position + length <= node.usedBytes) {
800
+ node.contents.set(buffer.subarray(offset, offset + length), position);
801
+ return length
802
+ }
803
+ }
804
+ MEMFS.expandFileStorage(node, position + length);
805
+ if (node.contents.subarray && buffer.subarray) {
806
+ node.contents.set(buffer.subarray(offset, offset + length), position)
807
+ } else {
808
+ for (var i = 0; i < length; i++) {
809
+ node.contents[position + i] = buffer[offset + i]
810
+ }
811
+ }
812
+ node.usedBytes = Math.max(node.usedBytes, position + length);
813
+ return length
814
+ },
815
+ llseek(stream, offset, whence) {
816
+ var position = offset;
817
+ if (whence === 1) {
818
+ position += stream.position
819
+ } else if (whence === 2) {
820
+ if (FS.isFile(stream.node.mode)) {
821
+ position += stream.node.usedBytes
822
+ }
823
+ }
824
+ if (position < 0) {
825
+ throw new FS.ErrnoError(28)
826
+ }
827
+ return position
828
+ },
829
+ allocate(stream, offset, length) {
830
+ MEMFS.expandFileStorage(stream.node, offset + length);
831
+ stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length)
832
+ },
833
+ mmap(stream, length, position, prot, flags) {
834
+ if (!FS.isFile(stream.node.mode)) {
835
+ throw new FS.ErrnoError(43)
836
+ }
837
+ var ptr;
838
+ var allocated;
839
+ var contents = stream.node.contents;
840
+ if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {
841
+ allocated = false;
842
+ ptr = contents.byteOffset
843
+ } else {
844
+ allocated = true;
845
+ ptr = mmapAlloc(length);
846
+ if (!ptr) {
847
+ throw new FS.ErrnoError(48)
848
+ }
849
+ if (contents) {
850
+ if (position > 0 || position + length < contents.length) {
851
+ if (contents.subarray) {
852
+ contents = contents.subarray(position, position + length)
853
+ } else {
854
+ contents = Array.prototype.slice.call(contents, position, position + length)
855
+ }
856
+ }
857
+ HEAP8.set(contents, ptr)
858
+ }
859
+ }
860
+ return {
861
+ ptr: ptr, allocated: allocated
862
+ }
863
+ },
864
+ msync(stream, buffer, offset, length, mmapFlags) {
865
+ MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);
866
+ return 0
867
+ }
868
+ }
869
+ };
870
+ var asyncLoad = (url, onload, onerror, noRunDep) => {
871
+ var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : '';
872
+ readAsync(url).then(
873
+ arrayBuffer => {
874
+ onload(new Uint8Array(arrayBuffer));
875
+ if (dep) removeRunDependency(dep)
876
+ },
877
+ err => {
878
+ if (onerror) {
879
+ onerror()
880
+ } else {
881
+ throw `Loading data file "${url}" failed.`
882
+ }
883
+ });
884
+ if (dep) addRunDependency(dep)
885
+ };
886
+ var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => {
887
+ FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn)
888
+ };
889
+ var preloadPlugins = Module['preloadPlugins'] || [];
890
+ var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => {
891
+ if (typeof Browser != 'undefined') Browser.init();
892
+ var handled = false;
893
+ preloadPlugins.forEach(plugin => {
894
+ if (handled) return;
895
+ if (plugin['canHandle'](fullname)) {
896
+ plugin['handle'](byteArray, fullname, finish, onerror);
897
+ handled = true
898
+ }
899
+ });
900
+ return handled
901
+ };
902
+ var FS_createPreloadedFile =
903
+ (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
904
+ var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
905
+ var dep = getUniqueRunDependency(`cp ${fullname}`);
906
+ function processData(byteArray) {
907
+ function finish(byteArray) {
908
+ preFinish?.();
909
+ if (!dontCreateFile) {
910
+ FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn)
911
+ }
912
+ onload?.();
913
+ removeRunDependency(dep)
914
+ }
915
+ if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => {
916
+ onerror?.();
917
+ removeRunDependency(dep)
918
+ })) {
919
+ return
920
+ }
921
+ finish(byteArray)
922
+ }
923
+ addRunDependency(dep);
924
+ if (typeof url == 'string') {
925
+ asyncLoad(url, processData, onerror)
926
+ } else {
927
+ processData(url)
928
+ }
929
+ };
930
+ var FS_modeStringToFlags = str => {
931
+ var flagModes = {r: 0, 'r+': 2, w: 512 | 64 | 1, 'w+': 512 | 64 | 2, a: 1024 | 64 | 1, 'a+': 1024 | 64 | 2};
932
+ var flags = flagModes[str];
933
+ if (typeof flags == 'undefined') {
934
+ throw new Error(`Unknown file open mode: ${str}`)
935
+ }
936
+ return flags
937
+ };
938
+ var FS_getMode = (canRead, canWrite) => {
939
+ var mode = 0;
940
+ if (canRead) mode |= 292 | 73;
941
+ if (canWrite) mode |= 146;
942
+ return mode
943
+ };
944
+ var ERRNO_CODES = {
945
+ EPERM: 63,
946
+ ENOENT: 44,
947
+ ESRCH: 71,
948
+ EINTR: 27,
949
+ EIO: 29,
950
+ ENXIO: 60,
951
+ E2BIG: 1,
952
+ ENOEXEC: 45,
953
+ EBADF: 8,
954
+ ECHILD: 12,
955
+ EAGAIN: 6,
956
+ EWOULDBLOCK: 6,
957
+ ENOMEM: 48,
958
+ EACCES: 2,
959
+ EFAULT: 21,
960
+ ENOTBLK: 105,
961
+ EBUSY: 10,
962
+ EEXIST: 20,
963
+ EXDEV: 75,
964
+ ENODEV: 43,
965
+ ENOTDIR: 54,
966
+ EISDIR: 31,
967
+ EINVAL: 28,
968
+ ENFILE: 41,
969
+ EMFILE: 33,
970
+ ENOTTY: 59,
971
+ ETXTBSY: 74,
972
+ EFBIG: 22,
973
+ ENOSPC: 51,
974
+ ESPIPE: 70,
975
+ EROFS: 69,
976
+ EMLINK: 34,
977
+ EPIPE: 64,
978
+ EDOM: 18,
979
+ ERANGE: 68,
980
+ ENOMSG: 49,
981
+ EIDRM: 24,
982
+ ECHRNG: 106,
983
+ EL2NSYNC: 156,
984
+ EL3HLT: 107,
985
+ EL3RST: 108,
986
+ ELNRNG: 109,
987
+ EUNATCH: 110,
988
+ ENOCSI: 111,
989
+ EL2HLT: 112,
990
+ EDEADLK: 16,
991
+ ENOLCK: 46,
992
+ EBADE: 113,
993
+ EBADR: 114,
994
+ EXFULL: 115,
995
+ ENOANO: 104,
996
+ EBADRQC: 103,
997
+ EBADSLT: 102,
998
+ EDEADLOCK: 16,
999
+ EBFONT: 101,
1000
+ ENOSTR: 100,
1001
+ ENODATA: 116,
1002
+ ETIME: 117,
1003
+ ENOSR: 118,
1004
+ ENONET: 119,
1005
+ ENOPKG: 120,
1006
+ EREMOTE: 121,
1007
+ ENOLINK: 47,
1008
+ EADV: 122,
1009
+ ESRMNT: 123,
1010
+ ECOMM: 124,
1011
+ EPROTO: 65,
1012
+ EMULTIHOP: 36,
1013
+ EDOTDOT: 125,
1014
+ EBADMSG: 9,
1015
+ ENOTUNIQ: 126,
1016
+ EBADFD: 127,
1017
+ EREMCHG: 128,
1018
+ ELIBACC: 129,
1019
+ ELIBBAD: 130,
1020
+ ELIBSCN: 131,
1021
+ ELIBMAX: 132,
1022
+ ELIBEXEC: 133,
1023
+ ENOSYS: 52,
1024
+ ENOTEMPTY: 55,
1025
+ ENAMETOOLONG: 37,
1026
+ ELOOP: 32,
1027
+ EOPNOTSUPP: 138,
1028
+ EPFNOSUPPORT: 139,
1029
+ ECONNRESET: 15,
1030
+ ENOBUFS: 42,
1031
+ EAFNOSUPPORT: 5,
1032
+ EPROTOTYPE: 67,
1033
+ ENOTSOCK: 57,
1034
+ ENOPROTOOPT: 50,
1035
+ ESHUTDOWN: 140,
1036
+ ECONNREFUSED: 14,
1037
+ EADDRINUSE: 3,
1038
+ ECONNABORTED: 13,
1039
+ ENETUNREACH: 40,
1040
+ ENETDOWN: 38,
1041
+ ETIMEDOUT: 73,
1042
+ EHOSTDOWN: 142,
1043
+ EHOSTUNREACH: 23,
1044
+ EINPROGRESS: 26,
1045
+ EALREADY: 7,
1046
+ EDESTADDRREQ: 17,
1047
+ EMSGSIZE: 35,
1048
+ EPROTONOSUPPORT: 66,
1049
+ ESOCKTNOSUPPORT: 137,
1050
+ EADDRNOTAVAIL: 4,
1051
+ ENETRESET: 39,
1052
+ EISCONN: 30,
1053
+ ENOTCONN: 53,
1054
+ ETOOMANYREFS: 141,
1055
+ EUSERS: 136,
1056
+ EDQUOT: 19,
1057
+ ESTALE: 72,
1058
+ ENOTSUP: 138,
1059
+ ENOMEDIUM: 148,
1060
+ EILSEQ: 25,
1061
+ EOVERFLOW: 61,
1062
+ ECANCELED: 11,
1063
+ ENOTRECOVERABLE: 56,
1064
+ EOWNERDEAD: 62,
1065
+ ESTRPIPE: 135
1066
+ };
1067
+ var NODEFS = {
1068
+ isWindows: false,
1069
+ staticInit() {
1070
+ NODEFS.isWindows = !!process.platform.match(/^win/);
1071
+ var flags = process.binding('constants');
1072
+ if (flags['fs']) {
1073
+ flags = flags['fs']
1074
+ }
1075
+ NODEFS.flagsForNodeMap = {
1076
+ 1024: flags['O_APPEND'],
1077
+ 64: flags['O_CREAT'],
1078
+ 128: flags['O_EXCL'],
1079
+ 256: flags['O_NOCTTY'],
1080
+ 0: flags['O_RDONLY'],
1081
+ 2: flags['O_RDWR'],
1082
+ 4096: flags['O_SYNC'],
1083
+ 512: flags['O_TRUNC'],
1084
+ 1: flags['O_WRONLY'],
1085
+ 131072: flags['O_NOFOLLOW']
1086
+ }
1087
+ },
1088
+ convertNodeCode(e) {
1089
+ var code = e.code;
1090
+ return ERRNO_CODES[code]
1091
+ },
1092
+ tryFSOperation(f) {
1093
+ try {
1094
+ return f()
1095
+ } catch (e) {
1096
+ if (!e.code) throw e;
1097
+ if (e.code === 'UNKNOWN') throw new FS.ErrnoError(28);
1098
+ throw new FS.ErrnoError(NODEFS.convertNodeCode(e))
1099
+ }
1100
+ },
1101
+ mount(mount) {
1102
+ return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0)
1103
+ },
1104
+ createNode(parent, name, mode, dev) {
1105
+ if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
1106
+ throw new FS.ErrnoError(28)
1107
+ }
1108
+ var node = FS.createNode(parent, name, mode);
1109
+ node.node_ops = NODEFS.node_ops;
1110
+ node.stream_ops = NODEFS.stream_ops;
1111
+ return node
1112
+ },
1113
+ getMode(path) {
1114
+ var stat;
1115
+ return NODEFS.tryFSOperation(() => {
1116
+ stat = fs.lstatSync(path);
1117
+ if (NODEFS.isWindows) {
1118
+ stat.mode |= (stat.mode & 292) >> 2
1119
+ }
1120
+ return stat.mode
1121
+ })
1122
+ },
1123
+ realPath(node) {
1124
+ var parts = [];
1125
+ while (node.parent !== node) {
1126
+ parts.push(node.name);
1127
+ node = node.parent
1128
+ }
1129
+ parts.push(node.mount.opts.root);
1130
+ parts.reverse();
1131
+ return PATH.join(...parts)
1132
+ },
1133
+ flagsForNode(flags) {
1134
+ flags &= ~2097152;
1135
+ flags &= ~2048;
1136
+ flags &= ~32768;
1137
+ flags &= ~524288;
1138
+ flags &= ~65536;
1139
+ var newFlags = 0;
1140
+ for (var k in NODEFS.flagsForNodeMap) {
1141
+ if (flags & k) {
1142
+ newFlags |= NODEFS.flagsForNodeMap[k];
1143
+ flags ^= k
1144
+ }
1145
+ }
1146
+ if (flags) {
1147
+ throw new FS.ErrnoError(28)
1148
+ }
1149
+ return newFlags
1150
+ },
1151
+ node_ops: {
1152
+ getattr(node) {
1153
+ var path = NODEFS.realPath(node);
1154
+ var stat;
1155
+ NODEFS.tryFSOperation(() => stat = fs.lstatSync(path));
1156
+ if (NODEFS.isWindows) {
1157
+ if (!stat.blksize) {
1158
+ stat.blksize = 4096
1159
+ }
1160
+ if (!stat.blocks) {
1161
+ stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0
1162
+ }
1163
+ stat.mode |= (stat.mode & 292) >> 2
1164
+ }
1165
+ return {
1166
+ dev: stat.dev, ino: stat.ino, mode: stat.mode, nlink: stat.nlink, uid: stat.uid, gid: stat.gid,
1167
+ rdev: stat.rdev, size: stat.size, atime: stat.atime, mtime: stat.mtime, ctime: stat.ctime,
1168
+ blksize: stat.blksize, blocks: stat.blocks
1169
+ }
1170
+ },
1171
+ setattr(node, attr) {
1172
+ var path = NODEFS.realPath(node);
1173
+ NODEFS.tryFSOperation(() => {
1174
+ if (attr.mode !== undefined) {
1175
+ fs.chmodSync(path, attr.mode);
1176
+ node.mode = attr.mode
1177
+ }
1178
+ if (attr.timestamp !== undefined) {
1179
+ var date = new Date(attr.timestamp);
1180
+ fs.utimesSync(path, date, date)
1181
+ }
1182
+ if (attr.size !== undefined) {
1183
+ fs.truncateSync(path, attr.size)
1184
+ }
1185
+ })
1186
+ },
1187
+ lookup(parent, name) {
1188
+ var path = PATH.join2(NODEFS.realPath(parent), name);
1189
+ var mode = NODEFS.getMode(path);
1190
+ return NODEFS.createNode(parent, name, mode)
1191
+ },
1192
+ mknod(parent, name, mode, dev) {
1193
+ var node = NODEFS.createNode(parent, name, mode, dev);
1194
+ var path = NODEFS.realPath(node);
1195
+ NODEFS.tryFSOperation(() => {
1196
+ if (FS.isDir(node.mode)) {
1197
+ fs.mkdirSync(path, node.mode)
1198
+ } else {
1199
+ fs.writeFileSync(path, '', {mode: node.mode})
1200
+ }
1201
+ });
1202
+ return node
1203
+ },
1204
+ rename(oldNode, newDir, newName) {
1205
+ var oldPath = NODEFS.realPath(oldNode);
1206
+ var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
1207
+ NODEFS.tryFSOperation(() => fs.renameSync(oldPath, newPath));
1208
+ oldNode.name = newName
1209
+ },
1210
+ unlink(parent, name) {
1211
+ var path = PATH.join2(NODEFS.realPath(parent), name);
1212
+ NODEFS.tryFSOperation(() => fs.unlinkSync(path))
1213
+ },
1214
+ rmdir(parent, name) {
1215
+ var path = PATH.join2(NODEFS.realPath(parent), name);
1216
+ NODEFS.tryFSOperation(() => fs.rmdirSync(path))
1217
+ },
1218
+ readdir(node) {
1219
+ var path = NODEFS.realPath(node);
1220
+ return NODEFS.tryFSOperation(() => fs.readdirSync(path))
1221
+ },
1222
+ symlink(parent, newName, oldPath) {
1223
+ var newPath = PATH.join2(NODEFS.realPath(parent), newName);
1224
+ NODEFS.tryFSOperation(() => fs.symlinkSync(oldPath, newPath))
1225
+ },
1226
+ readlink(node) {
1227
+ var path = NODEFS.realPath(node);
1228
+ return NODEFS.tryFSOperation(() => fs.readlinkSync(path))
1229
+ }
1230
+ },
1231
+ stream_ops: {
1232
+ open(stream) {
1233
+ var path = NODEFS.realPath(stream.node);
1234
+ NODEFS.tryFSOperation(() => {
1235
+ if (FS.isFile(stream.node.mode)) {
1236
+ stream.shared.refcount = 1;
1237
+ stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags))
1238
+ }
1239
+ })
1240
+ },
1241
+ close(stream) {
1242
+ NODEFS.tryFSOperation(() => {
1243
+ if (FS.isFile(stream.node.mode) && stream.nfd && --stream.shared.refcount === 0) {
1244
+ fs.closeSync(stream.nfd)
1245
+ }
1246
+ })
1247
+ },
1248
+ dup(stream) {
1249
+ stream.shared.refcount++
1250
+ },
1251
+ read(stream, buffer, offset, length, position) {
1252
+ if (length === 0) return 0;
1253
+ return NODEFS.tryFSOperation(
1254
+ () => fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position))
1255
+ },
1256
+ write(stream, buffer, offset, length, position) {
1257
+ return NODEFS.tryFSOperation(
1258
+ () => fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position))
1259
+ },
1260
+ llseek(stream, offset, whence) {
1261
+ var position = offset;
1262
+ if (whence === 1) {
1263
+ position += stream.position
1264
+ } else if (whence === 2) {
1265
+ if (FS.isFile(stream.node.mode)) {
1266
+ NODEFS.tryFSOperation(() => {
1267
+ var stat = fs.fstatSync(stream.nfd);
1268
+ position += stat.size
1269
+ })
1270
+ }
1271
+ }
1272
+ if (position < 0) {
1273
+ throw new FS.ErrnoError(28)
1274
+ }
1275
+ return position
1276
+ },
1277
+ mmap(stream, length, position, prot, flags) {
1278
+ if (!FS.isFile(stream.node.mode)) {
1279
+ throw new FS.ErrnoError(43)
1280
+ }
1281
+ var ptr = mmapAlloc(length);
1282
+ NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position);
1283
+ return {
1284
+ ptr: ptr, allocated: true
1285
+ }
1286
+ },
1287
+ msync(stream, buffer, offset, length, mmapFlags) {
1288
+ NODEFS.stream_ops.write(stream, buffer, 0, length, offset, false);
1289
+ return 0
1290
+ }
1291
+ }
1292
+ };
1293
+ var NODERAWFS = {
1294
+ init() {
1295
+ var _wrapNodeError = function(func) {
1296
+ return function(...args) {
1297
+ try {
1298
+ return func(...args)
1299
+ } catch (e) {
1300
+ if (e.code) {
1301
+ throw new FS.ErrnoError(ERRNO_CODES[e.code])
1302
+ }
1303
+ throw e
1304
+ }
1305
+ }
1306
+ };
1307
+ for (var _key in NODERAWFS) {
1308
+ FS[_key] = _wrapNodeError(NODERAWFS[_key])
1309
+ }
1310
+ FS.createStandardStreams()
1311
+ },
1312
+ lookup(parent, name) {
1313
+ return FS.lookupPath(`${parent.path}/${name}`).node
1314
+ },
1315
+ lookupPath(path, opts = {}) {
1316
+ if (opts.parent) {
1317
+ path = nodePath.dirname(path)
1318
+ }
1319
+ var st = fs.lstatSync(path);
1320
+ var mode = NODEFS.getMode(path);
1321
+ return {
1322
+ path: path, node: {id: st.ino, mode: mode, node_ops: NODERAWFS, path: path}
1323
+ }
1324
+ },
1325
+ createStandardStreams() {
1326
+ FS.createStream({nfd: 0, position: 0, path: '', flags: 0, tty: true, seekable: false}, 0);
1327
+ for (var i = 1; i < 3; i++) {
1328
+ FS.createStream({nfd: i, position: 0, path: '', flags: 577, tty: true, seekable: false}, i)
1329
+ }
1330
+ },
1331
+ cwd() {
1332
+ return process.cwd()
1333
+ },
1334
+ chdir(...args) {
1335
+ process.chdir(...args)
1336
+ },
1337
+ mknod(path, mode) {
1338
+ if (FS.isDir(path)) {
1339
+ fs.mkdirSync(path, mode)
1340
+ } else {
1341
+ fs.writeFileSync(path, '', {mode: mode})
1342
+ }
1343
+ },
1344
+ mkdir(...args) {
1345
+ fs.mkdirSync(...args)
1346
+ },
1347
+ symlink(...args) {
1348
+ fs.symlinkSync(...args)
1349
+ },
1350
+ rename(...args) {
1351
+ fs.renameSync(...args)
1352
+ },
1353
+ rmdir(...args) {
1354
+ fs.rmdirSync(...args)
1355
+ },
1356
+ readdir(...args) {
1357
+ return ['.', '..'].concat(fs.readdirSync(...args))
1358
+ },
1359
+ unlink(...args) {
1360
+ fs.unlinkSync(...args)
1361
+ },
1362
+ readlink(...args) {
1363
+ return fs.readlinkSync(...args)
1364
+ },
1365
+ stat(...args) {
1366
+ return fs.statSync(...args)
1367
+ },
1368
+ lstat(...args) {
1369
+ return fs.lstatSync(...args)
1370
+ },
1371
+ chmod(...args) {
1372
+ fs.chmodSync(...args)
1373
+ },
1374
+ fchmod(fd, mode) {
1375
+ var stream = FS.getStreamChecked(fd);
1376
+ fs.fchmodSync(stream.nfd, mode)
1377
+ },
1378
+ chown(...args) {
1379
+ fs.chownSync(...args)
1380
+ },
1381
+ fchown(fd, owner, group) {
1382
+ var stream = FS.getStreamChecked(fd);
1383
+ fs.fchownSync(stream.nfd, owner, group)
1384
+ },
1385
+ truncate(...args) {
1386
+ fs.truncateSync(...args)
1387
+ },
1388
+ ftruncate(fd, len) {
1389
+ if (len < 0) {
1390
+ throw new FS.ErrnoError(28)
1391
+ }
1392
+ var stream = FS.getStreamChecked(fd);
1393
+ fs.ftruncateSync(stream.nfd, len)
1394
+ },
1395
+ utime(path, atime, mtime) {
1396
+ fs.utimesSync(path, atime / 1e3, mtime / 1e3)
1397
+ },
1398
+ open(path, flags, mode) {
1399
+ if (typeof flags == 'string') {
1400
+ flags = FS_modeStringToFlags(flags)
1401
+ }
1402
+ var pathTruncated = path.split('/')
1403
+ .map(function(s) {
1404
+ return s.substr(0, 255)
1405
+ })
1406
+ .join('/');
1407
+ var nfd = fs.openSync(pathTruncated, NODEFS.flagsForNode(flags), mode);
1408
+ var st = fs.fstatSync(nfd);
1409
+ if (flags & 65536 && !st.isDirectory()) {
1410
+ fs.closeSync(nfd);
1411
+ throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)
1412
+ }
1413
+ var newMode = NODEFS.getMode(pathTruncated);
1414
+ var node = {id: st.ino, mode: newMode, node_ops: NODERAWFS, path: path};
1415
+ return FS.createStream({nfd: nfd, position: 0, path: path, flags: flags, node: node, seekable: true})
1416
+ },
1417
+ createStream(stream, fd) {
1418
+ var rtn = VFS.createStream(stream, fd);
1419
+ if (typeof rtn.shared.refcnt == 'undefined') {
1420
+ rtn.shared.refcnt = 1
1421
+ } else {
1422
+ rtn.shared.refcnt++
1423
+ }
1424
+ return rtn
1425
+ },
1426
+ close(stream) {
1427
+ VFS.closeStream(stream.fd);
1428
+ if (!stream.stream_ops && --stream.shared.refcnt === 0) {
1429
+ fs.closeSync(stream.nfd)
1430
+ }
1431
+ },
1432
+ llseek(stream, offset, whence) {
1433
+ if (stream.stream_ops) {
1434
+ return VFS.llseek(stream, offset, whence)
1435
+ }
1436
+ var position = offset;
1437
+ if (whence === 1) {
1438
+ position += stream.position
1439
+ } else if (whence === 2) {
1440
+ position += fs.fstatSync(stream.nfd).size
1441
+ } else if (whence !== 0) {
1442
+ throw new FS.ErrnoError(28)
1443
+ }
1444
+ if (position < 0) {
1445
+ throw new FS.ErrnoError(28)
1446
+ }
1447
+ stream.position = position;
1448
+ return position
1449
+ },
1450
+ read(stream, buffer, offset, length, position) {
1451
+ if (stream.stream_ops) {
1452
+ return VFS.read(stream, buffer, offset, length, position)
1453
+ }
1454
+ var seeking = typeof position != 'undefined';
1455
+ if (!seeking && stream.seekable) position = stream.position;
1456
+ var bytesRead = fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
1457
+ if (!seeking) stream.position += bytesRead;
1458
+ return bytesRead
1459
+ },
1460
+ write(stream, buffer, offset, length, position) {
1461
+ if (stream.stream_ops) {
1462
+ return VFS.write(stream, buffer, offset, length, position)
1463
+ }
1464
+ if (stream.flags & +'1024') {
1465
+ FS.llseek(stream, 0, +'2')
1466
+ }
1467
+ var seeking = typeof position != 'undefined';
1468
+ if (!seeking && stream.seekable) position = stream.position;
1469
+ var bytesWritten = fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
1470
+ if (!seeking) stream.position += bytesWritten;
1471
+ return bytesWritten
1472
+ },
1473
+ allocate() {
1474
+ throw new FS.ErrnoError(138)
1475
+ },
1476
+ mmap(stream, length, position, prot, flags) {
1477
+ if (!length) {
1478
+ throw new FS.ErrnoError(28)
1479
+ }
1480
+ if (stream.stream_ops) {
1481
+ return VFS.mmap(stream, length, position, prot, flags)
1482
+ }
1483
+ var ptr = mmapAlloc(length);
1484
+ FS.read(stream, HEAP8, ptr, length, position);
1485
+ return {
1486
+ ptr: ptr, allocated: true
1487
+ }
1488
+ },
1489
+ msync(stream, buffer, offset, length, mmapFlags) {
1490
+ if (stream.stream_ops) {
1491
+ return VFS.msync(stream, buffer, offset, length, mmapFlags)
1492
+ }
1493
+ FS.write(stream, buffer, 0, length, offset);
1494
+ return 0
1495
+ },
1496
+ ioctl() {
1497
+ throw new FS.ErrnoError(59)
1498
+ }
1499
+ };
1500
+ var FS = {
1501
+ root: null,
1502
+ mounts: [],
1503
+ devices: {},
1504
+ streams: [],
1505
+ nextInode: 1,
1506
+ nameTable: null,
1507
+ currentPath: '/',
1508
+ initialized: false,
1509
+ ignorePermissions: true,
1510
+ ErrnoError: class {
1511
+ constructor(errno) {
1512
+ this.name = 'ErrnoError';
1513
+ this.errno = errno
1514
+ }
1515
+ },
1516
+ genericErrors: {},
1517
+ filesystems: null,
1518
+ syncFSRequests: 0,
1519
+ FSStream: class {
1520
+ constructor() {
1521
+ this.shared = {}
1522
+ } get object() {
1523
+ return this.node
1524
+ } set object(val) {
1525
+ this.node = val
1526
+ } get isRead() {
1527
+ return (this.flags & 2097155) !== 1
1528
+ } get isWrite() {
1529
+ return (this.flags & 2097155) !== 0
1530
+ } get isAppend() {
1531
+ return this.flags & 1024
1532
+ } get flags() {
1533
+ return this.shared.flags
1534
+ } set flags(val) {
1535
+ this.shared.flags = val
1536
+ } get position() {
1537
+ return this.shared.position
1538
+ } set position(val) {
1539
+ this.shared.position = val
1540
+ }
1541
+ },
1542
+ FSNode: class {
1543
+ constructor(parent, name, mode, rdev) {
1544
+ if (!parent) {
1545
+ parent = this
1546
+ }
1547
+ this.parent = parent;
1548
+ this.mount = parent.mount;
1549
+ this.mounted = null;
1550
+ this.id = FS.nextInode++;
1551
+ this.name = name;
1552
+ this.mode = mode;
1553
+ this.node_ops = {};
1554
+ this.stream_ops = {};
1555
+ this.rdev = rdev;
1556
+ this.readMode = 292 | 73;
1557
+ this.writeMode = 146
1558
+ } get read() {
1559
+ return (this.mode & this.readMode) === this.readMode
1560
+ } set read(val) {
1561
+ val ? this.mode |= this.readMode : this.mode &= ~this.readMode
1562
+ } get write() {
1563
+ return (this.mode & this.writeMode) === this.writeMode
1564
+ } set write(val) {
1565
+ val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode
1566
+ } get isFolder() {
1567
+ return FS.isDir(this.mode)
1568
+ } get isDevice() {
1569
+ return FS.isChrdev(this.mode)
1570
+ }
1571
+ },
1572
+ lookupPath(path, opts = {}) {
1573
+ path = PATH_FS.resolve(path);
1574
+ if (!path) return {path: '', node: null};
1575
+ var defaults = {follow_mount: true, recurse_count: 0};
1576
+ opts = Object.assign(defaults, opts);
1577
+ if (opts.recurse_count > 8) {
1578
+ throw new FS.ErrnoError(32)
1579
+ }
1580
+ var parts = path.split('/').filter(p => !!p);
1581
+ var current = FS.root;
1582
+ var current_path = '/';
1583
+ for (var i = 0; i < parts.length; i++) {
1584
+ var islast = i === parts.length - 1;
1585
+ if (islast && opts.parent) {
1586
+ break
1587
+ }
1588
+ current = FS.lookupNode(current, parts[i]);
1589
+ current_path = PATH.join2(current_path, parts[i]);
1590
+ if (FS.isMountpoint(current)) {
1591
+ if (!islast || islast && opts.follow_mount) {
1592
+ current = current.mounted.root
1593
+ }
1594
+ }
1595
+ if (!islast || opts.follow) {
1596
+ var count = 0;
1597
+ while (FS.isLink(current.mode)) {
1598
+ var link = FS.readlink(current_path);
1599
+ current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
1600
+ var lookup = FS.lookupPath(current_path, {recurse_count: opts.recurse_count + 1});
1601
+ current = lookup.node;
1602
+ if (count++ > 40) {
1603
+ throw new FS.ErrnoError(32)
1604
+ }
1605
+ }
1606
+ }
1607
+ }
1608
+ return {
1609
+ path: current_path, node: current
1610
+ }
1611
+ },
1612
+ getPath(node) {
1613
+ var path;
1614
+ while (true) {
1615
+ if (FS.isRoot(node)) {
1616
+ var mount = node.mount.mountpoint;
1617
+ if (!path) return mount;
1618
+ return mount[mount.length - 1] !== '/' ? `${mount}/${path}` : mount + path
1619
+ }
1620
+ path = path ? `${node.name}/${path}` : node.name;
1621
+ node = node.parent
1622
+ }
1623
+ },
1624
+ hashName(parentid, name) {
1625
+ var hash = 0;
1626
+ for (var i = 0; i < name.length; i++) {
1627
+ hash = (hash << 5) - hash + name.charCodeAt(i) | 0
1628
+ }
1629
+ return (parentid + hash >>> 0) % FS.nameTable.length
1630
+ },
1631
+ hashAddNode(node) {
1632
+ var hash = FS.hashName(node.parent.id, node.name);
1633
+ node.name_next = FS.nameTable[hash];
1634
+ FS.nameTable[hash] = node
1635
+ },
1636
+ hashRemoveNode(node) {
1637
+ var hash = FS.hashName(node.parent.id, node.name);
1638
+ if (FS.nameTable[hash] === node) {
1639
+ FS.nameTable[hash] = node.name_next
1640
+ } else {
1641
+ var current = FS.nameTable[hash];
1642
+ while (current) {
1643
+ if (current.name_next === node) {
1644
+ current.name_next = node.name_next;
1645
+ break
1646
+ }
1647
+ current = current.name_next
1648
+ }
1649
+ }
1650
+ },
1651
+ lookupNode(parent, name) {
1652
+ var errCode = FS.mayLookup(parent);
1653
+ if (errCode) {
1654
+ throw new FS.ErrnoError(errCode)
1655
+ }
1656
+ var hash = FS.hashName(parent.id, name);
1657
+ for (var node = FS.nameTable[hash]; node; node = node.name_next) {
1658
+ var nodeName = node.name;
1659
+ if (node.parent.id === parent.id && nodeName === name) {
1660
+ return node
1661
+ }
1662
+ }
1663
+ return FS.lookup(parent, name)
1664
+ },
1665
+ createNode(parent, name, mode, rdev) {
1666
+ var node = new FS.FSNode(parent, name, mode, rdev);
1667
+ FS.hashAddNode(node);
1668
+ return node
1669
+ },
1670
+ destroyNode(node) {
1671
+ FS.hashRemoveNode(node)
1672
+ },
1673
+ isRoot(node) {
1674
+ return node === node.parent
1675
+ },
1676
+ isMountpoint(node) {
1677
+ return !!node.mounted
1678
+ },
1679
+ isFile(mode) {
1680
+ return (mode & 61440) === 32768
1681
+ },
1682
+ isDir(mode) {
1683
+ return (mode & 61440) === 16384
1684
+ },
1685
+ isLink(mode) {
1686
+ return (mode & 61440) === 40960
1687
+ },
1688
+ isChrdev(mode) {
1689
+ return (mode & 61440) === 8192
1690
+ },
1691
+ isBlkdev(mode) {
1692
+ return (mode & 61440) === 24576
1693
+ },
1694
+ isFIFO(mode) {
1695
+ return (mode & 61440) === 4096
1696
+ },
1697
+ isSocket(mode) {
1698
+ return (mode & 49152) === 49152
1699
+ },
1700
+ flagsToPermissionString(flag) {
1701
+ var perms = ['r', 'w', 'rw'][flag & 3];
1702
+ if (flag & 512) {
1703
+ perms += 'w'
1704
+ }
1705
+ return perms
1706
+ },
1707
+ nodePermissions(node, perms) {
1708
+ if (FS.ignorePermissions) {
1709
+ return 0
1710
+ }
1711
+ if (perms.includes('r') && !(node.mode & 292)) {
1712
+ return 2
1713
+ } else if (perms.includes('w') && !(node.mode & 146)) {
1714
+ return 2
1715
+ } else if (perms.includes('x') && !(node.mode & 73)) {
1716
+ return 2
1717
+ }
1718
+ return 0
1719
+ },
1720
+ mayLookup(dir) {
1721
+ if (!FS.isDir(dir.mode)) return 54;
1722
+ var errCode = FS.nodePermissions(dir, 'x');
1723
+ if (errCode) return errCode;
1724
+ if (!dir.node_ops.lookup) return 2;
1725
+ return 0
1726
+ },
1727
+ mayCreate(dir, name) {
1728
+ try {
1729
+ var node = FS.lookupNode(dir, name);
1730
+ return 20
1731
+ } catch (e) {
1732
+ }
1733
+ return FS.nodePermissions(dir, 'wx')
1734
+ },
1735
+ mayDelete(dir, name, isdir) {
1736
+ var node;
1737
+ try {
1738
+ node = FS.lookupNode(dir, name)
1739
+ } catch (e) {
1740
+ return e.errno
1741
+ }
1742
+ var errCode = FS.nodePermissions(dir, 'wx');
1743
+ if (errCode) {
1744
+ return errCode
1745
+ }
1746
+ if (isdir) {
1747
+ if (!FS.isDir(node.mode)) {
1748
+ return 54
1749
+ }
1750
+ if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
1751
+ return 10
1752
+ }
1753
+ } else {
1754
+ if (FS.isDir(node.mode)) {
1755
+ return 31
1756
+ }
1757
+ }
1758
+ return 0
1759
+ },
1760
+ mayOpen(node, flags) {
1761
+ if (!node) {
1762
+ return 44
1763
+ }
1764
+ if (FS.isLink(node.mode)) {
1765
+ return 32
1766
+ } else if (FS.isDir(node.mode)) {
1767
+ if (FS.flagsToPermissionString(flags) !== 'r' || flags & 512) {
1768
+ return 31
1769
+ }
1770
+ }
1771
+ return FS.nodePermissions(node, FS.flagsToPermissionString(flags))
1772
+ },
1773
+ MAX_OPEN_FDS: 4096,
1774
+ nextfd() {
1775
+ for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {
1776
+ if (!FS.streams[fd]) {
1777
+ return fd
1778
+ }
1779
+ }
1780
+ throw new FS.ErrnoError(33)
1781
+ },
1782
+ getStreamChecked(fd) {
1783
+ var stream = FS.getStream(fd);
1784
+ if (!stream) {
1785
+ throw new FS.ErrnoError(8)
1786
+ }
1787
+ return stream
1788
+ },
1789
+ getStream: fd => FS.streams[fd],
1790
+ createStream(stream, fd = -1) {
1791
+ stream = Object.assign(new FS.FSStream, stream);
1792
+ if (fd == -1) {
1793
+ fd = FS.nextfd()
1794
+ }
1795
+ stream.fd = fd;
1796
+ FS.streams[fd] = stream;
1797
+ return stream
1798
+ },
1799
+ closeStream(fd) {
1800
+ FS.streams[fd] = null
1801
+ },
1802
+ dupStream(origStream, fd = -1) {
1803
+ var stream = FS.createStream(origStream, fd);
1804
+ stream.stream_ops?.dup?.(stream);
1805
+ return stream
1806
+ },
1807
+ chrdev_stream_ops: {
1808
+ open(stream) {
1809
+ var device = FS.getDevice(stream.node.rdev);
1810
+ stream.stream_ops = device.stream_ops;
1811
+ stream.stream_ops.open?.(stream)
1812
+ },
1813
+ llseek() {
1814
+ throw new FS.ErrnoError(70)
1815
+ }
1816
+ },
1817
+ major: dev => dev >> 8,
1818
+ minor: dev => dev & 255,
1819
+ makedev: (ma, mi) => ma << 8 | mi,
1820
+ registerDevice(dev, ops) {
1821
+ FS.devices[dev] = {stream_ops: ops}
1822
+ },
1823
+ getDevice: dev => FS.devices[dev],
1824
+ getMounts(mount) {
1825
+ var mounts = [];
1826
+ var check = [mount];
1827
+ while (check.length) {
1828
+ var m = check.pop();
1829
+ mounts.push(m);
1830
+ check.push(...m.mounts)
1831
+ }
1832
+ return mounts
1833
+ },
1834
+ syncfs(populate, callback) {
1835
+ if (typeof populate == 'function') {
1836
+ callback = populate;
1837
+ populate = false
1838
+ }
1839
+ FS.syncFSRequests++;
1840
+ if (FS.syncFSRequests > 1) {
1841
+ err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)
1842
+ }
1843
+ var mounts = FS.getMounts(FS.root.mount);
1844
+ var completed = 0;
1845
+ function doCallback(errCode) {
1846
+ FS.syncFSRequests--;
1847
+ return callback(errCode)
1848
+ }
1849
+ function done(errCode) {
1850
+ if (errCode) {
1851
+ if (!done.errored) {
1852
+ done.errored = true;
1853
+ return doCallback(errCode)
1854
+ }
1855
+ return
1856
+ }
1857
+ if (++completed >= mounts.length) {
1858
+ doCallback(null)
1859
+ }
1860
+ }
1861
+ mounts.forEach(mount => {
1862
+ if (!mount.type.syncfs) {
1863
+ return done(null)
1864
+ }
1865
+ mount.type.syncfs(mount, populate, done)
1866
+ })
1867
+ },
1868
+ mount(type, opts, mountpoint) {
1869
+ var root = mountpoint === '/';
1870
+ var pseudo = !mountpoint;
1871
+ var node;
1872
+ if (root && FS.root) {
1873
+ throw new FS.ErrnoError(10)
1874
+ } else if (!root && !pseudo) {
1875
+ var lookup = FS.lookupPath(mountpoint, {follow_mount: false});
1876
+ mountpoint = lookup.path;
1877
+ node = lookup.node;
1878
+ if (FS.isMountpoint(node)) {
1879
+ throw new FS.ErrnoError(10)
1880
+ }
1881
+ if (!FS.isDir(node.mode)) {
1882
+ throw new FS.ErrnoError(54)
1883
+ }
1884
+ }
1885
+ var mount = {type: type, opts: opts, mountpoint: mountpoint, mounts: []};
1886
+ var mountRoot = type.mount(mount);
1887
+ mountRoot.mount = mount;
1888
+ mount.root = mountRoot;
1889
+ if (root) {
1890
+ FS.root = mountRoot
1891
+ } else if (node) {
1892
+ node.mounted = mount;
1893
+ if (node.mount) {
1894
+ node.mount.mounts.push(mount)
1895
+ }
1896
+ }
1897
+ return mountRoot
1898
+ },
1899
+ unmount(mountpoint) {
1900
+ var lookup = FS.lookupPath(mountpoint, {follow_mount: false});
1901
+ if (!FS.isMountpoint(lookup.node)) {
1902
+ throw new FS.ErrnoError(28)
1903
+ }
1904
+ var node = lookup.node;
1905
+ var mount = node.mounted;
1906
+ var mounts = FS.getMounts(mount);
1907
+ Object.keys(FS.nameTable).forEach(hash => {
1908
+ var current = FS.nameTable[hash];
1909
+ while (current) {
1910
+ var next = current.name_next;
1911
+ if (mounts.includes(current.mount)) {
1912
+ FS.destroyNode(current)
1913
+ }
1914
+ current = next
1915
+ }
1916
+ });
1917
+ node.mounted = null;
1918
+ var idx = node.mount.mounts.indexOf(mount);
1919
+ node.mount.mounts.splice(idx, 1)
1920
+ },
1921
+ lookup(parent, name) {
1922
+ return parent.node_ops.lookup(parent, name)
1923
+ },
1924
+ mknod(path, mode, dev) {
1925
+ var lookup = FS.lookupPath(path, {parent: true});
1926
+ var parent = lookup.node;
1927
+ var name = PATH.basename(path);
1928
+ if (!name || name === '.' || name === '..') {
1929
+ throw new FS.ErrnoError(28)
1930
+ }
1931
+ var errCode = FS.mayCreate(parent, name);
1932
+ if (errCode) {
1933
+ throw new FS.ErrnoError(errCode)
1934
+ }
1935
+ if (!parent.node_ops.mknod) {
1936
+ throw new FS.ErrnoError(63)
1937
+ }
1938
+ return parent.node_ops.mknod(parent, name, mode, dev)
1939
+ },
1940
+ create(path, mode) {
1941
+ mode = mode !== undefined ? mode : 438;
1942
+ mode &= 4095;
1943
+ mode |= 32768;
1944
+ return FS.mknod(path, mode, 0)
1945
+ },
1946
+ mkdir(path, mode) {
1947
+ mode = mode !== undefined ? mode : 511;
1948
+ mode &= 511 | 512;
1949
+ mode |= 16384;
1950
+ return FS.mknod(path, mode, 0)
1951
+ },
1952
+ mkdirTree(path, mode) {
1953
+ var dirs = path.split('/');
1954
+ var d = '';
1955
+ for (var i = 0; i < dirs.length; ++i) {
1956
+ if (!dirs[i]) continue;
1957
+ d += '/' + dirs[i];
1958
+ try {
1959
+ FS.mkdir(d, mode)
1960
+ } catch (e) {
1961
+ if (e.errno != 20) throw e
1962
+ }
1963
+ }
1964
+ },
1965
+ mkdev(path, mode, dev) {
1966
+ if (typeof dev == 'undefined') {
1967
+ dev = mode;
1968
+ mode = 438
1969
+ }
1970
+ mode |= 8192;
1971
+ return FS.mknod(path, mode, dev)
1972
+ },
1973
+ symlink(oldpath, newpath) {
1974
+ if (!PATH_FS.resolve(oldpath)) {
1975
+ throw new FS.ErrnoError(44)
1976
+ }
1977
+ var lookup = FS.lookupPath(newpath, {parent: true});
1978
+ var parent = lookup.node;
1979
+ if (!parent) {
1980
+ throw new FS.ErrnoError(44)
1981
+ }
1982
+ var newname = PATH.basename(newpath);
1983
+ var errCode = FS.mayCreate(parent, newname);
1984
+ if (errCode) {
1985
+ throw new FS.ErrnoError(errCode)
1986
+ }
1987
+ if (!parent.node_ops.symlink) {
1988
+ throw new FS.ErrnoError(63)
1989
+ }
1990
+ return parent.node_ops.symlink(parent, newname, oldpath)
1991
+ },
1992
+ rename(old_path, new_path) {
1993
+ var old_dirname = PATH.dirname(old_path);
1994
+ var new_dirname = PATH.dirname(new_path);
1995
+ var old_name = PATH.basename(old_path);
1996
+ var new_name = PATH.basename(new_path);
1997
+ var lookup, old_dir, new_dir;
1998
+ lookup = FS.lookupPath(old_path, {parent: true});
1999
+ old_dir = lookup.node;
2000
+ lookup = FS.lookupPath(new_path, {parent: true});
2001
+ new_dir = lookup.node;
2002
+ if (!old_dir || !new_dir) throw new FS.ErrnoError(44);
2003
+ if (old_dir.mount !== new_dir.mount) {
2004
+ throw new FS.ErrnoError(75)
2005
+ }
2006
+ var old_node = FS.lookupNode(old_dir, old_name);
2007
+ var relative = PATH_FS.relative(old_path, new_dirname);
2008
+ if (relative.charAt(0) !== '.') {
2009
+ throw new FS.ErrnoError(28)
2010
+ }
2011
+ relative = PATH_FS.relative(new_path, old_dirname);
2012
+ if (relative.charAt(0) !== '.') {
2013
+ throw new FS.ErrnoError(55)
2014
+ }
2015
+ var new_node;
2016
+ try {
2017
+ new_node = FS.lookupNode(new_dir, new_name)
2018
+ } catch (e) {
2019
+ }
2020
+ if (old_node === new_node) {
2021
+ return
2022
+ }
2023
+ var isdir = FS.isDir(old_node.mode);
2024
+ var errCode = FS.mayDelete(old_dir, old_name, isdir);
2025
+ if (errCode) {
2026
+ throw new FS.ErrnoError(errCode)
2027
+ }
2028
+ errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
2029
+ if (errCode) {
2030
+ throw new FS.ErrnoError(errCode)
2031
+ }
2032
+ if (!old_dir.node_ops.rename) {
2033
+ throw new FS.ErrnoError(63)
2034
+ }
2035
+ if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {
2036
+ throw new FS.ErrnoError(10)
2037
+ }
2038
+ if (new_dir !== old_dir) {
2039
+ errCode = FS.nodePermissions(old_dir, 'w');
2040
+ if (errCode) {
2041
+ throw new FS.ErrnoError(errCode)
2042
+ }
2043
+ }
2044
+ FS.hashRemoveNode(old_node);
2045
+ try {
2046
+ old_dir.node_ops.rename(old_node, new_dir, new_name);
2047
+ old_node.parent = new_dir
2048
+ } catch (e) {
2049
+ throw e
2050
+ } finally {
2051
+ FS.hashAddNode(old_node)
2052
+ }
2053
+ },
2054
+ rmdir(path) {
2055
+ var lookup = FS.lookupPath(path, {parent: true});
2056
+ var parent = lookup.node;
2057
+ var name = PATH.basename(path);
2058
+ var node = FS.lookupNode(parent, name);
2059
+ var errCode = FS.mayDelete(parent, name, true);
2060
+ if (errCode) {
2061
+ throw new FS.ErrnoError(errCode)
2062
+ }
2063
+ if (!parent.node_ops.rmdir) {
2064
+ throw new FS.ErrnoError(63)
2065
+ }
2066
+ if (FS.isMountpoint(node)) {
2067
+ throw new FS.ErrnoError(10)
2068
+ }
2069
+ parent.node_ops.rmdir(parent, name);
2070
+ FS.destroyNode(node)
2071
+ },
2072
+ readdir(path) {
2073
+ var lookup = FS.lookupPath(path, {follow: true});
2074
+ var node = lookup.node;
2075
+ if (!node.node_ops.readdir) {
2076
+ throw new FS.ErrnoError(54)
2077
+ }
2078
+ return node.node_ops.readdir(node)
2079
+ },
2080
+ unlink(path) {
2081
+ var lookup = FS.lookupPath(path, {parent: true});
2082
+ var parent = lookup.node;
2083
+ if (!parent) {
2084
+ throw new FS.ErrnoError(44)
2085
+ }
2086
+ var name = PATH.basename(path);
2087
+ var node = FS.lookupNode(parent, name);
2088
+ var errCode = FS.mayDelete(parent, name, false);
2089
+ if (errCode) {
2090
+ throw new FS.ErrnoError(errCode)
2091
+ }
2092
+ if (!parent.node_ops.unlink) {
2093
+ throw new FS.ErrnoError(63)
2094
+ }
2095
+ if (FS.isMountpoint(node)) {
2096
+ throw new FS.ErrnoError(10)
2097
+ }
2098
+ parent.node_ops.unlink(parent, name);
2099
+ FS.destroyNode(node)
2100
+ },
2101
+ readlink(path) {
2102
+ var lookup = FS.lookupPath(path);
2103
+ var link = lookup.node;
2104
+ if (!link) {
2105
+ throw new FS.ErrnoError(44)
2106
+ }
2107
+ if (!link.node_ops.readlink) {
2108
+ throw new FS.ErrnoError(28)
2109
+ }
2110
+ return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link))
2111
+ },
2112
+ stat(path, dontFollow) {
2113
+ var lookup = FS.lookupPath(path, {follow: !dontFollow});
2114
+ var node = lookup.node;
2115
+ if (!node) {
2116
+ throw new FS.ErrnoError(44)
2117
+ }
2118
+ if (!node.node_ops.getattr) {
2119
+ throw new FS.ErrnoError(63)
2120
+ }
2121
+ return node.node_ops.getattr(node)
2122
+ },
2123
+ lstat(path) {
2124
+ return FS.stat(path, true)
2125
+ },
2126
+ chmod(path, mode, dontFollow) {
2127
+ var node;
2128
+ if (typeof path == 'string') {
2129
+ var lookup = FS.lookupPath(path, {follow: !dontFollow});
2130
+ node = lookup.node
2131
+ } else {
2132
+ node = path
2133
+ }
2134
+ if (!node.node_ops.setattr) {
2135
+ throw new FS.ErrnoError(63)
2136
+ }
2137
+ node.node_ops.setattr(node, {mode: mode & 4095 | node.mode & ~4095, timestamp: Date.now()})
2138
+ },
2139
+ lchmod(path, mode) {
2140
+ FS.chmod(path, mode, true)
2141
+ },
2142
+ fchmod(fd, mode) {
2143
+ var stream = FS.getStreamChecked(fd);
2144
+ FS.chmod(stream.node, mode)
2145
+ },
2146
+ chown(path, uid, gid, dontFollow) {
2147
+ var node;
2148
+ if (typeof path == 'string') {
2149
+ var lookup = FS.lookupPath(path, {follow: !dontFollow});
2150
+ node = lookup.node
2151
+ } else {
2152
+ node = path
2153
+ }
2154
+ if (!node.node_ops.setattr) {
2155
+ throw new FS.ErrnoError(63)
2156
+ }
2157
+ node.node_ops.setattr(node, {timestamp: Date.now()})
2158
+ },
2159
+ lchown(path, uid, gid) {
2160
+ FS.chown(path, uid, gid, true)
2161
+ },
2162
+ fchown(fd, uid, gid) {
2163
+ var stream = FS.getStreamChecked(fd);
2164
+ FS.chown(stream.node, uid, gid)
2165
+ },
2166
+ truncate(path, len) {
2167
+ if (len < 0) {
2168
+ throw new FS.ErrnoError(28)
2169
+ }
2170
+ var node;
2171
+ if (typeof path == 'string') {
2172
+ var lookup = FS.lookupPath(path, {follow: true});
2173
+ node = lookup.node
2174
+ } else {
2175
+ node = path
2176
+ }
2177
+ if (!node.node_ops.setattr) {
2178
+ throw new FS.ErrnoError(63)
2179
+ }
2180
+ if (FS.isDir(node.mode)) {
2181
+ throw new FS.ErrnoError(31)
2182
+ }
2183
+ if (!FS.isFile(node.mode)) {
2184
+ throw new FS.ErrnoError(28)
2185
+ }
2186
+ var errCode = FS.nodePermissions(node, 'w');
2187
+ if (errCode) {
2188
+ throw new FS.ErrnoError(errCode)
2189
+ }
2190
+ node.node_ops.setattr(node, {size: len, timestamp: Date.now()})
2191
+ },
2192
+ ftruncate(fd, len) {
2193
+ var stream = FS.getStreamChecked(fd);
2194
+ if ((stream.flags & 2097155) === 0) {
2195
+ throw new FS.ErrnoError(28)
2196
+ }
2197
+ FS.truncate(stream.node, len)
2198
+ },
2199
+ utime(path, atime, mtime) {
2200
+ var lookup = FS.lookupPath(path, {follow: true});
2201
+ var node = lookup.node;
2202
+ node.node_ops.setattr(node, {timestamp: Math.max(atime, mtime)})
2203
+ },
2204
+ open(path, flags, mode) {
2205
+ if (path === '') {
2206
+ throw new FS.ErrnoError(44)
2207
+ }
2208
+ flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;
2209
+ if (flags & 64) {
2210
+ mode = typeof mode == 'undefined' ? 438 : mode;
2211
+ mode = mode & 4095 | 32768
2212
+ } else {
2213
+ mode = 0
2214
+ }
2215
+ var node;
2216
+ if (typeof path == 'object') {
2217
+ node = path
2218
+ } else {
2219
+ path = PATH.normalize(path);
2220
+ try {
2221
+ var lookup = FS.lookupPath(path, {follow: !(flags & 131072)});
2222
+ node = lookup.node
2223
+ } catch (e) {
2224
+ }
2225
+ }
2226
+ var created = false;
2227
+ if (flags & 64) {
2228
+ if (node) {
2229
+ if (flags & 128) {
2230
+ throw new FS.ErrnoError(20)
2231
+ }
2232
+ } else {
2233
+ node = FS.mknod(path, mode, 0);
2234
+ created = true
2235
+ }
2236
+ }
2237
+ if (!node) {
2238
+ throw new FS.ErrnoError(44)
2239
+ }
2240
+ if (FS.isChrdev(node.mode)) {
2241
+ flags &= ~512
2242
+ }
2243
+ if (flags & 65536 && !FS.isDir(node.mode)) {
2244
+ throw new FS.ErrnoError(54)
2245
+ }
2246
+ if (!created) {
2247
+ var errCode = FS.mayOpen(node, flags);
2248
+ if (errCode) {
2249
+ throw new FS.ErrnoError(errCode)
2250
+ }
2251
+ }
2252
+ if (flags & 512 && !created) {
2253
+ FS.truncate(node, 0)
2254
+ }
2255
+ flags &= ~(128 | 512 | 131072);
2256
+ var stream = FS.createStream({
2257
+ node: node,
2258
+ path: FS.getPath(node),
2259
+ flags: flags,
2260
+ seekable: true,
2261
+ position: 0,
2262
+ stream_ops: node.stream_ops,
2263
+ ungotten: [],
2264
+ error: false
2265
+ });
2266
+ if (stream.stream_ops.open) {
2267
+ stream.stream_ops.open(stream)
2268
+ }
2269
+ if (Module['logReadFiles'] && !(flags & 1)) {
2270
+ if (!FS.readFiles) FS.readFiles = {};
2271
+ if (!(path in FS.readFiles)) {
2272
+ FS.readFiles[path] = 1
2273
+ }
2274
+ }
2275
+ return stream
2276
+ },
2277
+ close(stream) {
2278
+ if (FS.isClosed(stream)) {
2279
+ throw new FS.ErrnoError(8)
2280
+ }
2281
+ if (stream.getdents) stream.getdents = null;
2282
+ try {
2283
+ if (stream.stream_ops.close) {
2284
+ stream.stream_ops.close(stream)
2285
+ }
2286
+ } catch (e) {
2287
+ throw e
2288
+ } finally {
2289
+ FS.closeStream(stream.fd)
2290
+ }
2291
+ stream.fd = null
2292
+ },
2293
+ isClosed(stream) {
2294
+ return stream.fd === null
2295
+ },
2296
+ llseek(stream, offset, whence) {
2297
+ if (FS.isClosed(stream)) {
2298
+ throw new FS.ErrnoError(8)
2299
+ }
2300
+ if (!stream.seekable || !stream.stream_ops.llseek) {
2301
+ throw new FS.ErrnoError(70)
2302
+ }
2303
+ if (whence != 0 && whence != 1 && whence != 2) {
2304
+ throw new FS.ErrnoError(28)
2305
+ }
2306
+ stream.position = stream.stream_ops.llseek(stream, offset, whence);
2307
+ stream.ungotten = [];
2308
+ return stream.position
2309
+ },
2310
+ read(stream, buffer, offset, length, position) {
2311
+ if (length < 0 || position < 0) {
2312
+ throw new FS.ErrnoError(28)
2313
+ }
2314
+ if (FS.isClosed(stream)) {
2315
+ throw new FS.ErrnoError(8)
2316
+ }
2317
+ if ((stream.flags & 2097155) === 1) {
2318
+ throw new FS.ErrnoError(8)
2319
+ }
2320
+ if (FS.isDir(stream.node.mode)) {
2321
+ throw new FS.ErrnoError(31)
2322
+ }
2323
+ if (!stream.stream_ops.read) {
2324
+ throw new FS.ErrnoError(28)
2325
+ }
2326
+ var seeking = typeof position != 'undefined';
2327
+ if (!seeking) {
2328
+ position = stream.position
2329
+ } else if (!stream.seekable) {
2330
+ throw new FS.ErrnoError(70)
2331
+ }
2332
+ var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
2333
+ if (!seeking) stream.position += bytesRead;
2334
+ return bytesRead
2335
+ },
2336
+ write(stream, buffer, offset, length, position, canOwn) {
2337
+ if (length < 0 || position < 0) {
2338
+ throw new FS.ErrnoError(28)
2339
+ }
2340
+ if (FS.isClosed(stream)) {
2341
+ throw new FS.ErrnoError(8)
2342
+ }
2343
+ if ((stream.flags & 2097155) === 0) {
2344
+ throw new FS.ErrnoError(8)
2345
+ }
2346
+ if (FS.isDir(stream.node.mode)) {
2347
+ throw new FS.ErrnoError(31)
2348
+ }
2349
+ if (!stream.stream_ops.write) {
2350
+ throw new FS.ErrnoError(28)
2351
+ }
2352
+ if (stream.seekable && stream.flags & 1024) {
2353
+ FS.llseek(stream, 0, 2)
2354
+ }
2355
+ var seeking = typeof position != 'undefined';
2356
+ if (!seeking) {
2357
+ position = stream.position
2358
+ } else if (!stream.seekable) {
2359
+ throw new FS.ErrnoError(70)
2360
+ }
2361
+ var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
2362
+ if (!seeking) stream.position += bytesWritten;
2363
+ return bytesWritten
2364
+ },
2365
+ allocate(stream, offset, length) {
2366
+ if (FS.isClosed(stream)) {
2367
+ throw new FS.ErrnoError(8)
2368
+ }
2369
+ if (offset < 0 || length <= 0) {
2370
+ throw new FS.ErrnoError(28)
2371
+ }
2372
+ if ((stream.flags & 2097155) === 0) {
2373
+ throw new FS.ErrnoError(8)
2374
+ }
2375
+ if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
2376
+ throw new FS.ErrnoError(43)
2377
+ }
2378
+ if (!stream.stream_ops.allocate) {
2379
+ throw new FS.ErrnoError(138)
2380
+ }
2381
+ stream.stream_ops.allocate(stream, offset, length)
2382
+ },
2383
+ mmap(stream, length, position, prot, flags) {
2384
+ if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {
2385
+ throw new FS.ErrnoError(2)
2386
+ }
2387
+ if ((stream.flags & 2097155) === 1) {
2388
+ throw new FS.ErrnoError(2)
2389
+ }
2390
+ if (!stream.stream_ops.mmap) {
2391
+ throw new FS.ErrnoError(43)
2392
+ }
2393
+ if (!length) {
2394
+ throw new FS.ErrnoError(28)
2395
+ }
2396
+ return stream.stream_ops.mmap(stream, length, position, prot, flags)
2397
+ },
2398
+ msync(stream, buffer, offset, length, mmapFlags) {
2399
+ if (!stream.stream_ops.msync) {
2400
+ return 0
2401
+ }
2402
+ return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags)
2403
+ },
2404
+ ioctl(stream, cmd, arg) {
2405
+ if (!stream.stream_ops.ioctl) {
2406
+ throw new FS.ErrnoError(59)
2407
+ }
2408
+ return stream.stream_ops.ioctl(stream, cmd, arg)
2409
+ },
2410
+ readFile(path, opts = {}) {
2411
+ opts.flags = opts.flags || 0;
2412
+ opts.encoding = opts.encoding || 'binary';
2413
+ if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
2414
+ throw new Error(`Invalid encoding type "${opts.encoding}"`)
2415
+ }
2416
+ var ret;
2417
+ var stream = FS.open(path, opts.flags);
2418
+ var stat = FS.stat(path);
2419
+ var length = stat.size;
2420
+ var buf = new Uint8Array(length);
2421
+ FS.read(stream, buf, 0, length, 0);
2422
+ if (opts.encoding === 'utf8') {
2423
+ ret = UTF8ArrayToString(buf, 0)
2424
+ } else if (opts.encoding === 'binary') {
2425
+ ret = buf
2426
+ }
2427
+ FS.close(stream);
2428
+ return ret
2429
+ },
2430
+ writeFile(path, data, opts = {}) {
2431
+ opts.flags = opts.flags || 577;
2432
+ var stream = FS.open(path, opts.flags, opts.mode);
2433
+ if (typeof data == 'string') {
2434
+ var buf = new Uint8Array(lengthBytesUTF8(data) + 1);
2435
+ var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
2436
+ FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn)
2437
+ } else if (ArrayBuffer.isView(data)) {
2438
+ FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn)
2439
+ } else {
2440
+ throw new Error('Unsupported data type')
2441
+ }
2442
+ FS.close(stream)
2443
+ },
2444
+ cwd: () => FS.currentPath,
2445
+ chdir(path) {
2446
+ var lookup = FS.lookupPath(path, {follow: true});
2447
+ if (lookup.node === null) {
2448
+ throw new FS.ErrnoError(44)
2449
+ }
2450
+ if (!FS.isDir(lookup.node.mode)) {
2451
+ throw new FS.ErrnoError(54)
2452
+ }
2453
+ var errCode = FS.nodePermissions(lookup.node, 'x');
2454
+ if (errCode) {
2455
+ throw new FS.ErrnoError(errCode)
2456
+ }
2457
+ FS.currentPath = lookup.path
2458
+ },
2459
+ createDefaultDirectories() {
2460
+ FS.mkdir('/tmp');
2461
+ FS.mkdir('/home');
2462
+ FS.mkdir('/home/web_user')
2463
+ },
2464
+ createDefaultDevices() {
2465
+ FS.mkdir('/dev');
2466
+ FS.registerDevice(FS.makedev(1, 3), {read: () => 0, write: (stream, buffer, offset, length, pos) => length});
2467
+ FS.mkdev('/dev/null', FS.makedev(1, 3));
2468
+ TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
2469
+ TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
2470
+ FS.mkdev('/dev/tty', FS.makedev(5, 0));
2471
+ FS.mkdev('/dev/tty1', FS.makedev(6, 0));
2472
+ var randomBuffer = new Uint8Array(1024), randomLeft = 0;
2473
+ var randomByte = () => {
2474
+ if (randomLeft === 0) {
2475
+ randomLeft = randomFill(randomBuffer).byteLength
2476
+ }
2477
+ return randomBuffer[--randomLeft]
2478
+ };
2479
+ FS.createDevice('/dev', 'random', randomByte);
2480
+ FS.createDevice('/dev', 'urandom', randomByte);
2481
+ FS.mkdir('/dev/shm');
2482
+ FS.mkdir('/dev/shm/tmp')
2483
+ },
2484
+ createSpecialDirectories() {
2485
+ FS.mkdir('/proc');
2486
+ var proc_self = FS.mkdir('/proc/self');
2487
+ FS.mkdir('/proc/self/fd');
2488
+ FS.mount({
2489
+ mount() {
2490
+ var node = FS.createNode(proc_self, 'fd', 16384 | 511, 73);
2491
+ node.node_ops = {
2492
+ lookup(parent, name) {
2493
+ var fd = +name;
2494
+ var stream = FS.getStreamChecked(fd);
2495
+ var ret = {parent: null, mount: {mountpoint: 'fake'}, node_ops: {readlink: () => stream.path}};
2496
+ ret.parent = ret;
2497
+ return ret
2498
+ }
2499
+ };
2500
+ return node
2501
+ }
2502
+ },
2503
+ {},
2504
+ '/proc/self/fd')
2505
+ },
2506
+ createStandardStreams(input, output, error) {
2507
+ if (input) {
2508
+ FS.createDevice('/dev', 'stdin', input)
2509
+ } else {
2510
+ FS.symlink('/dev/tty', '/dev/stdin')
2511
+ }
2512
+ if (output) {
2513
+ FS.createDevice('/dev', 'stdout', null, output)
2514
+ } else {
2515
+ FS.symlink('/dev/tty', '/dev/stdout')
2516
+ }
2517
+ if (error) {
2518
+ FS.createDevice('/dev', 'stderr', null, error)
2519
+ } else {
2520
+ FS.symlink('/dev/tty1', '/dev/stderr')
2521
+ }
2522
+ var stdin = FS.open('/dev/stdin', 0);
2523
+ var stdout = FS.open('/dev/stdout', 1);
2524
+ var stderr = FS.open('/dev/stderr', 1)
2525
+ },
2526
+ staticInit() {
2527
+ [44].forEach(code => {
2528
+ FS.genericErrors[code] = new FS.ErrnoError(code);
2529
+ FS.genericErrors[code].stack = '<generic error, no stack>'
2530
+ });
2531
+ FS.nameTable = new Array(4096);
2532
+ FS.mount(MEMFS, {}, '/');
2533
+ FS.createDefaultDirectories();
2534
+ FS.createDefaultDevices();
2535
+ FS.createSpecialDirectories();
2536
+ FS.filesystems = {MEMFS: MEMFS, NODEFS: NODEFS}
2537
+ },
2538
+ init(input, output, error) {
2539
+ FS.initialized = true;
2540
+ input ??= Module['stdin'];
2541
+ output ??= Module['stdout'];
2542
+ error ??= Module['stderr'];
2543
+ FS.createStandardStreams(input, output, error)
2544
+ },
2545
+ quit() {
2546
+ FS.initialized = false;
2547
+ for (var i = 0; i < FS.streams.length; i++) {
2548
+ var stream = FS.streams[i];
2549
+ if (!stream) {
2550
+ continue
2551
+ }
2552
+ FS.close(stream)
2553
+ }
2554
+ },
2555
+ findObject(path, dontResolveLastLink) {
2556
+ var ret = FS.analyzePath(path, dontResolveLastLink);
2557
+ if (!ret.exists) {
2558
+ return null
2559
+ }
2560
+ return ret.object
2561
+ },
2562
+ analyzePath(path, dontResolveLastLink) {
2563
+ try {
2564
+ var lookup = FS.lookupPath(path, {follow: !dontResolveLastLink});
2565
+ path = lookup.path
2566
+ } catch (e) {
2567
+ }
2568
+ var ret = {
2569
+ isRoot: false,
2570
+ exists: false,
2571
+ error: 0,
2572
+ name: null,
2573
+ path: null,
2574
+ object: null,
2575
+ parentExists: false,
2576
+ parentPath: null,
2577
+ parentObject: null
2578
+ };
2579
+ try {
2580
+ var lookup = FS.lookupPath(path, {parent: true});
2581
+ ret.parentExists = true;
2582
+ ret.parentPath = lookup.path;
2583
+ ret.parentObject = lookup.node;
2584
+ ret.name = PATH.basename(path);
2585
+ lookup = FS.lookupPath(path, {follow: !dontResolveLastLink});
2586
+ ret.exists = true;
2587
+ ret.path = lookup.path;
2588
+ ret.object = lookup.node;
2589
+ ret.name = lookup.node.name;
2590
+ ret.isRoot = lookup.path === '/'
2591
+ } catch (e) {
2592
+ ret.error = e.errno
2593
+ }
2594
+ return ret
2595
+ },
2596
+ createPath(parent, path, canRead, canWrite) {
2597
+ parent = typeof parent == 'string' ? parent : FS.getPath(parent);
2598
+ var parts = path.split('/').reverse();
2599
+ while (parts.length) {
2600
+ var part = parts.pop();
2601
+ if (!part) continue;
2602
+ var current = PATH.join2(parent, part);
2603
+ try {
2604
+ FS.mkdir(current)
2605
+ } catch (e) {
2606
+ }
2607
+ parent = current
2608
+ }
2609
+ return current
2610
+ },
2611
+ createFile(parent, name, properties, canRead, canWrite) {
2612
+ var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);
2613
+ var mode = FS_getMode(canRead, canWrite);
2614
+ return FS.create(path, mode)
2615
+ },
2616
+ createDataFile(parent, name, data, canRead, canWrite, canOwn) {
2617
+ var path = name;
2618
+ if (parent) {
2619
+ parent = typeof parent == 'string' ? parent : FS.getPath(parent);
2620
+ path = name ? PATH.join2(parent, name) : parent
2621
+ }
2622
+ var mode = FS_getMode(canRead, canWrite);
2623
+ var node = FS.create(path, mode);
2624
+ if (data) {
2625
+ if (typeof data == 'string') {
2626
+ var arr = new Array(data.length);
2627
+ for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
2628
+ data = arr
2629
+ }
2630
+ FS.chmod(node, mode | 146);
2631
+ var stream = FS.open(node, 577);
2632
+ FS.write(stream, data, 0, data.length, 0, canOwn);
2633
+ FS.close(stream);
2634
+ FS.chmod(node, mode)
2635
+ }
2636
+ },
2637
+ createDevice(parent, name, input, output) {
2638
+ var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);
2639
+ var mode = FS_getMode(!!input, !!output);
2640
+ if (!FS.createDevice.major) FS.createDevice.major = 64;
2641
+ var dev = FS.makedev(FS.createDevice.major++, 0);
2642
+ FS.registerDevice(dev, {
2643
+ open(stream) {
2644
+ stream.seekable = false
2645
+ },
2646
+ close(stream) {
2647
+ if (output?.buffer?.length) {
2648
+ output(10)
2649
+ }
2650
+ },
2651
+ read(stream, buffer, offset, length, pos) {
2652
+ var bytesRead = 0;
2653
+ for (var i = 0; i < length; i++) {
2654
+ var result;
2655
+ try {
2656
+ result = input()
2657
+ } catch (e) {
2658
+ throw new FS.ErrnoError(29)
2659
+ }
2660
+ if (result === undefined && bytesRead === 0) {
2661
+ throw new FS.ErrnoError(6)
2662
+ }
2663
+ if (result === null || result === undefined) break;
2664
+ bytesRead++;
2665
+ buffer[offset + i] = result
2666
+ }
2667
+ if (bytesRead) {
2668
+ stream.node.timestamp = Date.now()
2669
+ }
2670
+ return bytesRead
2671
+ },
2672
+ write(stream, buffer, offset, length, pos) {
2673
+ for (var i = 0; i < length; i++) {
2674
+ try {
2675
+ output(buffer[offset + i])
2676
+ } catch (e) {
2677
+ throw new FS.ErrnoError(29)
2678
+ }
2679
+ }
2680
+ if (length) {
2681
+ stream.node.timestamp = Date.now()
2682
+ }
2683
+ return i
2684
+ }
2685
+ });
2686
+ return FS.mkdev(path, mode, dev)
2687
+ },
2688
+ forceLoadFile(obj) {
2689
+ if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
2690
+ if (typeof XMLHttpRequest != 'undefined') {
2691
+ throw new Error(
2692
+ '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.')
2693
+ } else {
2694
+ try {
2695
+ obj.contents = readBinary(obj.url);
2696
+ obj.usedBytes = obj.contents.length
2697
+ } catch (e) {
2698
+ throw new FS.ErrnoError(29)
2699
+ }
2700
+ }
2701
+ },
2702
+ createLazyFile(parent, name, url, canRead, canWrite) {
2703
+ class LazyUint8Array {
2704
+ constructor() {
2705
+ this.lengthKnown = false;
2706
+ this.chunks = []
2707
+ }
2708
+ get(idx) {
2709
+ if (idx > this.length - 1 || idx < 0) {
2710
+ return undefined
2711
+ }
2712
+ var chunkOffset = idx % this.chunkSize;
2713
+ var chunkNum = idx / this.chunkSize | 0;
2714
+ return this.getter(chunkNum)[chunkOffset]
2715
+ }
2716
+ setDataGetter(getter) {
2717
+ this.getter = getter
2718
+ }
2719
+ cacheLength() {
2720
+ var xhr = new XMLHttpRequest;
2721
+ xhr.open('HEAD', url, false);
2722
+ xhr.send(null);
2723
+ if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
2724
+ throw new Error('Couldn\'t load ' + url + '. Status: ' + xhr.status);
2725
+ var datalength = Number(xhr.getResponseHeader('Content-length'));
2726
+ var header;
2727
+ var hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes';
2728
+ var usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip';
2729
+ var chunkSize = 1024 * 1024;
2730
+ if (!hasByteServing) chunkSize = datalength;
2731
+ var doXHR = (from, to) => {
2732
+ if (from > to) throw new Error('invalid range (' + from + ', ' + to + ') or no bytes requested!');
2733
+ if (to > datalength - 1)
2734
+ throw new Error('only ' + datalength + ' bytes available! programmer error!');
2735
+ var xhr = new XMLHttpRequest;
2736
+ xhr.open('GET', url, false);
2737
+ if (datalength !== chunkSize) xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);
2738
+ xhr.responseType = 'arraybuffer';
2739
+ if (xhr.overrideMimeType) {
2740
+ xhr.overrideMimeType('text/plain; charset=x-user-defined')
2741
+ }
2742
+ xhr.send(null);
2743
+ if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
2744
+ throw new Error('Couldn\'t load ' + url + '. Status: ' + xhr.status);
2745
+ if (xhr.response !== undefined) {
2746
+ return new Uint8Array(xhr.response || [])
2747
+ }
2748
+ return intArrayFromString(xhr.responseText || '', true)
2749
+ };
2750
+ var lazyArray = this;
2751
+ lazyArray.setDataGetter(chunkNum => {
2752
+ var start = chunkNum * chunkSize;
2753
+ var end = (chunkNum + 1) * chunkSize - 1;
2754
+ end = Math.min(end, datalength - 1);
2755
+ if (typeof lazyArray.chunks[chunkNum] == 'undefined') {
2756
+ lazyArray.chunks[chunkNum] = doXHR(start, end)
2757
+ }
2758
+ if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!');
2759
+ return lazyArray.chunks[chunkNum]
2760
+ });
2761
+ if (usesGzip || !datalength) {
2762
+ chunkSize = datalength = 1;
2763
+ datalength = this.getter(0).length;
2764
+ chunkSize = datalength;
2765
+ out('LazyFiles on gzip forces download of the whole file when length is accessed')
2766
+ }
2767
+ this._length = datalength;
2768
+ this._chunkSize = chunkSize;
2769
+ this.lengthKnown = true
2770
+ }
2771
+ get length() {
2772
+ if (!this.lengthKnown) {
2773
+ this.cacheLength()
2774
+ }
2775
+ return this._length
2776
+ }
2777
+ get chunkSize() {
2778
+ if (!this.lengthKnown) {
2779
+ this.cacheLength()
2780
+ }
2781
+ return this._chunkSize
2782
+ }
2783
+ }
2784
+ if (typeof XMLHttpRequest != 'undefined') {
2785
+ if (!ENVIRONMENT_IS_WORKER)
2786
+ throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
2787
+ var lazyArray = new LazyUint8Array;
2788
+ var properties = {isDevice: false, contents: lazyArray}
2789
+ } else {
2790
+ var properties = {isDevice: false, url: url}
2791
+ }
2792
+ var node = FS.createFile(parent, name, properties, canRead, canWrite);
2793
+ if (properties.contents) {
2794
+ node.contents = properties.contents
2795
+ } else if (properties.url) {
2796
+ node.contents = null;
2797
+ node.url = properties.url
2798
+ }
2799
+ Object.defineProperties(node, {
2800
+ usedBytes: {
2801
+ get: function() {
2802
+ return this.contents.length
2803
+ }
2804
+ }
2805
+ });
2806
+ var stream_ops = {};
2807
+ var keys = Object.keys(node.stream_ops);
2808
+ keys.forEach(key => {
2809
+ var fn = node.stream_ops[key];
2810
+ stream_ops[key] = (...args) => {
2811
+ FS.forceLoadFile(node);
2812
+ return fn(...args)
2813
+ }
2814
+ });
2815
+ function writeChunks(stream, buffer, offset, length, position) {
2816
+ var contents = stream.node.contents;
2817
+ if (position >= contents.length) return 0;
2818
+ var size = Math.min(contents.length - position, length);
2819
+ if (contents.slice) {
2820
+ for (var i = 0; i < size; i++) {
2821
+ buffer[offset + i] = contents[position + i]
2822
+ }
2823
+ } else {
2824
+ for (var i = 0; i < size; i++) {
2825
+ buffer[offset + i] = contents.get(position + i)
2826
+ }
2827
+ }
2828
+ return size
2829
+ }
2830
+ stream_ops.read = (stream, buffer, offset, length, position) => {
2831
+ FS.forceLoadFile(node);
2832
+ return writeChunks(stream, buffer, offset, length, position)
2833
+ };
2834
+ stream_ops.mmap = (stream, length, position, prot, flags) => {
2835
+ FS.forceLoadFile(node);
2836
+ var ptr = mmapAlloc(length);
2837
+ if (!ptr) {
2838
+ throw new FS.ErrnoError(48)
2839
+ }
2840
+ writeChunks(stream, HEAP8, ptr, length, position);
2841
+ return {
2842
+ ptr: ptr, allocated: true
2843
+ }
2844
+ };
2845
+ node.stream_ops = stream_ops;
2846
+ return node
2847
+ }
2848
+ };
2849
+ var UTF8ToString = (ptr, maxBytesToRead) => ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';
2850
+ var SYSCALLS = {
2851
+ DEFAULT_POLLMASK: 5,
2852
+ calculateAt(dirfd, path, allowEmpty) {
2853
+ if (PATH.isAbs(path)) {
2854
+ return path
2855
+ }
2856
+ var dir;
2857
+ if (dirfd === -100) {
2858
+ dir = FS.cwd()
2859
+ } else {
2860
+ var dirstream = SYSCALLS.getStreamFromFD(dirfd);
2861
+ dir = dirstream.path
2862
+ }
2863
+ if (path.length == 0) {
2864
+ if (!allowEmpty) {
2865
+ throw new FS.ErrnoError(44)
2866
+ }
2867
+ return dir
2868
+ }
2869
+ return PATH.join2(dir, path)
2870
+ },
2871
+ doStat(func, path, buf) {
2872
+ var stat = func(path);
2873
+ HEAP32[buf >> 2] = stat.dev;
2874
+ HEAP32[buf + 4 >> 2] = stat.mode;
2875
+ HEAPU32[buf + 8 >> 2] = stat.nlink;
2876
+ HEAP32[buf + 12 >> 2] = stat.uid;
2877
+ HEAP32[buf + 16 >> 2] = stat.gid;
2878
+ HEAP32[buf + 20 >> 2] = stat.rdev;
2879
+ tempI64 =
2880
+ [
2881
+ stat.size >>> 0,
2882
+ (tempDouble = stat.size,
2883
+ +Math.abs(tempDouble) >= 1
2884
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2885
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2886
+ : 0)
2887
+ ],
2888
+ HEAP32[buf + 24 >> 2] = tempI64[0], HEAP32[buf + 28 >> 2] = tempI64[1];
2889
+ HEAP32[buf + 32 >> 2] = 4096;
2890
+ HEAP32[buf + 36 >> 2] = stat.blocks;
2891
+ var atime = stat.atime.getTime();
2892
+ var mtime = stat.mtime.getTime();
2893
+ var ctime = stat.ctime.getTime();
2894
+ tempI64 =
2895
+ [
2896
+ Math.floor(atime / 1e3) >>> 0,
2897
+ (tempDouble = Math.floor(atime / 1e3),
2898
+ +Math.abs(tempDouble) >= 1
2899
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2900
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2901
+ : 0)
2902
+ ],
2903
+ HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1];
2904
+ HEAPU32[buf + 48 >> 2] = atime % 1e3 * 1e3;
2905
+ tempI64 =
2906
+ [
2907
+ Math.floor(mtime / 1e3) >>> 0,
2908
+ (tempDouble = Math.floor(mtime / 1e3),
2909
+ +Math.abs(tempDouble) >= 1
2910
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2911
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2912
+ : 0)
2913
+ ],
2914
+ HEAP32[buf + 56 >> 2] = tempI64[0], HEAP32[buf + 60 >> 2] = tempI64[1];
2915
+ HEAPU32[buf + 64 >> 2] = mtime % 1e3 * 1e3;
2916
+ tempI64 =
2917
+ [
2918
+ Math.floor(ctime / 1e3) >>> 0,
2919
+ (tempDouble = Math.floor(ctime / 1e3),
2920
+ +Math.abs(tempDouble) >= 1
2921
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2922
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2923
+ : 0)
2924
+ ],
2925
+ HEAP32[buf + 72 >> 2] = tempI64[0], HEAP32[buf + 76 >> 2] = tempI64[1];
2926
+ HEAPU32[buf + 80 >> 2] = ctime % 1e3 * 1e3;
2927
+ tempI64 =
2928
+ [
2929
+ stat.ino >>> 0,
2930
+ (tempDouble = stat.ino,
2931
+ +Math.abs(tempDouble) >= 1
2932
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
2933
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
2934
+ : 0)
2935
+ ],
2936
+ HEAP32[buf + 88 >> 2] = tempI64[0], HEAP32[buf + 92 >> 2] = tempI64[1];
2937
+ return 0
2938
+ },
2939
+ doMsync(addr, stream, len, flags, offset) {
2940
+ if (!FS.isFile(stream.node.mode)) {
2941
+ throw new FS.ErrnoError(43)
2942
+ }
2943
+ if (flags & 2) {
2944
+ return 0
2945
+ }
2946
+ var buffer = HEAPU8.slice(addr, addr + len);
2947
+ FS.msync(stream, buffer, offset, len, flags)
2948
+ },
2949
+ getStreamFromFD(fd) {
2950
+ var stream = FS.getStreamChecked(fd);
2951
+ return stream
2952
+ },
2953
+ varargs: undefined,
2954
+ getStr(ptr) {
2955
+ var ret = UTF8ToString(ptr);
2956
+ return ret
2957
+ }
2958
+ };
2959
+ function ___syscall_chdir(path) {
2960
+ try {
2961
+ path = SYSCALLS.getStr(path);
2962
+ FS.chdir(path);
2963
+ return 0
2964
+ } catch (e) {
2965
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
2966
+ return -e.errno
2967
+ }
2968
+ }
2969
+ function ___syscall_faccessat(dirfd, path, amode, flags) {
2970
+ try {
2971
+ path = SYSCALLS.getStr(path);
2972
+ path = SYSCALLS.calculateAt(dirfd, path);
2973
+ if (amode & ~7) {
2974
+ return -28
2975
+ }
2976
+ var lookup = FS.lookupPath(path, {follow: true});
2977
+ var node = lookup.node;
2978
+ if (!node) {
2979
+ return -44
2980
+ }
2981
+ var perms = '';
2982
+ if (amode & 4) perms += 'r';
2983
+ if (amode & 2) perms += 'w';
2984
+ if (amode & 1) perms += 'x';
2985
+ if (perms && FS.nodePermissions(node, perms)) {
2986
+ return -2
2987
+ }
2988
+ return 0
2989
+ } catch (e) {
2990
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
2991
+ return -e.errno
2992
+ }
2993
+ }
2994
+ function syscallGetVarargI() {
2995
+ var ret = HEAP32[+SYSCALLS.varargs >> 2];
2996
+ SYSCALLS.varargs += 4;
2997
+ return ret
2998
+ }
2999
+ var syscallGetVarargP = syscallGetVarargI;
3000
+ function ___syscall_fcntl64(fd, cmd, varargs) {
3001
+ SYSCALLS.varargs = varargs;
3002
+ try {
3003
+ var stream = SYSCALLS.getStreamFromFD(fd);
3004
+ switch (cmd) {
3005
+ case 0: {
3006
+ var arg = syscallGetVarargI();
3007
+ if (arg < 0) {
3008
+ return -28
3009
+ }
3010
+ while (FS.streams[arg]) {
3011
+ arg++
3012
+ }
3013
+ var newStream;
3014
+ newStream = FS.dupStream(stream, arg);
3015
+ return newStream.fd
3016
+ }
3017
+ case 1:
3018
+ case 2: return 0;
3019
+ case 3: return stream.flags;
3020
+ case 4: {
3021
+ var arg = syscallGetVarargI();
3022
+ stream.flags |= arg;
3023
+ return 0
3024
+ }
3025
+ case 12: {
3026
+ var arg = syscallGetVarargP();
3027
+ var offset = 0;
3028
+ HEAP16[arg + offset >> 1] = 2;
3029
+ return 0
3030
+ }
3031
+ case 13:
3032
+ case 14: return 0
3033
+ }
3034
+ return -28
3035
+ } catch (e) {
3036
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3037
+ return -e.errno
3038
+ }
3039
+ }
3040
+ function ___syscall_fstat64(fd, buf) {
3041
+ try {
3042
+ var stream = SYSCALLS.getStreamFromFD(fd);
3043
+ return SYSCALLS.doStat(FS.stat, stream.path, buf)
3044
+ } catch (e) {
3045
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3046
+ return -e.errno
3047
+ }
3048
+ }
3049
+ var stringToUTF8 = (str, outPtr, maxBytesToWrite) => stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
3050
+ function ___syscall_getcwd(buf, size) {
3051
+ try {
3052
+ if (size === 0) return -28;
3053
+ var cwd = FS.cwd();
3054
+ var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1;
3055
+ if (size < cwdLengthInBytes) return -68;
3056
+ stringToUTF8(cwd, buf, size);
3057
+ return cwdLengthInBytes
3058
+ } catch (e) {
3059
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3060
+ return -e.errno
3061
+ }
3062
+ }
3063
+ function ___syscall_getdents64(fd, dirp, count) {
3064
+ try {
3065
+ var stream = SYSCALLS.getStreamFromFD(fd);
3066
+ stream.getdents ||= FS.readdir(stream.path);
3067
+ var struct_size = 280;
3068
+ var pos = 0;
3069
+ var off = FS.llseek(stream, 0, 1);
3070
+ var idx = Math.floor(off / struct_size);
3071
+ while (idx < stream.getdents.length && pos + struct_size <= count) {
3072
+ var id;
3073
+ var type;
3074
+ var name = stream.getdents[idx];
3075
+ if (name === '.') {
3076
+ id = stream.node.id;
3077
+ type = 4
3078
+ } else if (name === '..') {
3079
+ var lookup = FS.lookupPath(stream.path, {parent: true});
3080
+ id = lookup.node.id;
3081
+ type = 4
3082
+ } else {
3083
+ var child = FS.lookupNode(stream.node, name);
3084
+ id = child.id;
3085
+ type = FS.isChrdev(child.mode) ? 2 : FS.isDir(child.mode) ? 4 : FS.isLink(child.mode) ? 10 : 8
3086
+ }
3087
+ tempI64 =
3088
+ [
3089
+ id >>> 0,
3090
+ (tempDouble = id,
3091
+ +Math.abs(tempDouble) >= 1
3092
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3093
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3094
+ : 0)
3095
+ ],
3096
+ HEAP32[dirp + pos >> 2] = tempI64[0], HEAP32[dirp + pos + 4 >> 2] = tempI64[1];
3097
+ tempI64 =
3098
+ [
3099
+ (idx + 1) * struct_size >>> 0,
3100
+ (tempDouble = (idx + 1) * struct_size,
3101
+ +Math.abs(tempDouble) >= 1
3102
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3103
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3104
+ : 0)
3105
+ ],
3106
+ HEAP32[dirp + pos + 8 >> 2] = tempI64[0], HEAP32[dirp + pos + 12 >> 2] = tempI64[1];
3107
+ HEAP16[dirp + pos + 16 >> 1] = 280;
3108
+ HEAP8[dirp + pos + 18] = type;
3109
+ stringToUTF8(name, dirp + pos + 19, 256);
3110
+ pos += struct_size;
3111
+ idx += 1
3112
+ }
3113
+ FS.llseek(stream, idx * struct_size, 0);
3114
+ return pos
3115
+ } catch (e) {
3116
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3117
+ return -e.errno
3118
+ }
3119
+ }
3120
+ function ___syscall_ioctl(fd, op, varargs) {
3121
+ SYSCALLS.varargs = varargs;
3122
+ try {
3123
+ var stream = SYSCALLS.getStreamFromFD(fd);
3124
+ switch (op) {
3125
+ case 21509: {
3126
+ if (!stream.tty) return -59;
3127
+ return 0
3128
+ }
3129
+ case 21505: {
3130
+ if (!stream.tty) return -59;
3131
+ if (stream.tty.ops.ioctl_tcgets) {
3132
+ var termios = stream.tty.ops.ioctl_tcgets(stream);
3133
+ var argp = syscallGetVarargP();
3134
+ HEAP32[argp >> 2] = termios.c_iflag || 0;
3135
+ HEAP32[argp + 4 >> 2] = termios.c_oflag || 0;
3136
+ HEAP32[argp + 8 >> 2] = termios.c_cflag || 0;
3137
+ HEAP32[argp + 12 >> 2] = termios.c_lflag || 0;
3138
+ for (var i = 0; i < 32; i++) {
3139
+ HEAP8[argp + i + 17] = termios.c_cc[i] || 0
3140
+ }
3141
+ return 0
3142
+ }
3143
+ return 0
3144
+ }
3145
+ case 21510:
3146
+ case 21511:
3147
+ case 21512: {
3148
+ if (!stream.tty) return -59;
3149
+ return 0
3150
+ }
3151
+ case 21506:
3152
+ case 21507:
3153
+ case 21508: {
3154
+ if (!stream.tty) return -59;
3155
+ if (stream.tty.ops.ioctl_tcsets) {
3156
+ var argp = syscallGetVarargP();
3157
+ var c_iflag = HEAP32[argp >> 2];
3158
+ var c_oflag = HEAP32[argp + 4 >> 2];
3159
+ var c_cflag = HEAP32[argp + 8 >> 2];
3160
+ var c_lflag = HEAP32[argp + 12 >> 2];
3161
+ var c_cc = [];
3162
+ for (var i = 0; i < 32; i++) {
3163
+ c_cc.push(HEAP8[argp + i + 17])
3164
+ }
3165
+ return stream.tty.ops.ioctl_tcsets(
3166
+ stream.tty,
3167
+ op,
3168
+ {c_iflag: c_iflag, c_oflag: c_oflag, c_cflag: c_cflag, c_lflag: c_lflag, c_cc: c_cc})
3169
+ }
3170
+ return 0
3171
+ }
3172
+ case 21519: {
3173
+ if (!stream.tty) return -59;
3174
+ var argp = syscallGetVarargP();
3175
+ HEAP32[argp >> 2] = 0;
3176
+ return 0
3177
+ }
3178
+ case 21520: {
3179
+ if (!stream.tty) return -59;
3180
+ return -28
3181
+ }
3182
+ case 21531: {
3183
+ var argp = syscallGetVarargP();
3184
+ return FS.ioctl(stream, op, argp)
3185
+ }
3186
+ case 21523: {
3187
+ if (!stream.tty) return -59;
3188
+ if (stream.tty.ops.ioctl_tiocgwinsz) {
3189
+ var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);
3190
+ var argp = syscallGetVarargP();
3191
+ HEAP16[argp >> 1] = winsize[0];
3192
+ HEAP16[argp + 2 >> 1] = winsize[1]
3193
+ }
3194
+ return 0
3195
+ }
3196
+ case 21524: {
3197
+ if (!stream.tty) return -59;
3198
+ return 0
3199
+ }
3200
+ case 21515: {
3201
+ if (!stream.tty) return -59;
3202
+ return 0
3203
+ }
3204
+ default: return -28
3205
+ }
3206
+ } catch (e) {
3207
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3208
+ return -e.errno
3209
+ }
3210
+ }
3211
+ function ___syscall_lstat64(path, buf) {
3212
+ try {
3213
+ path = SYSCALLS.getStr(path);
3214
+ return SYSCALLS.doStat(FS.lstat, path, buf)
3215
+ } catch (e) {
3216
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3217
+ return -e.errno
3218
+ }
3219
+ }
3220
+ function ___syscall_newfstatat(dirfd, path, buf, flags) {
3221
+ try {
3222
+ path = SYSCALLS.getStr(path);
3223
+ var nofollow = flags & 256;
3224
+ var allowEmpty = flags & 4096;
3225
+ flags = flags & ~6400;
3226
+ path = SYSCALLS.calculateAt(dirfd, path, allowEmpty);
3227
+ return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf)
3228
+ } catch (e) {
3229
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3230
+ return -e.errno
3231
+ }
3232
+ }
3233
+ function ___syscall_openat(dirfd, path, flags, varargs) {
3234
+ SYSCALLS.varargs = varargs;
3235
+ try {
3236
+ path = SYSCALLS.getStr(path);
3237
+ path = SYSCALLS.calculateAt(dirfd, path);
3238
+ var mode = varargs ? syscallGetVarargI() : 0;
3239
+ return FS.open(path, flags, mode).fd
3240
+ } catch (e) {
3241
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3242
+ return -e.errno
3243
+ }
3244
+ }
3245
+ function ___syscall_readlinkat(dirfd, path, buf, bufsize) {
3246
+ try {
3247
+ path = SYSCALLS.getStr(path);
3248
+ path = SYSCALLS.calculateAt(dirfd, path);
3249
+ if (bufsize <= 0) return -28;
3250
+ var ret = FS.readlink(path);
3251
+ var len = Math.min(bufsize, lengthBytesUTF8(ret));
3252
+ var endChar = HEAP8[buf + len];
3253
+ stringToUTF8(ret, buf, bufsize + 1);
3254
+ HEAP8[buf + len] = endChar;
3255
+ return len
3256
+ } catch (e) {
3257
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3258
+ return -e.errno
3259
+ }
3260
+ }
3261
+ function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {
3262
+ try {
3263
+ oldpath = SYSCALLS.getStr(oldpath);
3264
+ newpath = SYSCALLS.getStr(newpath);
3265
+ oldpath = SYSCALLS.calculateAt(olddirfd, oldpath);
3266
+ newpath = SYSCALLS.calculateAt(newdirfd, newpath);
3267
+ FS.rename(oldpath, newpath);
3268
+ return 0
3269
+ } catch (e) {
3270
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3271
+ return -e.errno
3272
+ }
3273
+ }
3274
+ function ___syscall_rmdir(path) {
3275
+ try {
3276
+ path = SYSCALLS.getStr(path);
3277
+ FS.rmdir(path);
3278
+ return 0
3279
+ } catch (e) {
3280
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3281
+ return -e.errno
3282
+ }
3283
+ }
3284
+ function ___syscall_stat64(path, buf) {
3285
+ try {
3286
+ path = SYSCALLS.getStr(path);
3287
+ return SYSCALLS.doStat(FS.stat, path, buf)
3288
+ } catch (e) {
3289
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3290
+ return -e.errno
3291
+ }
3292
+ }
3293
+ function ___syscall_statfs64(path, size, buf) {
3294
+ try {
3295
+ path = SYSCALLS.getStr(path);
3296
+ HEAP32[buf + 4 >> 2] = 4096;
3297
+ HEAP32[buf + 40 >> 2] = 4096;
3298
+ HEAP32[buf + 8 >> 2] = 1e6;
3299
+ HEAP32[buf + 12 >> 2] = 5e5;
3300
+ HEAP32[buf + 16 >> 2] = 5e5;
3301
+ HEAP32[buf + 20 >> 2] = FS.nextInode;
3302
+ HEAP32[buf + 24 >> 2] = 1e6;
3303
+ HEAP32[buf + 28 >> 2] = 42;
3304
+ HEAP32[buf + 44 >> 2] = 2;
3305
+ HEAP32[buf + 36 >> 2] = 255;
3306
+ return 0
3307
+ } catch (e) {
3308
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3309
+ return -e.errno
3310
+ }
3311
+ }
3312
+ function ___syscall_unlinkat(dirfd, path, flags) {
3313
+ try {
3314
+ path = SYSCALLS.getStr(path);
3315
+ path = SYSCALLS.calculateAt(dirfd, path);
3316
+ if (flags === 0) {
3317
+ FS.unlink(path)
3318
+ } else if (flags === 512) {
3319
+ FS.rmdir(path)
3320
+ } else {
3321
+ abort('Invalid flags passed to unlinkat')
3322
+ }
3323
+ return 0
3324
+ } catch (e) {
3325
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3326
+ return -e.errno
3327
+ }
3328
+ }
3329
+ var __abort_js = () => {
3330
+ abort('')
3331
+ };
3332
+ var nowIsMonotonic = 1;
3333
+ var __emscripten_get_now_is_monotonic = () => nowIsMonotonic;
3334
+ var __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);
3335
+ var __emscripten_runtime_keepalive_clear = () => {
3336
+ noExitRuntime = false;
3337
+ runtimeKeepaliveCounter = 0
3338
+ };
3339
+ var convertI32PairToI53Checked = (lo, hi) => hi + 2097152 >>> 0 < 4194305 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN;
3340
+ function __gmtime_js(time_low, time_high, tmPtr) {
3341
+ var time = convertI32PairToI53Checked(time_low, time_high);
3342
+ var date = new Date(time * 1e3);
3343
+ HEAP32[tmPtr >> 2] = date.getUTCSeconds();
3344
+ HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes();
3345
+ HEAP32[tmPtr + 8 >> 2] = date.getUTCHours();
3346
+ HEAP32[tmPtr + 12 >> 2] = date.getUTCDate();
3347
+ HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth();
3348
+ HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900;
3349
+ HEAP32[tmPtr + 24 >> 2] = date.getUTCDay();
3350
+ var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
3351
+ var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
3352
+ HEAP32[tmPtr + 28 >> 2] = yday
3353
+ }
3354
+ var isLeapYear = year => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
3355
+ var MONTH_DAYS_LEAP_CUMULATIVE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];
3356
+ var MONTH_DAYS_REGULAR_CUMULATIVE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
3357
+ var ydayFromDate = date => {
3358
+ var leap = isLeapYear(date.getFullYear());
3359
+ var monthDaysCumulative = leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE;
3360
+ var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1;
3361
+ return yday
3362
+ };
3363
+ function __localtime_js(time_low, time_high, tmPtr) {
3364
+ var time = convertI32PairToI53Checked(time_low, time_high);
3365
+ var date = new Date(time * 1e3);
3366
+ HEAP32[tmPtr >> 2] = date.getSeconds();
3367
+ HEAP32[tmPtr + 4 >> 2] = date.getMinutes();
3368
+ HEAP32[tmPtr + 8 >> 2] = date.getHours();
3369
+ HEAP32[tmPtr + 12 >> 2] = date.getDate();
3370
+ HEAP32[tmPtr + 16 >> 2] = date.getMonth();
3371
+ HEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900;
3372
+ HEAP32[tmPtr + 24 >> 2] = date.getDay();
3373
+ var yday = ydayFromDate(date) | 0;
3374
+ HEAP32[tmPtr + 28 >> 2] = yday;
3375
+ HEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60);
3376
+ var start = new Date(date.getFullYear(), 0, 1);
3377
+ var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
3378
+ var winterOffset = start.getTimezoneOffset();
3379
+ var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;
3380
+ HEAP32[tmPtr + 32 >> 2] = dst
3381
+ }
3382
+ function __mmap_js(len, prot, flags, fd, offset_low, offset_high, allocated, addr) {
3383
+ var offset = convertI32PairToI53Checked(offset_low, offset_high);
3384
+ try {
3385
+ if (isNaN(offset)) return 61;
3386
+ var stream = SYSCALLS.getStreamFromFD(fd);
3387
+ var res = FS.mmap(stream, len, offset, prot, flags);
3388
+ var ptr = res.ptr;
3389
+ HEAP32[allocated >> 2] = res.allocated;
3390
+ HEAPU32[addr >> 2] = ptr;
3391
+ return 0
3392
+ } catch (e) {
3393
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3394
+ return -e.errno
3395
+ }
3396
+ }
3397
+ function __munmap_js(addr, len, prot, flags, fd, offset_low, offset_high) {
3398
+ var offset = convertI32PairToI53Checked(offset_low, offset_high);
3399
+ try {
3400
+ var stream = SYSCALLS.getStreamFromFD(fd);
3401
+ if (prot & 2) {
3402
+ SYSCALLS.doMsync(addr, stream, len, flags, offset)
3403
+ }
3404
+ } catch (e) {
3405
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3406
+ return -e.errno
3407
+ }
3408
+ }
3409
+ var timers = {};
3410
+ var handleException = e => {
3411
+ if (e instanceof ExitStatus || e == 'unwind') {
3412
+ return EXITSTATUS
3413
+ }
3414
+ quit_(1, e)
3415
+ };
3416
+ var runtimeKeepaliveCounter = 0;
3417
+ var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;
3418
+ var _proc_exit = code => {
3419
+ EXITSTATUS = code;
3420
+ if (!keepRuntimeAlive()) {
3421
+ Module['onExit']?.(code);
3422
+ ABORT = true
3423
+ }
3424
+ quit_(code, new ExitStatus(code))
3425
+ };
3426
+ var exitJS = (status, implicit) => {
3427
+ EXITSTATUS = status;
3428
+ _proc_exit(status)
3429
+ };
3430
+ var _exit = exitJS;
3431
+ var maybeExit = () => {
3432
+ if (!keepRuntimeAlive()) {
3433
+ try {
3434
+ _exit(EXITSTATUS)
3435
+ } catch (e) {
3436
+ handleException(e)
3437
+ }
3438
+ }
3439
+ };
3440
+ var callUserCallback = func => {
3441
+ if (ABORT) {
3442
+ return
3443
+ }
3444
+ try {
3445
+ func();
3446
+ maybeExit()
3447
+ } catch (e) {
3448
+ handleException(e)
3449
+ }
3450
+ };
3451
+ var _emscripten_get_now;
3452
+ _emscripten_get_now = () => performance.now();
3453
+ var __setitimer_js = (which, timeout_ms) => {
3454
+ if (timers[which]) {
3455
+ clearTimeout(timers[which].id);
3456
+ delete timers[which]
3457
+ }
3458
+ if (!timeout_ms) return 0;
3459
+ var id = setTimeout(() => {
3460
+ delete timers[which];
3461
+ callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()))
3462
+ }, timeout_ms);
3463
+ timers[which] = {id: id, timeout_ms: timeout_ms};
3464
+ return 0
3465
+ };
3466
+ var __tzset_js = (timezone, daylight, std_name, dst_name) => {
3467
+ var currentYear = (new Date).getFullYear();
3468
+ var winter = new Date(currentYear, 0, 1);
3469
+ var summer = new Date(currentYear, 6, 1);
3470
+ var winterOffset = winter.getTimezoneOffset();
3471
+ var summerOffset = summer.getTimezoneOffset();
3472
+ var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
3473
+ HEAPU32[timezone >> 2] = stdTimezoneOffset * 60;
3474
+ HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);
3475
+ var extractZone = timezoneOffset => {
3476
+ var sign = timezoneOffset >= 0 ? '-' : '+';
3477
+ var absOffset = Math.abs(timezoneOffset);
3478
+ var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');
3479
+ var minutes = String(absOffset % 60).padStart(2, '0');
3480
+ return `UTC${sign}${hours}${minutes}`
3481
+ };
3482
+ var winterName = extractZone(winterOffset);
3483
+ var summerName = extractZone(summerOffset);
3484
+ if (summerOffset < winterOffset) {
3485
+ stringToUTF8(winterName, std_name, 17);
3486
+ stringToUTF8(summerName, dst_name, 17)
3487
+ } else {
3488
+ stringToUTF8(winterName, dst_name, 17);
3489
+ stringToUTF8(summerName, std_name, 17)
3490
+ }
3491
+ };
3492
+ var _emscripten_date_now = () => Date.now();
3493
+ var getHeapMax = () => 2147483648;
3494
+ var _emscripten_get_heap_max = () => getHeapMax();
3495
+ var growMemory = size => {
3496
+ var b = wasmMemory.buffer;
3497
+ var pages = (size - b.byteLength + 65535) / 65536;
3498
+ try {
3499
+ wasmMemory.grow(pages);
3500
+ updateMemoryViews();
3501
+ return 1
3502
+ } catch (e) {
3503
+ }
3504
+ };
3505
+ var _emscripten_resize_heap = requestedSize => {
3506
+ var oldSize = HEAPU8.length;
3507
+ requestedSize >>>= 0;
3508
+ var maxHeapSize = getHeapMax();
3509
+ if (requestedSize > maxHeapSize) {
3510
+ return false
3511
+ }
3512
+ for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
3513
+ var overGrownHeapSize = oldSize * (1 + .2 / cutDown);
3514
+ overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
3515
+ var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));
3516
+ var replacement = growMemory(newSize);
3517
+ if (replacement) {
3518
+ return true
3519
+ }
3520
+ }
3521
+ return false
3522
+ };
3523
+ var ENV = {};
3524
+ var getExecutableName = () => thisProgram || './this.program';
3525
+ var getEnvStrings = () => {
3526
+ if (!getEnvStrings.strings) {
3527
+ var lang =
3528
+ (typeof navigator == 'object' && navigator.languages && navigator.languages[0] || 'C').replace('-', '_') +
3529
+ '.UTF-8';
3530
+ var env = {
3531
+ USER: 'web_user',
3532
+ LOGNAME: 'web_user',
3533
+ PATH: '/',
3534
+ PWD: '/',
3535
+ HOME: '/home/web_user',
3536
+ LANG: lang,
3537
+ _: getExecutableName()
3538
+ };
3539
+ for (var x in ENV) {
3540
+ if (ENV[x] === undefined)
3541
+ delete env[x];
3542
+ else
3543
+ env[x] = ENV[x]
3544
+ }
3545
+ var strings = [];
3546
+ for (var x in env) {
3547
+ strings.push(`${x}=${env[x]}`)
3548
+ }
3549
+ getEnvStrings.strings = strings
3550
+ }
3551
+ return getEnvStrings.strings
3552
+ };
3553
+ var stringToAscii = (str, buffer) => {
3554
+ for (var i = 0; i < str.length; ++i) {
3555
+ HEAP8[buffer++] = str.charCodeAt(i)
3556
+ }
3557
+ HEAP8[buffer] = 0
3558
+ };
3559
+ var _environ_get = (__environ, environ_buf) => {
3560
+ var bufSize = 0;
3561
+ getEnvStrings().forEach((string, i) => {
3562
+ var ptr = environ_buf + bufSize;
3563
+ HEAPU32[__environ + i * 4 >> 2] = ptr;
3564
+ stringToAscii(string, ptr);
3565
+ bufSize += string.length + 1
3566
+ });
3567
+ return 0
3568
+ };
3569
+ var _environ_sizes_get = (penviron_count, penviron_buf_size) => {
3570
+ var strings = getEnvStrings();
3571
+ HEAPU32[penviron_count >> 2] = strings.length;
3572
+ var bufSize = 0;
3573
+ strings.forEach(string => bufSize += string.length + 1);
3574
+ HEAPU32[penviron_buf_size >> 2] = bufSize;
3575
+ return 0
3576
+ };
3577
+ function _fd_close(fd) {
3578
+ try {
3579
+ var stream = SYSCALLS.getStreamFromFD(fd);
3580
+ FS.close(stream);
3581
+ return 0
3582
+ } catch (e) {
3583
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3584
+ return e.errno
3585
+ }
3586
+ }
3587
+ function _fd_fdstat_get(fd, pbuf) {
3588
+ try {
3589
+ var rightsBase = 0;
3590
+ var rightsInheriting = 0;
3591
+ var flags = 0;
3592
+ {
3593
+ var stream = SYSCALLS.getStreamFromFD(fd);
3594
+ var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4
3595
+ }
3596
+ HEAP8[pbuf] = type;
3597
+ HEAP16[pbuf + 2 >> 1] = flags;
3598
+ tempI64 =
3599
+ [
3600
+ rightsBase >>> 0,
3601
+ (tempDouble = rightsBase,
3602
+ +Math.abs(tempDouble) >= 1
3603
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3604
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3605
+ : 0)
3606
+ ],
3607
+ HEAP32[pbuf + 8 >> 2] = tempI64[0], HEAP32[pbuf + 12 >> 2] = tempI64[1];
3608
+ tempI64 =
3609
+ [
3610
+ rightsInheriting >>> 0,
3611
+ (tempDouble = rightsInheriting,
3612
+ +Math.abs(tempDouble) >= 1
3613
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3614
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3615
+ : 0)
3616
+ ],
3617
+ HEAP32[pbuf + 16 >> 2] = tempI64[0], HEAP32[pbuf + 20 >> 2] = tempI64[1];
3618
+ return 0
3619
+ } catch (e) {
3620
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3621
+ return e.errno
3622
+ }
3623
+ }
3624
+ var doReadv = (stream, iov, iovcnt, offset) => {
3625
+ var ret = 0;
3626
+ for (var i = 0; i < iovcnt; i++) {
3627
+ var ptr = HEAPU32[iov >> 2];
3628
+ var len = HEAPU32[iov + 4 >> 2];
3629
+ iov += 8;
3630
+ var curr = FS.read(stream, HEAP8, ptr, len, offset);
3631
+ if (curr < 0) return -1;
3632
+ ret += curr;
3633
+ if (curr < len) break;
3634
+ if (typeof offset != 'undefined') {
3635
+ offset += curr
3636
+ }
3637
+ }
3638
+ return ret
3639
+ };
3640
+ function _fd_pread(fd, iov, iovcnt, offset_low, offset_high, pnum) {
3641
+ var offset = convertI32PairToI53Checked(offset_low, offset_high);
3642
+ try {
3643
+ if (isNaN(offset)) return 61;
3644
+ var stream = SYSCALLS.getStreamFromFD(fd);
3645
+ var num = doReadv(stream, iov, iovcnt, offset);
3646
+ HEAPU32[pnum >> 2] = num;
3647
+ return 0
3648
+ } catch (e) {
3649
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3650
+ return e.errno
3651
+ }
3652
+ }
3653
+ function _fd_read(fd, iov, iovcnt, pnum) {
3654
+ try {
3655
+ var stream = SYSCALLS.getStreamFromFD(fd);
3656
+ var num = doReadv(stream, iov, iovcnt);
3657
+ HEAPU32[pnum >> 2] = num;
3658
+ return 0
3659
+ } catch (e) {
3660
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3661
+ return e.errno
3662
+ }
3663
+ }
3664
+ function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
3665
+ var offset = convertI32PairToI53Checked(offset_low, offset_high);
3666
+ try {
3667
+ if (isNaN(offset)) return 61;
3668
+ var stream = SYSCALLS.getStreamFromFD(fd);
3669
+ FS.llseek(stream, offset, whence);
3670
+ tempI64 =
3671
+ [
3672
+ stream.position >>> 0,
3673
+ (tempDouble = stream.position,
3674
+ +Math.abs(tempDouble) >= 1
3675
+ ? tempDouble > 0 ? +Math.floor(tempDouble / 4294967296) >>> 0
3676
+ : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0
3677
+ : 0)
3678
+ ],
3679
+ HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1];
3680
+ if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;
3681
+ return 0
3682
+ } catch (e) {
3683
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3684
+ return e.errno
3685
+ }
3686
+ }
3687
+ var doWritev = (stream, iov, iovcnt, offset) => {
3688
+ var ret = 0;
3689
+ for (var i = 0; i < iovcnt; i++) {
3690
+ var ptr = HEAPU32[iov >> 2];
3691
+ var len = HEAPU32[iov + 4 >> 2];
3692
+ iov += 8;
3693
+ var curr = FS.write(stream, HEAP8, ptr, len, offset);
3694
+ if (curr < 0) return -1;
3695
+ ret += curr;
3696
+ if (curr < len) {
3697
+ break
3698
+ }
3699
+ if (typeof offset != 'undefined') {
3700
+ offset += curr
3701
+ }
3702
+ }
3703
+ return ret
3704
+ };
3705
+ function _fd_write(fd, iov, iovcnt, pnum) {
3706
+ try {
3707
+ var stream = SYSCALLS.getStreamFromFD(fd);
3708
+ var num = doWritev(stream, iov, iovcnt);
3709
+ HEAPU32[pnum >> 2] = num;
3710
+ return 0
3711
+ } catch (e) {
3712
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
3713
+ return e.errno
3714
+ }
3715
+ }
3716
+ var stackAlloc = sz => __emscripten_stack_alloc(sz);
3717
+ var stringToUTF8OnStack = str => {
3718
+ var size = lengthBytesUTF8(str) + 1;
3719
+ var ret = stackAlloc(size);
3720
+ stringToUTF8(str, ret, size);
3721
+ return ret
3722
+ };
3723
+ FS.createPreloadedFile = FS_createPreloadedFile;
3724
+ FS.staticInit();
3725
+ if (ENVIRONMENT_IS_NODE) {
3726
+ NODEFS.staticInit()
3727
+ }
3728
+ if (!ENVIRONMENT_IS_NODE) {
3729
+ throw new Error('NODERAWFS is currently only supported on Node.js environment.')
3730
+ }
3731
+ var VFS = Object.assign({}, FS);
3732
+ FS.init = NODERAWFS.init;
3733
+ var wasmImports = {
3734
+ E: ___call_sighandler,
3735
+ d: ___cxa_throw,
3736
+ l: ___syscall_chdir,
3737
+ m: ___syscall_faccessat,
3738
+ i: ___syscall_fcntl64,
3739
+ N: ___syscall_fstat64,
3740
+ J: ___syscall_getcwd,
3741
+ D: ___syscall_getdents64,
3742
+ v: ___syscall_ioctl,
3743
+ K: ___syscall_lstat64,
3744
+ L: ___syscall_newfstatat,
3745
+ h: ___syscall_openat,
3746
+ C: ___syscall_readlinkat,
3747
+ A: ___syscall_renameat,
3748
+ B: ___syscall_rmdir,
3749
+ M: ___syscall_stat64,
3750
+ y: ___syscall_statfs64,
3751
+ f: ___syscall_unlinkat,
3752
+ n: __abort_js,
3753
+ O: __emscripten_get_now_is_monotonic,
3754
+ k: __emscripten_memcpy_js,
3755
+ F: __emscripten_runtime_keepalive_clear,
3756
+ s: __gmtime_js,
3757
+ t: __localtime_js,
3758
+ p: __mmap_js,
3759
+ r: __munmap_js,
3760
+ e: __setitimer_js,
3761
+ G: __tzset_js,
3762
+ P: _emscripten_date_now,
3763
+ x: _emscripten_get_heap_max,
3764
+ j: _emscripten_get_now,
3765
+ w: _emscripten_resize_heap,
3766
+ q: _environ_get,
3767
+ z: _environ_sizes_get,
3768
+ a: _exit,
3769
+ b: _fd_close,
3770
+ I: _fd_fdstat_get,
3771
+ o: _fd_pread,
3772
+ g: _fd_read,
3773
+ u: _fd_seek,
3774
+ c: _fd_write,
3775
+ H: _proc_exit
3776
+ };
3777
+ var wasmExports = createWasm();
3778
+ var ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports['R'])();
3779
+ var _main = Module['_main'] = (a0, a1) => (_main = Module['_main'] = wasmExports['T'])(a0, a1);
3780
+ var _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports['U'])(a0, a1);
3781
+ var __emscripten_timeout = (a0, a1) => (__emscripten_timeout = wasmExports['V'])(a0, a1);
3782
+ var __emscripten_stack_alloc = a0 => (__emscripten_stack_alloc = wasmExports['W'])(a0);
3783
+ var calledRun;
3784
+ dependenciesFulfilled = function runCaller() {
3785
+ if (!calledRun) run();
3786
+ if (!calledRun) dependenciesFulfilled = runCaller
3787
+ };
3788
+ function callMain(args = []) {
3789
+ var entryFunction = _main;
3790
+ args.unshift(thisProgram);
3791
+ var argc = args.length;
3792
+ var argv = stackAlloc((argc + 1) * 4);
3793
+ var argv_ptr = argv;
3794
+ args.forEach(arg => {
3795
+ HEAPU32[argv_ptr >> 2] = stringToUTF8OnStack(arg);
3796
+ argv_ptr += 4
3797
+ });
3798
+ HEAPU32[argv_ptr >> 2] = 0;
3799
+ try {
3800
+ var ret = entryFunction(argc, argv);
3801
+ exitJS(ret, true);
3802
+ return ret
3803
+ } catch (e) {
3804
+ return handleException(e)
3805
+ }
3806
+ }
3807
+ function run(args = arguments_) {
3808
+ if (runDependencies > 0) {
3809
+ return
3810
+ }
3811
+ preRun();
3812
+ if (runDependencies > 0) {
3813
+ return
3814
+ }
3815
+ function doRun() {
3816
+ if (calledRun) return;
3817
+ calledRun = true;
3818
+ Module['calledRun'] = true;
3819
+ if (ABORT) return;
3820
+ initRuntime();
3821
+ preMain();
3822
+ Module['onRuntimeInitialized']?.();
3823
+ if (shouldRunNow) callMain(args);
3824
+ postRun()
3825
+ }
3826
+ if (Module['setStatus']) {
3827
+ Module['setStatus']('Running...');
3828
+ setTimeout(function() {
3829
+ setTimeout(function() {
3830
+ Module['setStatus']('')
3831
+ }, 1);
3832
+ doRun()
3833
+ }, 1)
3834
+ } else {
3835
+ doRun()
3836
+ }
3837
+ }
3838
+ if (Module['preInit']) {
3839
+ if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
3840
+ while (Module['preInit'].length > 0) {
3841
+ Module['preInit'].pop()()
3842
+ }
3843
+ }
3844
+ var shouldRunNow = true;
3845
+ if (Module['noInitialRun']) shouldRunNow = false;
3846
+ run();