From df154b9a565710f3154ad1d34003de8fbd5048a5 Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Mon, 15 Jun 2026 09:02:53 -0400 Subject: [PATCH] repl: auto-pause + portal-save when leaving a tab mid-eval, resume on return MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tab switching during a long-running eval used to silently abandon the calc — output stopped streaming, no snapshot, nothing to come back to. Now setActiveTab pauses the outgoing tab's eval (and optionally portal-saves the env), terminates the worker, and on re-entry hydrates + re-fires the original input. Pieces: * serve-coop.py + make serve-repl — dev server that emits Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp so SharedArrayBuffer is constructable in the browser. Same headers production needs. * C tier eval-loop pause poll — c/eval.c grows lumbda_check_pause(), guarded by #ifdef LUMBDA_WASM. Called at the top of leval()'s while(1); masked to every 1024th iteration so the polling cost stays under noise floor. When the JS-library import js_lumbda_pause_requested returns 1, lisp_error("paused") longjmps out so module-global env survives intact for the portal-snapshot that follows. * SAB plumbing — main thread allocates new SharedArrayBuffer(4), hands it through worker config → runner.setPauseFlag → lumbda-c.loader.setPauseFlag → globalThis._lumbdaCPauseFlag. Atomics.store / Atomics.load on index 0 is the signalling channel. Falls back to null when COOP/COEP isn't isolated, in which case pause degrades to a hard worker.terminate(). * autoPauseTab() — on setActiveTab away, snapshots the tier (C tier with SAB) or hard-cancels (other tiers / no SAB), stashes tab.autoPause = {tier, blob, inputSrc, savedAt}, terminates the workers so the heap is reclaimed. * autoResumeTab() — on setActiveTab into a tab with autoPause, reboots the tier, hydrates MEMFS, runs (portal-load! ...), then re-fires the original input via sendInput so the eval restarts from the saved state. Asm + Python paths re-run from scratch until their poll sites land. Also closes two UX papercuts from fox: chip ⇣ export icon bumped from 0.85em muted to 1em green so it's actually discoverable; the scope toggle now reads "scope: this tab" / "scope: all tabs" so the button label describes the state rather than a target. --- c/eval.c | 22 ++++ wasm/Makefile | 7 ++ wasm/app/runner.js | 16 ++- wasm/app/worker.mjs | 9 +- wasm/c/bend-call-library.js | 12 +++ wasm/c/lumbda-c.loader.js | 8 ++ wasm/dist-repl/c/lumbda-c.js | 2 +- wasm/dist-repl/c/lumbda-c.loader.js | 8 ++ wasm/dist-repl/c/lumbda-c.wasm | Bin 295100 -> 295672 bytes wasm/dist-repl/index.html | 2 +- wasm/dist-repl/repl.css | 11 +- wasm/dist-repl/repl.js | 161 +++++++++++++++++++++++++++- wasm/dist-repl/runner.js | 16 ++- wasm/dist-repl/worker.mjs | 9 +- wasm/repl/index.html | 2 +- wasm/repl/repl.css | 11 +- wasm/repl/repl.js | 161 +++++++++++++++++++++++++++- wasm/serve-coop.py | 44 ++++++++ www/playground/c/lumbda-c.js | 2 +- www/playground/c/lumbda-c.loader.js | 8 ++ www/playground/c/lumbda-c.wasm | Bin 295100 -> 295672 bytes www/playground/runner.js | 16 ++- www/playground/worker.mjs | 9 +- www/repl/c/lumbda-c.js | 2 +- www/repl/c/lumbda-c.loader.js | 8 ++ www/repl/c/lumbda-c.wasm | Bin 295100 -> 295672 bytes www/repl/index.html | 2 +- www/repl/repl.css | 11 +- www/repl/repl.js | 161 +++++++++++++++++++++++++++- www/repl/runner.js | 16 ++- www/repl/worker.mjs | 9 +- 31 files changed, 703 insertions(+), 42 deletions(-) create mode 100644 wasm/serve-coop.py diff --git a/c/eval.c b/c/eval.c index e50da90..9ff7f8b 100644 --- a/c/eval.c +++ b/c/eval.c @@ -664,8 +664,30 @@ Value syntax_transform_value(SyntaxTransformer *st, Value form) { * Main evaluator — TCO via explicit while loop * ═══════════════════════════════════════════════════════════════════════════ */ +#ifdef LUMBDA_WASM +/* Cooperative pause hook — the REPL's ⏸ pause button writes 1 into a + * SharedArrayBuffer atomic that the JS library import below reads. + * Polling every iteration of leval's while(1) is too expensive; mask + * to every 1024th call. lisp_error("paused") longjmps out cleanly so + * the C tier's module-global env retains every (define ...) that + * landed before the pause — exactly what (portal-snapshot!) needs to + * capture afterward. */ +extern int js_lumbda_pause_requested(void); +static unsigned long lumbda_pause_counter = 0; +static inline void lumbda_check_pause(void) { + if ((++lumbda_pause_counter & 0x3FFul) != 0) return; + if (js_lumbda_pause_requested()) { + lumbda_pause_counter = 0; + lisp_error("paused"); + } +} +#else +static inline void lumbda_check_pause(void) {} +#endif + Value leval(Value expr, Env *env) { while (1) { + lumbda_check_pause(); /* Self-evaluating */ if (IS_NIL(expr) || IS_VOID(expr) || IS_TRUE(expr) || IS_FALSE(expr) || IS_EOF(expr) || IS_CHAR(expr)) return expr; diff --git a/wasm/Makefile b/wasm/Makefile index 2a76365..793f5ca 100644 --- a/wasm/Makefile +++ b/wasm/Makefile @@ -216,6 +216,13 @@ serve: build @echo "Serving $(DIST) on http://localhost:8080" @cd $(DIST) && python3 -m http.server 8080 +# REPL dev server with the COOP/COEP headers SharedArrayBuffer needs. +# Pause-and-snapshot relies on a SAB-backed atomic flag the C tier's +# eval loop polls — the browser refuses to create a SAB without +# cross-origin-isolation headers in the response. +serve-repl: repl + @python3 serve-coop.py 8090 $(REPL_DIST) + # ─── Deploy ──────────────────────────────────────────────────────── deploy: build repl diff --git a/wasm/app/runner.js b/wasm/app/runner.js index 5379f6f..c493720 100644 --- a/wasm/app/runner.js +++ b/wasm/app/runner.js @@ -8,7 +8,7 @@ import { createCTier } from "./c/lumbda-c.loader.js"; import { createAsmTier } from "./asm/lumbda-asm.loader.js"; const cache = {}; -const config = { bendUrl: null }; +const config = { bendUrl: null, pauseFlag: null }; export function setBendUrl(url) { config.bendUrl = url || null; @@ -18,6 +18,19 @@ export function setBendUrl(url) { } } +// SharedArrayBuffer that the tier's eval loop polls for a pause +// signal. Main thread writes 1 to atomic index 0; the tier's polling +// hook (c/eval.c lumbda_check_pause) raises lisp_error("paused") at +// the next K-iteration boundary so module-global env is preserved +// and (portal-snapshot!) afterward captures everything that ran +// before the pause. +export function setPauseFlag(flag) { + config.pauseFlag = flag || null; + for (const t of Object.values(cache)) { + if (t && t.setPauseFlag) t.setPauseFlag(config.pauseFlag); + } +} + export async function getTier(name, onLoad) { if (cache[name]) return cache[name]; if (onLoad) onLoad(name); @@ -26,6 +39,7 @@ export async function getTier(name, onLoad) { else if (name === "asm") cache[name] = await createAsmTier(); else throw new Error(`unknown tier: ${name}`); if (cache[name].setBendUrl) cache[name].setBendUrl(config.bendUrl); + if (cache[name].setPauseFlag) cache[name].setPauseFlag(config.pauseFlag); return cache[name]; } diff --git a/wasm/app/worker.mjs b/wasm/app/worker.mjs index f0d9c28..baf98ec 100644 --- a/wasm/app/worker.mjs +++ b/wasm/app/worker.mjs @@ -3,12 +3,17 @@ // live ms counter actually ticks AND so cancel works (main thread // terminates this worker via worker.terminate()). -import { evalOnTier, setBendUrl, heapStats, portalSave, portalLoad } from "./runner.js"; +import { evalOnTier, setBendUrl, setPauseFlag, heapStats, portalSave, portalLoad } from "./runner.js"; self.onmessage = async (e) => { const { kind } = e.data; if (kind === "config") { - setBendUrl(e.data.bendUrl); + // Each field is independently optional so a config message can + // tweak one knob without resetting the others — REPL spawns + // workers with just { pauseFlag }; playground updates bendUrl + // alone, etc. + if (e.data.bendUrl !== undefined) setBendUrl(e.data.bendUrl); + if (e.data.pauseFlag !== undefined) setPauseFlag(e.data.pauseFlag); return; } if (kind === "heap") { diff --git a/wasm/c/bend-call-library.js b/wasm/c/bend-call-library.js index 71f9c1b..ac4c0d3 100644 --- a/wasm/c/bend-call-library.js +++ b/wasm/c/bend-call-library.js @@ -13,6 +13,18 @@ // setBendUrl that mutates it). mergeInto(LibraryManager.library, { + // Cooperative pause check — c/eval.c polls this every K iterations + // of leval(). The C tier loader sets globalThis._lumbdaCPauseFlag + // to an Int32Array view over a SharedArrayBuffer that the REPL + // main thread writes 1 to when the user clicks ⏸ pause. Without + // SAB (no COOP/COEP headers) the flag stays null and we always + // return 0 so the polling becomes a no-op. + js_lumbda_pause_requested: function() { + var flag = globalThis._lumbdaCPauseFlag; + if (!flag) return 0; + try { return Atomics.load(flag, 0) ? 1 : 0; } + catch (e) { return 0; } + }, js_lumbda_bend_call: function(payload_ptr, payload_len, resp_buf, resp_cap) { var bendUrl = globalThis._lumbdaCBendUrl; if (!bendUrl) { diff --git a/wasm/c/lumbda-c.loader.js b/wasm/c/lumbda-c.loader.js index 1fccb21..065cbfc 100644 --- a/wasm/c/lumbda-c.loader.js +++ b/wasm/c/lumbda-c.loader.js @@ -61,6 +61,14 @@ async function _bootstrap() { // global so runner.js can propagate a saved playground URL. return { setBendUrl(url) { globalThis._lumbdaCBendUrl = url || null; }, + // Pause hook — js_lumbda_pause_requested (the JS-library import + // wired in bend-call-library.js) reads globalThis._lumbdaCPauseFlag + // every K leval iterations. Setting it to an Int32Array view + // over a SharedArrayBuffer lets the REPL signal a pause from + // the main thread. Null disables (no COOP/COEP isolation). + setPauseFlag(flag) { + globalThis._lumbdaCPauseFlag = flag ? new Int32Array(flag) : null; + }, // portalSave / portalLoad bridge MEMFS to the JS side so the // REPL can persist checkpoints to the encrypted vault and // restore them on a fresh worker. Names come from the worker diff --git a/wasm/dist-repl/c/lumbda-c.js b/wasm/dist-repl/c/lumbda-c.js index 9aed6a9..6f1ffc8 100644 --- a/wasm/dist-repl/c/lumbda-c.js +++ b/wasm/dist-repl/c/lumbda-c.js @@ -1,2 +1,2 @@ -async function createLumbdaC(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;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("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var readyPromiseResolve,readyPromiseReject;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("lumbda-c.wasm")}return new URL("lumbda-c.wasm",import.meta.url).href}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"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=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=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}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};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;i0){out(UTF8ArrayToString(tty.output));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));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,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,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=MEMFS.emptyFileContents??=new Uint8Array(0)}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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=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.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},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);buffer.set(contents.subarray(position,position+size),offset);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.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);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},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.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{if(typeof str!="string")return 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_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{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{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}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={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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}if(perms.includes("w")&&!(node.mode&146)){return 2}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){if(!FS.isDir(dir.mode)){return 54}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}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},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},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},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,opts,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);for(var[hash,current]of Object.entries(FS.nameTable)){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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}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},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"){abort(`Invalid encoding type "${opts.encoding}"`)}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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);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,llseek:()=>0});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){randomFill(randomBuffer);randomLeft=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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};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},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};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(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},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 stream of FS.streams){if(stream){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){if(e.errno!=20)throw 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){data=FS_fileDataToTypedArray(data);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);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;ithis.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))abort("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)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort("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")abort("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(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("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}}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={};for(const[key,fn]of Object.entries(node.stream_ops)){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{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,allocated:true}};node.stream_ops=stream_ops;return node}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",()=>SOCKFS.emit("close",sock.stream.fd));peer.socket.on("error",error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit("close",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",()=>{SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",error=>{sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={currentUmask:18,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 dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);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();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},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_dup3(fd,newfd,flags){try{if(fd===newfd)return-28;if(flags&~524288)return-28;var old=SYSCALLS.getStreamFromFD(fd);if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);var stream=FS.dupStream(old,newfd);if(flags&524288){stream.flags|=524288}return stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var 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();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;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{return SYSCALLS.writeStat(buf,FS.fstat(fd))}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>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_oflag,c_cflag,c_lflag,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 21537: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_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}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.writeStat(buf,FS.lstat(path))}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.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}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;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream,timeout,notifyCallback){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,argp){if(request==21531){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}HEAP32[argp>>2]=currentLength;return 0}return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe2(fdPtr,flags){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var validFlags=524288|2048;if(flags&~validFlags){throw new FS.ErrnoError(138)}var res=PIPEFS.createPipe();if(flags&2048){FS.getStream(res.readable_fd).flags|=2048;FS.getStream(res.writable_fd).flags|=2048}HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}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_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}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.writeStat(buf,FS.stat(path))}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){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw new EmscriptenSjLj};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;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;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"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 _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};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;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;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);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>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);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>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>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _js_lumbda_bend_call(payload_ptr,payload_len,resp_buf,resp_cap){var bendUrl=globalThis._lumbdaCBendUrl;if(!bendUrl){var msg="no bend URL configured";var n=Math.min(msg.length,resp_cap-1);for(var i=0;i{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};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};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["FS"]=FS;var _malloc,_free,_htons,_lumbda_wasm_init,_lumbda_wasm_eval,_lumbda_wasm_free_result,_ntohs,_setThrew,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_malloc=Module["_malloc"]=wasmExports["malloc"];_free=Module["_free"]=wasmExports["free"];_htons=wasmExports["htons"];_lumbda_wasm_init=Module["_lumbda_wasm_init"]=wasmExports["lumbda_wasm_init"];_lumbda_wasm_eval=Module["_lumbda_wasm_eval"]=wasmExports["lumbda_wasm_eval"];_lumbda_wasm_free_result=Module["_lumbda_wasm_free_result"]=wasmExports["lumbda_wasm_free_result"];_ntohs=wasmExports["ntohs"];_setThrew=wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_connect:___syscall_connect,__syscall_dup3:___syscall_dup3,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe2:___syscall_pipe2,__syscall_renameat:___syscall_renameat,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,invoke_i,invoke_ii,invoke_iii,invoke_iiii,invoke_iiiii,invoke_iiiiiiiiii,invoke_iiiiijiiiii,invoke_iiiijii,invoke_iiij,invoke_iiijiii,invoke_iijj,invoke_ij,invoke_iji,invoke_ijj,invoke_ji,invoke_jii,invoke_jiii,invoke_jij,invoke_jj,invoke_jji,invoke_jjii,invoke_jjiii,invoke_jjj,invoke_jjjjjjj,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiii,invoke_viiji,invoke_vij,invoke_vijj,invoke_vjii,invoke_vjiii,js_lumbda_bend_call:_js_lumbda_bend_call,proc_exit:_proc_exit};function invoke_jij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_ijj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ij(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jj(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjjjjjj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiijiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} +async function createLumbdaC(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;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("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var readyPromiseResolve,readyPromiseReject;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("lumbda-c.wasm")}return new URL("lumbda-c.wasm",import.meta.url).href}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"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=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=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}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};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;i0){out(UTF8ArrayToString(tty.output));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));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,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,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=MEMFS.emptyFileContents??=new Uint8Array(0)}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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=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.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},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);buffer.set(contents.subarray(position,position+size),offset);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.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);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},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.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{if(typeof str!="string")return 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_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{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{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}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={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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}if(perms.includes("w")&&!(node.mode&146)){return 2}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){if(!FS.isDir(dir.mode)){return 54}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}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},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},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},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,opts,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);for(var[hash,current]of Object.entries(FS.nameTable)){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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}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},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"){abort(`Invalid encoding type "${opts.encoding}"`)}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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);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,llseek:()=>0});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){randomFill(randomBuffer);randomLeft=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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};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},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};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(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},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 stream of FS.streams){if(stream){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){if(e.errno!=20)throw 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){data=FS_fileDataToTypedArray(data);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);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;ithis.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))abort("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)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort("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")abort("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(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("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}}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={};for(const[key,fn]of Object.entries(node.stream_ops)){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{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,allocated:true}};node.stream_ops=stream_ops;return node}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",()=>SOCKFS.emit("close",sock.stream.fd));peer.socket.on("error",error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit("close",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",()=>{SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",error=>{sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={currentUmask:18,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 dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);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();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},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_dup3(fd,newfd,flags){try{if(fd===newfd)return-28;if(flags&~524288)return-28;var old=SYSCALLS.getStreamFromFD(fd);if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);var stream=FS.dupStream(old,newfd);if(flags&524288){stream.flags|=524288}return stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var 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();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;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{return SYSCALLS.writeStat(buf,FS.fstat(fd))}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>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_oflag,c_cflag,c_lflag,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 21537: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_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}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.writeStat(buf,FS.lstat(path))}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.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}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;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream,timeout,notifyCallback){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,argp){if(request==21531){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}HEAP32[argp>>2]=currentLength;return 0}return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe2(fdPtr,flags){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var validFlags=524288|2048;if(flags&~validFlags){throw new FS.ErrnoError(138)}var res=PIPEFS.createPipe();if(flags&2048){FS.getStream(res.readable_fd).flags|=2048;FS.getStream(res.writable_fd).flags|=2048}HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}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_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}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.writeStat(buf,FS.stat(path))}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){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw new EmscriptenSjLj};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;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;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"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 _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};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;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;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);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>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);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>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>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _js_lumbda_bend_call(payload_ptr,payload_len,resp_buf,resp_cap){var bendUrl=globalThis._lumbdaCBendUrl;if(!bendUrl){var msg="no bend URL configured";var n=Math.min(msg.length,resp_cap-1);for(var i=0;i{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};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};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["FS"]=FS;var _malloc,_free,_htons,_lumbda_wasm_init,_lumbda_wasm_eval,_lumbda_wasm_free_result,_ntohs,_setThrew,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_malloc=Module["_malloc"]=wasmExports["malloc"];_free=Module["_free"]=wasmExports["free"];_htons=wasmExports["htons"];_lumbda_wasm_init=Module["_lumbda_wasm_init"]=wasmExports["lumbda_wasm_init"];_lumbda_wasm_eval=Module["_lumbda_wasm_eval"]=wasmExports["lumbda_wasm_eval"];_lumbda_wasm_free_result=Module["_lumbda_wasm_free_result"]=wasmExports["lumbda_wasm_free_result"];_ntohs=wasmExports["ntohs"];_setThrew=wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_connect:___syscall_connect,__syscall_dup3:___syscall_dup3,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe2:___syscall_pipe2,__syscall_renameat:___syscall_renameat,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,invoke_i,invoke_ii,invoke_iii,invoke_iiii,invoke_iiiii,invoke_iiiiiiiiii,invoke_iiiiijiiiii,invoke_iiiijii,invoke_iiij,invoke_iiijiii,invoke_iijj,invoke_ij,invoke_iji,invoke_ijj,invoke_ji,invoke_jii,invoke_jiii,invoke_jij,invoke_jj,invoke_jji,invoke_jjii,invoke_jjiii,invoke_jjj,invoke_jjjjjjj,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiii,invoke_viiji,invoke_vij,invoke_vijj,invoke_vjii,invoke_vjiii,js_lumbda_bend_call:_js_lumbda_bend_call,js_lumbda_pause_requested:_js_lumbda_pause_requested,proc_exit:_proc_exit};function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_ijj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ij(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jj(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjjjjjj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiijiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} ;return moduleRtn}export default createLumbdaC; diff --git a/wasm/dist-repl/c/lumbda-c.loader.js b/wasm/dist-repl/c/lumbda-c.loader.js index 1fccb21..065cbfc 100644 --- a/wasm/dist-repl/c/lumbda-c.loader.js +++ b/wasm/dist-repl/c/lumbda-c.loader.js @@ -61,6 +61,14 @@ async function _bootstrap() { // global so runner.js can propagate a saved playground URL. return { setBendUrl(url) { globalThis._lumbdaCBendUrl = url || null; }, + // Pause hook — js_lumbda_pause_requested (the JS-library import + // wired in bend-call-library.js) reads globalThis._lumbdaCPauseFlag + // every K leval iterations. Setting it to an Int32Array view + // over a SharedArrayBuffer lets the REPL signal a pause from + // the main thread. Null disables (no COOP/COEP isolation). + setPauseFlag(flag) { + globalThis._lumbdaCPauseFlag = flag ? new Int32Array(flag) : null; + }, // portalSave / portalLoad bridge MEMFS to the JS side so the // REPL can persist checkpoints to the encrypted vault and // restore them on a fresh worker. Names come from the worker diff --git a/wasm/dist-repl/c/lumbda-c.wasm b/wasm/dist-repl/c/lumbda-c.wasm index 9d5fad2f70701c339d761f76f6605d7abfce4df3..94af4f177075ff01626a92e2ecf798fb24199ab7 100755 GIT binary patch delta 89525 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 delta 89566 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 diff --git a/wasm/dist-repl/index.html b/wasm/dist-repl/index.html index 37ff31c..1fcec62 100644 --- a/wasm/dist-repl/index.html +++ b/wasm/dist-repl/index.html @@ -91,7 +91,7 @@ portals: - +
diff --git a/wasm/dist-repl/repl.css b/wasm/dist-repl/repl.css index 8935273..1bbce52 100644 --- a/wasm/dist-repl/repl.css +++ b/wasm/dist-repl/repl.css @@ -233,12 +233,17 @@ body.repl { } .portal-chips .chip .chip-export, .portal-chips .chip .chip-close { - color: var(--muted); - font-size: 0.85em; + /* Bumped from 0.85em + muted because fox couldn't find the export + * icon on the chip. Now sized at parity with the label and tinted + * with the chip's accent so the action affordance reads as a + * sibling of the name, not a footnote. */ + font-size: 1em; cursor: pointer; padding: 0 0.15rem; } -.portal-chips .chip .chip-export:hover { color: var(--green); } +.portal-chips .chip .chip-export { color: var(--green); } +.portal-chips .chip .chip-export:hover { filter: brightness(1.4); } +.portal-chips .chip .chip-close { color: var(--muted); } .portal-chips .chip .chip-close:hover { color: var(--err); } /* ─── Transcript ───────────────────────────────────────────────── */ diff --git a/wasm/dist-repl/repl.js b/wasm/dist-repl/repl.js index b7214d2..5d9314b 100644 --- a/wasm/dist-repl/repl.js +++ b/wasm/dist-repl/repl.js @@ -49,8 +49,22 @@ const state = { nextRunId: 1, nextTabId: 1, saveTimer: null, + // SharedArrayBuffer the tier's eval loop polls for a cooperative + // pause signal. C tier reads via Atomics in the JS-library import; + // Python via globals + sys.settrace. Browsers refuse the SAB + // constructor without COOP/COEP cross-origin-isolation headers, + // so this stays null on a plain http.server and the ⏸ pause + // button surfaces a helpful tooltip instead of crashing. + pauseFlag: (() => { + try { return new SharedArrayBuffer(4); } catch (e) { return null; } + })(), + pausing: false, // true while a pause-and-snapshot flow is mid-air }; +// Eager view over the pause flag so the button handler doesn't have to +// re-wrap on every click. Null when SAB isn't available. +const pauseFlagView = state.pauseFlag ? new Int32Array(state.pauseFlag) : null; + // ─── Vault ────────────────────────────────────────────────────────── async function saveSoon() { if (!state.vault) return; @@ -159,16 +173,138 @@ function closeTab(id) { saveSoon(); } -function setActiveTab(id) { +async function setActiveTab(id) { + if (id === state.activeTabId) return; // Capture the outgoing tab's current input as its draft before we // swap tabs — otherwise switching away from a half-written form and // back loses everything between the last input event and the next // saveSoon flush. const out = activeTab(); - if (out) out.inputDraft = inputEl.value; + if (out) { + out.inputDraft = inputEl.value; + // Auto-pause + portal-save when the user leaves a tab whose + // tier is mid-eval. Without this, switching tabs during a + // long search abandons the state silently. autoPauseTab snapshots + // the tier's env (when SAB is available — C tier only today), + // stashes the input that started the eval, and terminates the + // worker so the heap is released. autoResumeTab on the way + // back hydrates and re-fires the input. + if (isEvalInFlight(out)) { + await autoPauseTab(out); + } + } state.activeTabId = id; renderAll(); saveSoon(); + const incoming = activeTab(); + if (incoming && incoming.autoPause) { + await autoResumeTab(incoming); + } +} + +function isEvalInFlight(tab) { + for (const k of Object.keys(state.pending)) { + if (k.startsWith(tab.id + ":")) return true; + } + return false; +} + +async function waitForPending(tabId, tier, timeoutMs) { + const key = workerKey(tabId, tier); + const start = performance.now(); + while (state.pending[key] && (performance.now() - start) < timeoutMs) { + await new Promise((r) => setTimeout(r, 30)); + } +} + +// Auto-pause hook for tab-switch-away. The tier may be deep inside a +// (let loop ...) — set the SAB pause atomic, wait for the eval-loop +// poll to raise lisp_error("paused"), then snapshot env via the +// regular portal-save path so the state survives until the user +// switches back. Without SAB we still capture the in-flight input +// so the resume can re-eval it cold. +async function autoPauseTab(tab) { + const tier = tab.tier === "all" ? "c" : tab.tier; + const activeInput = tab.activeInput || null; + let blob = null; + + if (pauseFlagView && tier === "c") { + // SAB-poll path: C tier's eval loop hooks js_lumbda_pause_requested + // and unwinds via lisp_error("paused"). Python tier needs a + // settrace-based hook before it can join (deferred). Asm tier + // has no in-eval poll site — falls through to hard cancel. + // Signal the eval loop and wait for it to settle. + Atomics.store(pauseFlagView, 0, 1); + await waitForPending(tab.id, tier, 5000); + Atomics.store(pauseFlagView, 0, 0); + + // Snapshot the (now-idle) tier's env to /tmp and pull the + // blob across the worker bridge. portal-snapshot! is the + // same lisp the manual save flow uses. + const snapName = `_autopause_t${tab.id}`; + try { + await evalInTier(tab.id, tier, `(portal-snapshot! "${snapName}")`); + const w = state.workers[workerKey(tab.id, tier)]; + if (w) { + const runId = state.nextRunId++; + const reply = await bridgeWorker(w, { kind: "portal-save", runId, tier, name: snapName }, "portal-save"); + if (reply && reply.blob) blob = reply.blob; + } + } catch (e) { /* no blob — resume will re-eval from scratch */ } + } else if (isEvalInFlight(tab)) { + // No SAB or asm tier — hard-cancel the in-flight eval(s). + for (const k of Object.keys(state.pending)) { + if (!k.startsWith(tab.id + ":")) continue; + try { state.pending[k].reject(new Error("tab paused")); } catch {} + delete state.pending[k]; + try { state.workers[k].terminate(); } catch {} + delete state.workers[k]; + } + } + + if (activeInput) { + tab.autoPause = { tier, blob, inputSrc: activeInput, savedAt: Date.now() }; + } + + // Terminate the worker(s) so the heap is reclaimed while the tab + // is dormant. autoResumeTab spawns a fresh one. + for (const k of Object.keys(state.workers)) { + if (!k.startsWith(tab.id + ":")) continue; + try { state.workers[k].terminate(); } catch {} + delete state.workers[k]; + } +} + +async function autoResumeTab(tab) { + const ap = tab.autoPause; + if (!ap) return; + tab.autoPause = null; // consume up-front so a re-pause picks fresh + + tab.tier = ap.tier; + tierSelectEl.value = ap.tier; + + if (ap.blob) { + rebootTier(tab.id, ap.tier); + // Round-trip through the tier so portal-load! has the blob + // to read. The bare 'init eval forces the tier to bootstrap + // before we push the blob into MEMFS. + try { await evalInTier(tab.id, ap.tier, "'init"); } catch (e) { /* harmless */ } + const w = state.workers[workerKey(tab.id, ap.tier)]; + if (w) { + const snapName = `_autopause_t${tab.id}`; + const runId = state.nextRunId++; + await bridgeWorker(w, { kind: "portal-load", runId, tier: ap.tier, name: snapName, blob: ap.blob }, "portal-load"); + try { await evalInTier(tab.id, ap.tier, `(portal-load! "${snapName}")`); } + catch (e) { /* surface as resume failure but keep going */ } + } + } + + // Re-run the original input. The transcript already shows the + // prior partial run; this appears as a new entry so the user + // sees the resumption explicitly. + inputEl.value = ap.inputSrc; + autosizeInput(); + await sendInput(); } function activeTab() { @@ -181,6 +317,11 @@ function workerKey(tabId, tier) { return `${tabId}:${tier}`; } function spawnWorker(tabId, tier) { const w = new Worker(new URL("./worker.mjs", import.meta.url), { type: "module" }); state.workers[workerKey(tabId, tier)] = w; + // Hand the worker its pause flag. Worker stashes the SAB so the + // tier loader can install an Int32Array view when it boots. We + // skip bendUrl here so the worker's previous bend setting (if + // any) isn't clobbered to null. + w.postMessage({ kind: "config", pauseFlag: state.pauseFlag }); return w; } @@ -624,10 +765,13 @@ function renderAll() { // tab A into tab B. The label gains a "· tabName" suffix in // global mode so it's clear where each chip came from. portalChipsEl.innerHTML = ""; - portalScopeBtn.textContent = showGlobalCheckpoints ? "🌐 all tabs" : "📂 this tab"; + // Always lead with "scope:" so the visible text reads as a state + // label rather than a target ("this tab" alone was ambiguous — + // is it telling me the current scope, or what I'd switch to?). + portalScopeBtn.textContent = showGlobalCheckpoints ? "scope: all tabs 🌐" : "scope: this tab 📂"; portalScopeBtn.title = showGlobalCheckpoints - ? "showing checkpoints from every tab — click for this tab only" - : "showing only this tab's checkpoints — click for every tab"; + ? "showing checkpoints from every tab — click to show only this tab" + : "showing only this tab's checkpoints — click to show every tab"; const chipRows = []; if (showGlobalCheckpoints) { for (const t of state.tabs) { @@ -801,6 +945,9 @@ async function sendInput() { tab.transcript.push(entry); inputEl.value = ""; tab.inputDraft = ""; + // Remember the input string while it's evaluating so that auto- + // pause-on-tab-switch can re-fire it on resume. Cleared on completion. + tab.activeInput = src; autosizeInput(); resetHistory(); sendBtn.disabled = true; @@ -866,6 +1013,10 @@ async function sendInput() { sendBtn.disabled = false; cancelBtn.disabled = true; inputEl.focus(); + // Eval finished cleanly — drop the activeInput marker so + // a subsequent tab switch doesn't try to resume something + // that already completed. + tab.activeInput = null; } }); } diff --git a/wasm/dist-repl/runner.js b/wasm/dist-repl/runner.js index 5379f6f..c493720 100644 --- a/wasm/dist-repl/runner.js +++ b/wasm/dist-repl/runner.js @@ -8,7 +8,7 @@ import { createCTier } from "./c/lumbda-c.loader.js"; import { createAsmTier } from "./asm/lumbda-asm.loader.js"; const cache = {}; -const config = { bendUrl: null }; +const config = { bendUrl: null, pauseFlag: null }; export function setBendUrl(url) { config.bendUrl = url || null; @@ -18,6 +18,19 @@ export function setBendUrl(url) { } } +// SharedArrayBuffer that the tier's eval loop polls for a pause +// signal. Main thread writes 1 to atomic index 0; the tier's polling +// hook (c/eval.c lumbda_check_pause) raises lisp_error("paused") at +// the next K-iteration boundary so module-global env is preserved +// and (portal-snapshot!) afterward captures everything that ran +// before the pause. +export function setPauseFlag(flag) { + config.pauseFlag = flag || null; + for (const t of Object.values(cache)) { + if (t && t.setPauseFlag) t.setPauseFlag(config.pauseFlag); + } +} + export async function getTier(name, onLoad) { if (cache[name]) return cache[name]; if (onLoad) onLoad(name); @@ -26,6 +39,7 @@ export async function getTier(name, onLoad) { else if (name === "asm") cache[name] = await createAsmTier(); else throw new Error(`unknown tier: ${name}`); if (cache[name].setBendUrl) cache[name].setBendUrl(config.bendUrl); + if (cache[name].setPauseFlag) cache[name].setPauseFlag(config.pauseFlag); return cache[name]; } diff --git a/wasm/dist-repl/worker.mjs b/wasm/dist-repl/worker.mjs index f0d9c28..baf98ec 100644 --- a/wasm/dist-repl/worker.mjs +++ b/wasm/dist-repl/worker.mjs @@ -3,12 +3,17 @@ // live ms counter actually ticks AND so cancel works (main thread // terminates this worker via worker.terminate()). -import { evalOnTier, setBendUrl, heapStats, portalSave, portalLoad } from "./runner.js"; +import { evalOnTier, setBendUrl, setPauseFlag, heapStats, portalSave, portalLoad } from "./runner.js"; self.onmessage = async (e) => { const { kind } = e.data; if (kind === "config") { - setBendUrl(e.data.bendUrl); + // Each field is independently optional so a config message can + // tweak one knob without resetting the others — REPL spawns + // workers with just { pauseFlag }; playground updates bendUrl + // alone, etc. + if (e.data.bendUrl !== undefined) setBendUrl(e.data.bendUrl); + if (e.data.pauseFlag !== undefined) setPauseFlag(e.data.pauseFlag); return; } if (kind === "heap") { diff --git a/wasm/repl/index.html b/wasm/repl/index.html index 37ff31c..1fcec62 100644 --- a/wasm/repl/index.html +++ b/wasm/repl/index.html @@ -91,7 +91,7 @@ portals: - +
diff --git a/wasm/repl/repl.css b/wasm/repl/repl.css index 8935273..1bbce52 100644 --- a/wasm/repl/repl.css +++ b/wasm/repl/repl.css @@ -233,12 +233,17 @@ body.repl { } .portal-chips .chip .chip-export, .portal-chips .chip .chip-close { - color: var(--muted); - font-size: 0.85em; + /* Bumped from 0.85em + muted because fox couldn't find the export + * icon on the chip. Now sized at parity with the label and tinted + * with the chip's accent so the action affordance reads as a + * sibling of the name, not a footnote. */ + font-size: 1em; cursor: pointer; padding: 0 0.15rem; } -.portal-chips .chip .chip-export:hover { color: var(--green); } +.portal-chips .chip .chip-export { color: var(--green); } +.portal-chips .chip .chip-export:hover { filter: brightness(1.4); } +.portal-chips .chip .chip-close { color: var(--muted); } .portal-chips .chip .chip-close:hover { color: var(--err); } /* ─── Transcript ───────────────────────────────────────────────── */ diff --git a/wasm/repl/repl.js b/wasm/repl/repl.js index b7214d2..5d9314b 100644 --- a/wasm/repl/repl.js +++ b/wasm/repl/repl.js @@ -49,8 +49,22 @@ const state = { nextRunId: 1, nextTabId: 1, saveTimer: null, + // SharedArrayBuffer the tier's eval loop polls for a cooperative + // pause signal. C tier reads via Atomics in the JS-library import; + // Python via globals + sys.settrace. Browsers refuse the SAB + // constructor without COOP/COEP cross-origin-isolation headers, + // so this stays null on a plain http.server and the ⏸ pause + // button surfaces a helpful tooltip instead of crashing. + pauseFlag: (() => { + try { return new SharedArrayBuffer(4); } catch (e) { return null; } + })(), + pausing: false, // true while a pause-and-snapshot flow is mid-air }; +// Eager view over the pause flag so the button handler doesn't have to +// re-wrap on every click. Null when SAB isn't available. +const pauseFlagView = state.pauseFlag ? new Int32Array(state.pauseFlag) : null; + // ─── Vault ────────────────────────────────────────────────────────── async function saveSoon() { if (!state.vault) return; @@ -159,16 +173,138 @@ function closeTab(id) { saveSoon(); } -function setActiveTab(id) { +async function setActiveTab(id) { + if (id === state.activeTabId) return; // Capture the outgoing tab's current input as its draft before we // swap tabs — otherwise switching away from a half-written form and // back loses everything between the last input event and the next // saveSoon flush. const out = activeTab(); - if (out) out.inputDraft = inputEl.value; + if (out) { + out.inputDraft = inputEl.value; + // Auto-pause + portal-save when the user leaves a tab whose + // tier is mid-eval. Without this, switching tabs during a + // long search abandons the state silently. autoPauseTab snapshots + // the tier's env (when SAB is available — C tier only today), + // stashes the input that started the eval, and terminates the + // worker so the heap is released. autoResumeTab on the way + // back hydrates and re-fires the input. + if (isEvalInFlight(out)) { + await autoPauseTab(out); + } + } state.activeTabId = id; renderAll(); saveSoon(); + const incoming = activeTab(); + if (incoming && incoming.autoPause) { + await autoResumeTab(incoming); + } +} + +function isEvalInFlight(tab) { + for (const k of Object.keys(state.pending)) { + if (k.startsWith(tab.id + ":")) return true; + } + return false; +} + +async function waitForPending(tabId, tier, timeoutMs) { + const key = workerKey(tabId, tier); + const start = performance.now(); + while (state.pending[key] && (performance.now() - start) < timeoutMs) { + await new Promise((r) => setTimeout(r, 30)); + } +} + +// Auto-pause hook for tab-switch-away. The tier may be deep inside a +// (let loop ...) — set the SAB pause atomic, wait for the eval-loop +// poll to raise lisp_error("paused"), then snapshot env via the +// regular portal-save path so the state survives until the user +// switches back. Without SAB we still capture the in-flight input +// so the resume can re-eval it cold. +async function autoPauseTab(tab) { + const tier = tab.tier === "all" ? "c" : tab.tier; + const activeInput = tab.activeInput || null; + let blob = null; + + if (pauseFlagView && tier === "c") { + // SAB-poll path: C tier's eval loop hooks js_lumbda_pause_requested + // and unwinds via lisp_error("paused"). Python tier needs a + // settrace-based hook before it can join (deferred). Asm tier + // has no in-eval poll site — falls through to hard cancel. + // Signal the eval loop and wait for it to settle. + Atomics.store(pauseFlagView, 0, 1); + await waitForPending(tab.id, tier, 5000); + Atomics.store(pauseFlagView, 0, 0); + + // Snapshot the (now-idle) tier's env to /tmp and pull the + // blob across the worker bridge. portal-snapshot! is the + // same lisp the manual save flow uses. + const snapName = `_autopause_t${tab.id}`; + try { + await evalInTier(tab.id, tier, `(portal-snapshot! "${snapName}")`); + const w = state.workers[workerKey(tab.id, tier)]; + if (w) { + const runId = state.nextRunId++; + const reply = await bridgeWorker(w, { kind: "portal-save", runId, tier, name: snapName }, "portal-save"); + if (reply && reply.blob) blob = reply.blob; + } + } catch (e) { /* no blob — resume will re-eval from scratch */ } + } else if (isEvalInFlight(tab)) { + // No SAB or asm tier — hard-cancel the in-flight eval(s). + for (const k of Object.keys(state.pending)) { + if (!k.startsWith(tab.id + ":")) continue; + try { state.pending[k].reject(new Error("tab paused")); } catch {} + delete state.pending[k]; + try { state.workers[k].terminate(); } catch {} + delete state.workers[k]; + } + } + + if (activeInput) { + tab.autoPause = { tier, blob, inputSrc: activeInput, savedAt: Date.now() }; + } + + // Terminate the worker(s) so the heap is reclaimed while the tab + // is dormant. autoResumeTab spawns a fresh one. + for (const k of Object.keys(state.workers)) { + if (!k.startsWith(tab.id + ":")) continue; + try { state.workers[k].terminate(); } catch {} + delete state.workers[k]; + } +} + +async function autoResumeTab(tab) { + const ap = tab.autoPause; + if (!ap) return; + tab.autoPause = null; // consume up-front so a re-pause picks fresh + + tab.tier = ap.tier; + tierSelectEl.value = ap.tier; + + if (ap.blob) { + rebootTier(tab.id, ap.tier); + // Round-trip through the tier so portal-load! has the blob + // to read. The bare 'init eval forces the tier to bootstrap + // before we push the blob into MEMFS. + try { await evalInTier(tab.id, ap.tier, "'init"); } catch (e) { /* harmless */ } + const w = state.workers[workerKey(tab.id, ap.tier)]; + if (w) { + const snapName = `_autopause_t${tab.id}`; + const runId = state.nextRunId++; + await bridgeWorker(w, { kind: "portal-load", runId, tier: ap.tier, name: snapName, blob: ap.blob }, "portal-load"); + try { await evalInTier(tab.id, ap.tier, `(portal-load! "${snapName}")`); } + catch (e) { /* surface as resume failure but keep going */ } + } + } + + // Re-run the original input. The transcript already shows the + // prior partial run; this appears as a new entry so the user + // sees the resumption explicitly. + inputEl.value = ap.inputSrc; + autosizeInput(); + await sendInput(); } function activeTab() { @@ -181,6 +317,11 @@ function workerKey(tabId, tier) { return `${tabId}:${tier}`; } function spawnWorker(tabId, tier) { const w = new Worker(new URL("./worker.mjs", import.meta.url), { type: "module" }); state.workers[workerKey(tabId, tier)] = w; + // Hand the worker its pause flag. Worker stashes the SAB so the + // tier loader can install an Int32Array view when it boots. We + // skip bendUrl here so the worker's previous bend setting (if + // any) isn't clobbered to null. + w.postMessage({ kind: "config", pauseFlag: state.pauseFlag }); return w; } @@ -624,10 +765,13 @@ function renderAll() { // tab A into tab B. The label gains a "· tabName" suffix in // global mode so it's clear where each chip came from. portalChipsEl.innerHTML = ""; - portalScopeBtn.textContent = showGlobalCheckpoints ? "🌐 all tabs" : "📂 this tab"; + // Always lead with "scope:" so the visible text reads as a state + // label rather than a target ("this tab" alone was ambiguous — + // is it telling me the current scope, or what I'd switch to?). + portalScopeBtn.textContent = showGlobalCheckpoints ? "scope: all tabs 🌐" : "scope: this tab 📂"; portalScopeBtn.title = showGlobalCheckpoints - ? "showing checkpoints from every tab — click for this tab only" - : "showing only this tab's checkpoints — click for every tab"; + ? "showing checkpoints from every tab — click to show only this tab" + : "showing only this tab's checkpoints — click to show every tab"; const chipRows = []; if (showGlobalCheckpoints) { for (const t of state.tabs) { @@ -801,6 +945,9 @@ async function sendInput() { tab.transcript.push(entry); inputEl.value = ""; tab.inputDraft = ""; + // Remember the input string while it's evaluating so that auto- + // pause-on-tab-switch can re-fire it on resume. Cleared on completion. + tab.activeInput = src; autosizeInput(); resetHistory(); sendBtn.disabled = true; @@ -866,6 +1013,10 @@ async function sendInput() { sendBtn.disabled = false; cancelBtn.disabled = true; inputEl.focus(); + // Eval finished cleanly — drop the activeInput marker so + // a subsequent tab switch doesn't try to resume something + // that already completed. + tab.activeInput = null; } }); } diff --git a/wasm/serve-coop.py b/wasm/serve-coop.py new file mode 100644 index 0000000..2351d99 --- /dev/null +++ b/wasm/serve-coop.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +# Dev server for the REPL that injects the COOP/COEP response headers +# required to unlock SharedArrayBuffer in the browser. +# +# Why: the REPL's pause-and-snapshot feature signals the eval loop via a +# shared-memory atomic flag. Without these headers, the browser refuses +# to create a SharedArrayBuffer at all, so the worker has no channel to +# receive a pause request while it's executing a long-running tier +# eval. +# +# Production parity: any Caddy/nginx in front of lumbda.com needs to +# emit the same two headers for the same reason. This script is the +# minimum dev-side reproduction of that environment. +# +# Usage: +# python3 serve-coop.py [port] [dir] +# +# Defaults: port 8090, dir = current working directory. + +import http.server +import socketserver +import sys +import os + + +class CoopCoepHandler(http.server.SimpleHTTPRequestHandler): + def end_headers(self): + self.send_header("Cross-Origin-Opener-Policy", "same-origin") + self.send_header("Cross-Origin-Embedder-Policy", "require-corp") + self.send_header("Cross-Origin-Resource-Policy", "same-origin") + super().end_headers() + + +def main(): + port = int(sys.argv[1]) if len(sys.argv) > 1 else 8090 + serve_dir = sys.argv[2] if len(sys.argv) > 2 else "." + os.chdir(serve_dir) + with socketserver.TCPServer(("", port), CoopCoepHandler) as httpd: + print(f"COOP/COEP server on http://localhost:{port}/ (dir: {serve_dir})") + httpd.serve_forever() + + +if __name__ == "__main__": + main() diff --git a/www/playground/c/lumbda-c.js b/www/playground/c/lumbda-c.js index 9aed6a9..6f1ffc8 100644 --- a/www/playground/c/lumbda-c.js +++ b/www/playground/c/lumbda-c.js @@ -1,2 +1,2 @@ -async function createLumbdaC(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;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("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var readyPromiseResolve,readyPromiseReject;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("lumbda-c.wasm")}return new URL("lumbda-c.wasm",import.meta.url).href}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"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=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=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}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};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;i0){out(UTF8ArrayToString(tty.output));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));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,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,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=MEMFS.emptyFileContents??=new Uint8Array(0)}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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=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.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},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);buffer.set(contents.subarray(position,position+size),offset);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.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);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},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.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{if(typeof str!="string")return 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_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{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{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}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={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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}if(perms.includes("w")&&!(node.mode&146)){return 2}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){if(!FS.isDir(dir.mode)){return 54}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}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},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},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},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,opts,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);for(var[hash,current]of Object.entries(FS.nameTable)){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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}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},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"){abort(`Invalid encoding type "${opts.encoding}"`)}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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);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,llseek:()=>0});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){randomFill(randomBuffer);randomLeft=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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};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},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};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(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},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 stream of FS.streams){if(stream){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){if(e.errno!=20)throw 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){data=FS_fileDataToTypedArray(data);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);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;ithis.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))abort("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)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort("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")abort("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(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("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}}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={};for(const[key,fn]of Object.entries(node.stream_ops)){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{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,allocated:true}};node.stream_ops=stream_ops;return node}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",()=>SOCKFS.emit("close",sock.stream.fd));peer.socket.on("error",error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit("close",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",()=>{SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",error=>{sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={currentUmask:18,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 dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);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();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},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_dup3(fd,newfd,flags){try{if(fd===newfd)return-28;if(flags&~524288)return-28;var old=SYSCALLS.getStreamFromFD(fd);if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);var stream=FS.dupStream(old,newfd);if(flags&524288){stream.flags|=524288}return stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var 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();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;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{return SYSCALLS.writeStat(buf,FS.fstat(fd))}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>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_oflag,c_cflag,c_lflag,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 21537: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_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}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.writeStat(buf,FS.lstat(path))}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.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}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;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream,timeout,notifyCallback){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,argp){if(request==21531){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}HEAP32[argp>>2]=currentLength;return 0}return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe2(fdPtr,flags){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var validFlags=524288|2048;if(flags&~validFlags){throw new FS.ErrnoError(138)}var res=PIPEFS.createPipe();if(flags&2048){FS.getStream(res.readable_fd).flags|=2048;FS.getStream(res.writable_fd).flags|=2048}HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}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_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}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.writeStat(buf,FS.stat(path))}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){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw new EmscriptenSjLj};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;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;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"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 _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};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;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;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);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>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);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>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>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _js_lumbda_bend_call(payload_ptr,payload_len,resp_buf,resp_cap){var bendUrl=globalThis._lumbdaCBendUrl;if(!bendUrl){var msg="no bend URL configured";var n=Math.min(msg.length,resp_cap-1);for(var i=0;i{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};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};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["FS"]=FS;var _malloc,_free,_htons,_lumbda_wasm_init,_lumbda_wasm_eval,_lumbda_wasm_free_result,_ntohs,_setThrew,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_malloc=Module["_malloc"]=wasmExports["malloc"];_free=Module["_free"]=wasmExports["free"];_htons=wasmExports["htons"];_lumbda_wasm_init=Module["_lumbda_wasm_init"]=wasmExports["lumbda_wasm_init"];_lumbda_wasm_eval=Module["_lumbda_wasm_eval"]=wasmExports["lumbda_wasm_eval"];_lumbda_wasm_free_result=Module["_lumbda_wasm_free_result"]=wasmExports["lumbda_wasm_free_result"];_ntohs=wasmExports["ntohs"];_setThrew=wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_connect:___syscall_connect,__syscall_dup3:___syscall_dup3,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe2:___syscall_pipe2,__syscall_renameat:___syscall_renameat,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,invoke_i,invoke_ii,invoke_iii,invoke_iiii,invoke_iiiii,invoke_iiiiiiiiii,invoke_iiiiijiiiii,invoke_iiiijii,invoke_iiij,invoke_iiijiii,invoke_iijj,invoke_ij,invoke_iji,invoke_ijj,invoke_ji,invoke_jii,invoke_jiii,invoke_jij,invoke_jj,invoke_jji,invoke_jjii,invoke_jjiii,invoke_jjj,invoke_jjjjjjj,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiii,invoke_viiji,invoke_vij,invoke_vijj,invoke_vjii,invoke_vjiii,js_lumbda_bend_call:_js_lumbda_bend_call,proc_exit:_proc_exit};function invoke_jij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_ijj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ij(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jj(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjjjjjj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiijiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} +async function createLumbdaC(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;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("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var readyPromiseResolve,readyPromiseReject;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("lumbda-c.wasm")}return new URL("lumbda-c.wasm",import.meta.url).href}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"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=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=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}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};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;i0){out(UTF8ArrayToString(tty.output));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));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,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,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=MEMFS.emptyFileContents??=new Uint8Array(0)}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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=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.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},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);buffer.set(contents.subarray(position,position+size),offset);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.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);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},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.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{if(typeof str!="string")return 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_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{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{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}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={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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}if(perms.includes("w")&&!(node.mode&146)){return 2}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){if(!FS.isDir(dir.mode)){return 54}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}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},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},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},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,opts,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);for(var[hash,current]of Object.entries(FS.nameTable)){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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}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},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"){abort(`Invalid encoding type "${opts.encoding}"`)}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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);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,llseek:()=>0});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){randomFill(randomBuffer);randomLeft=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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};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},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};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(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},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 stream of FS.streams){if(stream){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){if(e.errno!=20)throw 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){data=FS_fileDataToTypedArray(data);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);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;ithis.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))abort("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)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort("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")abort("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(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("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}}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={};for(const[key,fn]of Object.entries(node.stream_ops)){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{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,allocated:true}};node.stream_ops=stream_ops;return node}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",()=>SOCKFS.emit("close",sock.stream.fd));peer.socket.on("error",error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit("close",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",()=>{SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",error=>{sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={currentUmask:18,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 dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);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();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},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_dup3(fd,newfd,flags){try{if(fd===newfd)return-28;if(flags&~524288)return-28;var old=SYSCALLS.getStreamFromFD(fd);if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);var stream=FS.dupStream(old,newfd);if(flags&524288){stream.flags|=524288}return stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var 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();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;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{return SYSCALLS.writeStat(buf,FS.fstat(fd))}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>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_oflag,c_cflag,c_lflag,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 21537: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_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}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.writeStat(buf,FS.lstat(path))}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.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}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;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream,timeout,notifyCallback){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,argp){if(request==21531){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}HEAP32[argp>>2]=currentLength;return 0}return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe2(fdPtr,flags){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var validFlags=524288|2048;if(flags&~validFlags){throw new FS.ErrnoError(138)}var res=PIPEFS.createPipe();if(flags&2048){FS.getStream(res.readable_fd).flags|=2048;FS.getStream(res.writable_fd).flags|=2048}HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}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_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}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.writeStat(buf,FS.stat(path))}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){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw new EmscriptenSjLj};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;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;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"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 _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};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;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;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);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>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);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>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>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _js_lumbda_bend_call(payload_ptr,payload_len,resp_buf,resp_cap){var bendUrl=globalThis._lumbdaCBendUrl;if(!bendUrl){var msg="no bend URL configured";var n=Math.min(msg.length,resp_cap-1);for(var i=0;i{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};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};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["FS"]=FS;var _malloc,_free,_htons,_lumbda_wasm_init,_lumbda_wasm_eval,_lumbda_wasm_free_result,_ntohs,_setThrew,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_malloc=Module["_malloc"]=wasmExports["malloc"];_free=Module["_free"]=wasmExports["free"];_htons=wasmExports["htons"];_lumbda_wasm_init=Module["_lumbda_wasm_init"]=wasmExports["lumbda_wasm_init"];_lumbda_wasm_eval=Module["_lumbda_wasm_eval"]=wasmExports["lumbda_wasm_eval"];_lumbda_wasm_free_result=Module["_lumbda_wasm_free_result"]=wasmExports["lumbda_wasm_free_result"];_ntohs=wasmExports["ntohs"];_setThrew=wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_connect:___syscall_connect,__syscall_dup3:___syscall_dup3,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe2:___syscall_pipe2,__syscall_renameat:___syscall_renameat,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,invoke_i,invoke_ii,invoke_iii,invoke_iiii,invoke_iiiii,invoke_iiiiiiiiii,invoke_iiiiijiiiii,invoke_iiiijii,invoke_iiij,invoke_iiijiii,invoke_iijj,invoke_ij,invoke_iji,invoke_ijj,invoke_ji,invoke_jii,invoke_jiii,invoke_jij,invoke_jj,invoke_jji,invoke_jjii,invoke_jjiii,invoke_jjj,invoke_jjjjjjj,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiii,invoke_viiji,invoke_vij,invoke_vijj,invoke_vjii,invoke_vjiii,js_lumbda_bend_call:_js_lumbda_bend_call,js_lumbda_pause_requested:_js_lumbda_pause_requested,proc_exit:_proc_exit};function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_ijj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ij(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jj(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjjjjjj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiijiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} ;return moduleRtn}export default createLumbdaC; diff --git a/www/playground/c/lumbda-c.loader.js b/www/playground/c/lumbda-c.loader.js index 1fccb21..065cbfc 100644 --- a/www/playground/c/lumbda-c.loader.js +++ b/www/playground/c/lumbda-c.loader.js @@ -61,6 +61,14 @@ async function _bootstrap() { // global so runner.js can propagate a saved playground URL. return { setBendUrl(url) { globalThis._lumbdaCBendUrl = url || null; }, + // Pause hook — js_lumbda_pause_requested (the JS-library import + // wired in bend-call-library.js) reads globalThis._lumbdaCPauseFlag + // every K leval iterations. Setting it to an Int32Array view + // over a SharedArrayBuffer lets the REPL signal a pause from + // the main thread. Null disables (no COOP/COEP isolation). + setPauseFlag(flag) { + globalThis._lumbdaCPauseFlag = flag ? new Int32Array(flag) : null; + }, // portalSave / portalLoad bridge MEMFS to the JS side so the // REPL can persist checkpoints to the encrypted vault and // restore them on a fresh worker. Names come from the worker diff --git a/www/playground/c/lumbda-c.wasm b/www/playground/c/lumbda-c.wasm index 9d5fad2f70701c339d761f76f6605d7abfce4df3..94af4f177075ff01626a92e2ecf798fb24199ab7 100755 GIT binary patch delta 89525 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 delta 89566 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 diff --git a/www/playground/runner.js b/www/playground/runner.js index 5379f6f..c493720 100644 --- a/www/playground/runner.js +++ b/www/playground/runner.js @@ -8,7 +8,7 @@ import { createCTier } from "./c/lumbda-c.loader.js"; import { createAsmTier } from "./asm/lumbda-asm.loader.js"; const cache = {}; -const config = { bendUrl: null }; +const config = { bendUrl: null, pauseFlag: null }; export function setBendUrl(url) { config.bendUrl = url || null; @@ -18,6 +18,19 @@ export function setBendUrl(url) { } } +// SharedArrayBuffer that the tier's eval loop polls for a pause +// signal. Main thread writes 1 to atomic index 0; the tier's polling +// hook (c/eval.c lumbda_check_pause) raises lisp_error("paused") at +// the next K-iteration boundary so module-global env is preserved +// and (portal-snapshot!) afterward captures everything that ran +// before the pause. +export function setPauseFlag(flag) { + config.pauseFlag = flag || null; + for (const t of Object.values(cache)) { + if (t && t.setPauseFlag) t.setPauseFlag(config.pauseFlag); + } +} + export async function getTier(name, onLoad) { if (cache[name]) return cache[name]; if (onLoad) onLoad(name); @@ -26,6 +39,7 @@ export async function getTier(name, onLoad) { else if (name === "asm") cache[name] = await createAsmTier(); else throw new Error(`unknown tier: ${name}`); if (cache[name].setBendUrl) cache[name].setBendUrl(config.bendUrl); + if (cache[name].setPauseFlag) cache[name].setPauseFlag(config.pauseFlag); return cache[name]; } diff --git a/www/playground/worker.mjs b/www/playground/worker.mjs index f0d9c28..baf98ec 100644 --- a/www/playground/worker.mjs +++ b/www/playground/worker.mjs @@ -3,12 +3,17 @@ // live ms counter actually ticks AND so cancel works (main thread // terminates this worker via worker.terminate()). -import { evalOnTier, setBendUrl, heapStats, portalSave, portalLoad } from "./runner.js"; +import { evalOnTier, setBendUrl, setPauseFlag, heapStats, portalSave, portalLoad } from "./runner.js"; self.onmessage = async (e) => { const { kind } = e.data; if (kind === "config") { - setBendUrl(e.data.bendUrl); + // Each field is independently optional so a config message can + // tweak one knob without resetting the others — REPL spawns + // workers with just { pauseFlag }; playground updates bendUrl + // alone, etc. + if (e.data.bendUrl !== undefined) setBendUrl(e.data.bendUrl); + if (e.data.pauseFlag !== undefined) setPauseFlag(e.data.pauseFlag); return; } if (kind === "heap") { diff --git a/www/repl/c/lumbda-c.js b/www/repl/c/lumbda-c.js index 9aed6a9..6f1ffc8 100644 --- a/www/repl/c/lumbda-c.js +++ b/www/repl/c/lumbda-c.js @@ -1,2 +1,2 @@ -async function createLumbdaC(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;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("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var readyPromiseResolve,readyPromiseReject;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("lumbda-c.wasm")}return new URL("lumbda-c.wasm",import.meta.url).href}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"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=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=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}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};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;i0){out(UTF8ArrayToString(tty.output));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));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,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,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=MEMFS.emptyFileContents??=new Uint8Array(0)}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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=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.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},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);buffer.set(contents.subarray(position,position+size),offset);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.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);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},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.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{if(typeof str!="string")return 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_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{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{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}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={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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}if(perms.includes("w")&&!(node.mode&146)){return 2}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){if(!FS.isDir(dir.mode)){return 54}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}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},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},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},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,opts,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);for(var[hash,current]of Object.entries(FS.nameTable)){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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}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},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"){abort(`Invalid encoding type "${opts.encoding}"`)}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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);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,llseek:()=>0});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){randomFill(randomBuffer);randomLeft=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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};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},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};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(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},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 stream of FS.streams){if(stream){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){if(e.errno!=20)throw 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){data=FS_fileDataToTypedArray(data);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);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;ithis.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))abort("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)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort("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")abort("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(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("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}}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={};for(const[key,fn]of Object.entries(node.stream_ops)){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{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,allocated:true}};node.stream_ops=stream_ops;return node}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",()=>SOCKFS.emit("close",sock.stream.fd));peer.socket.on("error",error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit("close",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",()=>{SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",error=>{sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={currentUmask:18,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 dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);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();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},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_dup3(fd,newfd,flags){try{if(fd===newfd)return-28;if(flags&~524288)return-28;var old=SYSCALLS.getStreamFromFD(fd);if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);var stream=FS.dupStream(old,newfd);if(flags&524288){stream.flags|=524288}return stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var 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();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;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{return SYSCALLS.writeStat(buf,FS.fstat(fd))}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>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_oflag,c_cflag,c_lflag,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 21537: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_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}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.writeStat(buf,FS.lstat(path))}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.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}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;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream,timeout,notifyCallback){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,argp){if(request==21531){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}HEAP32[argp>>2]=currentLength;return 0}return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe2(fdPtr,flags){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var validFlags=524288|2048;if(flags&~validFlags){throw new FS.ErrnoError(138)}var res=PIPEFS.createPipe();if(flags&2048){FS.getStream(res.readable_fd).flags|=2048;FS.getStream(res.writable_fd).flags|=2048}HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}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_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}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.writeStat(buf,FS.stat(path))}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){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw new EmscriptenSjLj};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;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;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"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 _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};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;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;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);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>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);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>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>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _js_lumbda_bend_call(payload_ptr,payload_len,resp_buf,resp_cap){var bendUrl=globalThis._lumbdaCBendUrl;if(!bendUrl){var msg="no bend URL configured";var n=Math.min(msg.length,resp_cap-1);for(var i=0;i{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};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};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["FS"]=FS;var _malloc,_free,_htons,_lumbda_wasm_init,_lumbda_wasm_eval,_lumbda_wasm_free_result,_ntohs,_setThrew,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_malloc=Module["_malloc"]=wasmExports["malloc"];_free=Module["_free"]=wasmExports["free"];_htons=wasmExports["htons"];_lumbda_wasm_init=Module["_lumbda_wasm_init"]=wasmExports["lumbda_wasm_init"];_lumbda_wasm_eval=Module["_lumbda_wasm_eval"]=wasmExports["lumbda_wasm_eval"];_lumbda_wasm_free_result=Module["_lumbda_wasm_free_result"]=wasmExports["lumbda_wasm_free_result"];_ntohs=wasmExports["ntohs"];_setThrew=wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_connect:___syscall_connect,__syscall_dup3:___syscall_dup3,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe2:___syscall_pipe2,__syscall_renameat:___syscall_renameat,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,invoke_i,invoke_ii,invoke_iii,invoke_iiii,invoke_iiiii,invoke_iiiiiiiiii,invoke_iiiiijiiiii,invoke_iiiijii,invoke_iiij,invoke_iiijiii,invoke_iijj,invoke_ij,invoke_iji,invoke_ijj,invoke_ji,invoke_jii,invoke_jiii,invoke_jij,invoke_jj,invoke_jji,invoke_jjii,invoke_jjiii,invoke_jjj,invoke_jjjjjjj,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiii,invoke_viiji,invoke_vij,invoke_vijj,invoke_vjii,invoke_vjiii,js_lumbda_bend_call:_js_lumbda_bend_call,proc_exit:_proc_exit};function invoke_jij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_ijj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ij(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jj(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjjjjjj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiijiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} +async function createLumbdaC(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;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("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var readyPromiseResolve,readyPromiseReject;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("lumbda-c.wasm")}return new URL("lumbda-c.wasm",import.meta.url).href}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"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=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=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}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};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;i0){out(UTF8ArrayToString(tty.output));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));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,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,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=MEMFS.emptyFileContents??=new Uint8Array(0)}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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=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.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},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);buffer.set(contents.subarray(position,position+size),offset);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.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);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},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.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{if(typeof str!="string")return 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_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{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{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}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={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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}if(perms.includes("w")&&!(node.mode&146)){return 2}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){if(!FS.isDir(dir.mode)){return 54}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}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},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},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},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,opts,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);for(var[hash,current]of Object.entries(FS.nameTable)){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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}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},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"){abort(`Invalid encoding type "${opts.encoding}"`)}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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);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,llseek:()=>0});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){randomFill(randomBuffer);randomLeft=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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};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},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};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(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},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 stream of FS.streams){if(stream){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){if(e.errno!=20)throw 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){data=FS_fileDataToTypedArray(data);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);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;ithis.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))abort("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)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort("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")abort("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(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("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}}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={};for(const[key,fn]of Object.entries(node.stream_ops)){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{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,allocated:true}};node.stream_ops=stream_ops;return node}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;function handleOpen(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}}function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(data,isBinary)=>{if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",()=>SOCKFS.emit("close",sock.stream.fd));peer.socket.on("error",error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])});return}peer.socket.onopen=handleOpen;peer.socket.onclose=()=>SOCKFS.emit("close",sock.stream.fd);peer.socket.onmessage=event=>handleMessage(event.data);peer.socket.onerror=error=>{sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",ws=>{if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",()=>{SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",error=>{sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var SYSCALLS={currentUmask:18,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 dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);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();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},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_dup3(fd,newfd,flags){try{if(fd===newfd)return-28;if(flags&~524288)return-28;var old=SYSCALLS.getStreamFromFD(fd);if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);var stream=FS.dupStream(old,newfd);if(flags&524288){stream.flags|=524288}return stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var 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();var mask=289792;stream.flags=stream.flags&~mask|arg&mask;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{return SYSCALLS.writeStat(buf,FS.fstat(fd))}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>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_oflag,c_cflag,c_lflag,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 21537: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_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}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.writeStat(buf,FS.lstat(path))}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.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}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;if(flags&64){mode&=~SYSCALLS.currentUmask}return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream,timeout,notifyCallback){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,argp){if(request==21531){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}HEAP32[argp>>2]=currentLength;return 0}return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe2(fdPtr,flags){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var validFlags=524288|2048;if(flags&~validFlags){throw new FS.ErrnoError(138)}var res=PIPEFS.createPipe();if(flags&2048){FS.getStream(res.readable_fd).flags|=2048;FS.getStream(res.writable_fd).flags|=2048}HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}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_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}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.writeStat(buf,FS.stat(path))}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){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw new EmscriptenSjLj};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;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;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"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 _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};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;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;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);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>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);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>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>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _js_lumbda_bend_call(payload_ptr,payload_len,resp_buf,resp_cap){var bendUrl=globalThis._lumbdaCBendUrl;if(!bendUrl){var msg="no bend URL configured";var n=Math.min(msg.length,resp_cap-1);for(var i=0;i{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};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};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["FS"]=FS;var _malloc,_free,_htons,_lumbda_wasm_init,_lumbda_wasm_eval,_lumbda_wasm_free_result,_ntohs,_setThrew,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_malloc=Module["_malloc"]=wasmExports["malloc"];_free=Module["_free"]=wasmExports["free"];_htons=wasmExports["htons"];_lumbda_wasm_init=Module["_lumbda_wasm_init"]=wasmExports["lumbda_wasm_init"];_lumbda_wasm_eval=Module["_lumbda_wasm_eval"]=wasmExports["lumbda_wasm_eval"];_lumbda_wasm_free_result=Module["_lumbda_wasm_free_result"]=wasmExports["lumbda_wasm_free_result"];_ntohs=wasmExports["ntohs"];_setThrew=wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_connect:___syscall_connect,__syscall_dup3:___syscall_dup3,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getcwd:___syscall_getcwd,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe2:___syscall_pipe2,__syscall_renameat:___syscall_renameat,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,invoke_i,invoke_ii,invoke_iii,invoke_iiii,invoke_iiiii,invoke_iiiiiiiiii,invoke_iiiiijiiiii,invoke_iiiijii,invoke_iiij,invoke_iiijiii,invoke_iijj,invoke_ij,invoke_iji,invoke_ijj,invoke_ji,invoke_jii,invoke_jiii,invoke_jij,invoke_jj,invoke_jji,invoke_jjii,invoke_jjiii,invoke_jjj,invoke_jjjjjjj,invoke_v,invoke_vi,invoke_vii,invoke_viii,invoke_viiii,invoke_viiiii,invoke_viiji,invoke_vij,invoke_vijj,invoke_vjii,invoke_vjiii,js_lumbda_bend_call:_js_lumbda_bend_call,js_lumbda_pause_requested:_js_lumbda_pause_requested,proc_exit:_proc_exit};function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_ijj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iji(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ij(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jjii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jj(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjj(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jjjjjjj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0);return 0n}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vjiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiijiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(!(e instanceof EmscriptenEH))throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} ;return moduleRtn}export default createLumbdaC; diff --git a/www/repl/c/lumbda-c.loader.js b/www/repl/c/lumbda-c.loader.js index 1fccb21..065cbfc 100644 --- a/www/repl/c/lumbda-c.loader.js +++ b/www/repl/c/lumbda-c.loader.js @@ -61,6 +61,14 @@ async function _bootstrap() { // global so runner.js can propagate a saved playground URL. return { setBendUrl(url) { globalThis._lumbdaCBendUrl = url || null; }, + // Pause hook — js_lumbda_pause_requested (the JS-library import + // wired in bend-call-library.js) reads globalThis._lumbdaCPauseFlag + // every K leval iterations. Setting it to an Int32Array view + // over a SharedArrayBuffer lets the REPL signal a pause from + // the main thread. Null disables (no COOP/COEP isolation). + setPauseFlag(flag) { + globalThis._lumbdaCPauseFlag = flag ? new Int32Array(flag) : null; + }, // portalSave / portalLoad bridge MEMFS to the JS side so the // REPL can persist checkpoints to the encrypted vault and // restore them on a fresh worker. Names come from the worker diff --git a/www/repl/c/lumbda-c.wasm b/www/repl/c/lumbda-c.wasm index 9d5fad2f70701c339d761f76f6605d7abfce4df3..94af4f177075ff01626a92e2ecf798fb24199ab7 100755 GIT binary patch delta 89525 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 delta 89566 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 diff --git a/www/repl/index.html b/www/repl/index.html index 37ff31c..1fcec62 100644 --- a/www/repl/index.html +++ b/www/repl/index.html @@ -91,7 +91,7 @@ portals: - +
diff --git a/www/repl/repl.css b/www/repl/repl.css index 8935273..1bbce52 100644 --- a/www/repl/repl.css +++ b/www/repl/repl.css @@ -233,12 +233,17 @@ body.repl { } .portal-chips .chip .chip-export, .portal-chips .chip .chip-close { - color: var(--muted); - font-size: 0.85em; + /* Bumped from 0.85em + muted because fox couldn't find the export + * icon on the chip. Now sized at parity with the label and tinted + * with the chip's accent so the action affordance reads as a + * sibling of the name, not a footnote. */ + font-size: 1em; cursor: pointer; padding: 0 0.15rem; } -.portal-chips .chip .chip-export:hover { color: var(--green); } +.portal-chips .chip .chip-export { color: var(--green); } +.portal-chips .chip .chip-export:hover { filter: brightness(1.4); } +.portal-chips .chip .chip-close { color: var(--muted); } .portal-chips .chip .chip-close:hover { color: var(--err); } /* ─── Transcript ───────────────────────────────────────────────── */ diff --git a/www/repl/repl.js b/www/repl/repl.js index b7214d2..5d9314b 100644 --- a/www/repl/repl.js +++ b/www/repl/repl.js @@ -49,8 +49,22 @@ const state = { nextRunId: 1, nextTabId: 1, saveTimer: null, + // SharedArrayBuffer the tier's eval loop polls for a cooperative + // pause signal. C tier reads via Atomics in the JS-library import; + // Python via globals + sys.settrace. Browsers refuse the SAB + // constructor without COOP/COEP cross-origin-isolation headers, + // so this stays null on a plain http.server and the ⏸ pause + // button surfaces a helpful tooltip instead of crashing. + pauseFlag: (() => { + try { return new SharedArrayBuffer(4); } catch (e) { return null; } + })(), + pausing: false, // true while a pause-and-snapshot flow is mid-air }; +// Eager view over the pause flag so the button handler doesn't have to +// re-wrap on every click. Null when SAB isn't available. +const pauseFlagView = state.pauseFlag ? new Int32Array(state.pauseFlag) : null; + // ─── Vault ────────────────────────────────────────────────────────── async function saveSoon() { if (!state.vault) return; @@ -159,16 +173,138 @@ function closeTab(id) { saveSoon(); } -function setActiveTab(id) { +async function setActiveTab(id) { + if (id === state.activeTabId) return; // Capture the outgoing tab's current input as its draft before we // swap tabs — otherwise switching away from a half-written form and // back loses everything between the last input event and the next // saveSoon flush. const out = activeTab(); - if (out) out.inputDraft = inputEl.value; + if (out) { + out.inputDraft = inputEl.value; + // Auto-pause + portal-save when the user leaves a tab whose + // tier is mid-eval. Without this, switching tabs during a + // long search abandons the state silently. autoPauseTab snapshots + // the tier's env (when SAB is available — C tier only today), + // stashes the input that started the eval, and terminates the + // worker so the heap is released. autoResumeTab on the way + // back hydrates and re-fires the input. + if (isEvalInFlight(out)) { + await autoPauseTab(out); + } + } state.activeTabId = id; renderAll(); saveSoon(); + const incoming = activeTab(); + if (incoming && incoming.autoPause) { + await autoResumeTab(incoming); + } +} + +function isEvalInFlight(tab) { + for (const k of Object.keys(state.pending)) { + if (k.startsWith(tab.id + ":")) return true; + } + return false; +} + +async function waitForPending(tabId, tier, timeoutMs) { + const key = workerKey(tabId, tier); + const start = performance.now(); + while (state.pending[key] && (performance.now() - start) < timeoutMs) { + await new Promise((r) => setTimeout(r, 30)); + } +} + +// Auto-pause hook for tab-switch-away. The tier may be deep inside a +// (let loop ...) — set the SAB pause atomic, wait for the eval-loop +// poll to raise lisp_error("paused"), then snapshot env via the +// regular portal-save path so the state survives until the user +// switches back. Without SAB we still capture the in-flight input +// so the resume can re-eval it cold. +async function autoPauseTab(tab) { + const tier = tab.tier === "all" ? "c" : tab.tier; + const activeInput = tab.activeInput || null; + let blob = null; + + if (pauseFlagView && tier === "c") { + // SAB-poll path: C tier's eval loop hooks js_lumbda_pause_requested + // and unwinds via lisp_error("paused"). Python tier needs a + // settrace-based hook before it can join (deferred). Asm tier + // has no in-eval poll site — falls through to hard cancel. + // Signal the eval loop and wait for it to settle. + Atomics.store(pauseFlagView, 0, 1); + await waitForPending(tab.id, tier, 5000); + Atomics.store(pauseFlagView, 0, 0); + + // Snapshot the (now-idle) tier's env to /tmp and pull the + // blob across the worker bridge. portal-snapshot! is the + // same lisp the manual save flow uses. + const snapName = `_autopause_t${tab.id}`; + try { + await evalInTier(tab.id, tier, `(portal-snapshot! "${snapName}")`); + const w = state.workers[workerKey(tab.id, tier)]; + if (w) { + const runId = state.nextRunId++; + const reply = await bridgeWorker(w, { kind: "portal-save", runId, tier, name: snapName }, "portal-save"); + if (reply && reply.blob) blob = reply.blob; + } + } catch (e) { /* no blob — resume will re-eval from scratch */ } + } else if (isEvalInFlight(tab)) { + // No SAB or asm tier — hard-cancel the in-flight eval(s). + for (const k of Object.keys(state.pending)) { + if (!k.startsWith(tab.id + ":")) continue; + try { state.pending[k].reject(new Error("tab paused")); } catch {} + delete state.pending[k]; + try { state.workers[k].terminate(); } catch {} + delete state.workers[k]; + } + } + + if (activeInput) { + tab.autoPause = { tier, blob, inputSrc: activeInput, savedAt: Date.now() }; + } + + // Terminate the worker(s) so the heap is reclaimed while the tab + // is dormant. autoResumeTab spawns a fresh one. + for (const k of Object.keys(state.workers)) { + if (!k.startsWith(tab.id + ":")) continue; + try { state.workers[k].terminate(); } catch {} + delete state.workers[k]; + } +} + +async function autoResumeTab(tab) { + const ap = tab.autoPause; + if (!ap) return; + tab.autoPause = null; // consume up-front so a re-pause picks fresh + + tab.tier = ap.tier; + tierSelectEl.value = ap.tier; + + if (ap.blob) { + rebootTier(tab.id, ap.tier); + // Round-trip through the tier so portal-load! has the blob + // to read. The bare 'init eval forces the tier to bootstrap + // before we push the blob into MEMFS. + try { await evalInTier(tab.id, ap.tier, "'init"); } catch (e) { /* harmless */ } + const w = state.workers[workerKey(tab.id, ap.tier)]; + if (w) { + const snapName = `_autopause_t${tab.id}`; + const runId = state.nextRunId++; + await bridgeWorker(w, { kind: "portal-load", runId, tier: ap.tier, name: snapName, blob: ap.blob }, "portal-load"); + try { await evalInTier(tab.id, ap.tier, `(portal-load! "${snapName}")`); } + catch (e) { /* surface as resume failure but keep going */ } + } + } + + // Re-run the original input. The transcript already shows the + // prior partial run; this appears as a new entry so the user + // sees the resumption explicitly. + inputEl.value = ap.inputSrc; + autosizeInput(); + await sendInput(); } function activeTab() { @@ -181,6 +317,11 @@ function workerKey(tabId, tier) { return `${tabId}:${tier}`; } function spawnWorker(tabId, tier) { const w = new Worker(new URL("./worker.mjs", import.meta.url), { type: "module" }); state.workers[workerKey(tabId, tier)] = w; + // Hand the worker its pause flag. Worker stashes the SAB so the + // tier loader can install an Int32Array view when it boots. We + // skip bendUrl here so the worker's previous bend setting (if + // any) isn't clobbered to null. + w.postMessage({ kind: "config", pauseFlag: state.pauseFlag }); return w; } @@ -624,10 +765,13 @@ function renderAll() { // tab A into tab B. The label gains a "· tabName" suffix in // global mode so it's clear where each chip came from. portalChipsEl.innerHTML = ""; - portalScopeBtn.textContent = showGlobalCheckpoints ? "🌐 all tabs" : "📂 this tab"; + // Always lead with "scope:" so the visible text reads as a state + // label rather than a target ("this tab" alone was ambiguous — + // is it telling me the current scope, or what I'd switch to?). + portalScopeBtn.textContent = showGlobalCheckpoints ? "scope: all tabs 🌐" : "scope: this tab 📂"; portalScopeBtn.title = showGlobalCheckpoints - ? "showing checkpoints from every tab — click for this tab only" - : "showing only this tab's checkpoints — click for every tab"; + ? "showing checkpoints from every tab — click to show only this tab" + : "showing only this tab's checkpoints — click to show every tab"; const chipRows = []; if (showGlobalCheckpoints) { for (const t of state.tabs) { @@ -801,6 +945,9 @@ async function sendInput() { tab.transcript.push(entry); inputEl.value = ""; tab.inputDraft = ""; + // Remember the input string while it's evaluating so that auto- + // pause-on-tab-switch can re-fire it on resume. Cleared on completion. + tab.activeInput = src; autosizeInput(); resetHistory(); sendBtn.disabled = true; @@ -866,6 +1013,10 @@ async function sendInput() { sendBtn.disabled = false; cancelBtn.disabled = true; inputEl.focus(); + // Eval finished cleanly — drop the activeInput marker so + // a subsequent tab switch doesn't try to resume something + // that already completed. + tab.activeInput = null; } }); } diff --git a/www/repl/runner.js b/www/repl/runner.js index 5379f6f..c493720 100644 --- a/www/repl/runner.js +++ b/www/repl/runner.js @@ -8,7 +8,7 @@ import { createCTier } from "./c/lumbda-c.loader.js"; import { createAsmTier } from "./asm/lumbda-asm.loader.js"; const cache = {}; -const config = { bendUrl: null }; +const config = { bendUrl: null, pauseFlag: null }; export function setBendUrl(url) { config.bendUrl = url || null; @@ -18,6 +18,19 @@ export function setBendUrl(url) { } } +// SharedArrayBuffer that the tier's eval loop polls for a pause +// signal. Main thread writes 1 to atomic index 0; the tier's polling +// hook (c/eval.c lumbda_check_pause) raises lisp_error("paused") at +// the next K-iteration boundary so module-global env is preserved +// and (portal-snapshot!) afterward captures everything that ran +// before the pause. +export function setPauseFlag(flag) { + config.pauseFlag = flag || null; + for (const t of Object.values(cache)) { + if (t && t.setPauseFlag) t.setPauseFlag(config.pauseFlag); + } +} + export async function getTier(name, onLoad) { if (cache[name]) return cache[name]; if (onLoad) onLoad(name); @@ -26,6 +39,7 @@ export async function getTier(name, onLoad) { else if (name === "asm") cache[name] = await createAsmTier(); else throw new Error(`unknown tier: ${name}`); if (cache[name].setBendUrl) cache[name].setBendUrl(config.bendUrl); + if (cache[name].setPauseFlag) cache[name].setPauseFlag(config.pauseFlag); return cache[name]; } diff --git a/www/repl/worker.mjs b/www/repl/worker.mjs index f0d9c28..baf98ec 100644 --- a/www/repl/worker.mjs +++ b/www/repl/worker.mjs @@ -3,12 +3,17 @@ // live ms counter actually ticks AND so cancel works (main thread // terminates this worker via worker.terminate()). -import { evalOnTier, setBendUrl, heapStats, portalSave, portalLoad } from "./runner.js"; +import { evalOnTier, setBendUrl, setPauseFlag, heapStats, portalSave, portalLoad } from "./runner.js"; self.onmessage = async (e) => { const { kind } = e.data; if (kind === "config") { - setBendUrl(e.data.bendUrl); + // Each field is independently optional so a config message can + // tweak one knob without resetting the others — REPL spawns + // workers with just { pauseFlag }; playground updates bendUrl + // alone, etc. + if (e.data.bendUrl !== undefined) setBendUrl(e.data.bendUrl); + if (e.data.pauseFlag !== undefined) setPauseFlag(e.data.pauseFlag); return; } if (kind === "heap") {