emulators
Version:
Emulators (dos) with standartized API
8 lines (7 loc) • 225 kB
JavaScript
var WDOSBOXX = (() => {
var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;
if (typeof __filename != 'undefined') _scriptName = _scriptName || __filename;
return (
async function(moduleArg = {}) {
var moduleRtn;
var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";if(ENVIRONMENT_IS_NODE){}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):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(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.slice(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{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=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var runtimeInitialized=false;var runtimeExited=false;var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){___funcs_on_exit();callRuntimeCallbacks(__ATEXIT__);FS.quit();TTY.shutdown();runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";if(runtimeInitialized){___trap()}var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){var f="wdosbox-x.wasm";if(!isDataURI(f)){return locateFile(f)}return f}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&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!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(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmMemory=wasmExports["Ee"];updateMemoryViews();wasmTable=wasmExports["Ge"];addOnInit(wasmExports["Fe"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}var tempDouble;var tempI64;var ASM_CONSTS={1997992:()=>{Module.paused=true},1998020:()=>{Module.paused=false},1998049:()=>{Module.performance=Module.performance||(typeof performance==="object"?performance:Date)},1998154:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},1998301:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},1998535:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){if(typeof navigator.userActivation==="undefined"){autoResumeAudioContext(SDL2.audioContext)}}}return SDL2.audioContext===undefined?-1:0},1999087:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},1999155:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined;SDL2.capture.silenceBuffer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},2000848:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}if(SDL2.audio.silenceTimer!==undefined){clearInterval(SDL2.audio.silenceTimer);SDL2.audio.silenceTimer=undefined;SDL2.audio.silenceBuffer=undefined}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"]);if(SDL2.audioContext.state==="suspended"){SDL2.audio.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.audio.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){if(typeof navigator.userActivation!=="undefined"){if(navigator.userActivation.hasBeenActive){SDL2.audioContext.resume()}}SDL2.audio.currentOutputBuffer=SDL2.audio.silenceBuffer;dynCall("vi",$2,[$3]);SDL2.audio.currentOutputBuffer=undefined};SDL2.audio.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3)}},2002023:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c<numChannels;++c){var channelData=SDL2.capture.currentCaptureBuffer.getChannelData(c);if(channelData.length!=$1){throw"Web Audio capture buffer length mismatch! Destination size: "+channelData.length+" samples vs expected "+$1+" samples!"}if(numChannels==1){for(var j=0;j<$1;++j){setValue($0+j*4,channelData[j],"float")}}else{for(var j=0;j<$1;++j){setValue($0+(j*numChannels+c)*4,channelData[j],"float")}}}},2002628:($0,$1)=>{var SDL2=Module["SDL2"];var buf=$0>>>2;var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c<numChannels;++c){var channelData=SDL2.audio.currentOutputBuffer["getChannelData"](c);if(channelData.length!=$1){throw"Web Audio output buffer length mismatch! Destination size: "+channelData.length+" samples vs expected "+$1+" samples!"}for(var j=0;j<$1;++j){channelData[j]=HEAPF32[buf+(j*numChannels+c)]}}},2003117:$0=>{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i<tracks.length;i++){SDL2.capture.stream.removeTrack(tracks[i])}}if(SDL2.capture.scriptProcessorNode!==undefined){SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){};SDL2.capture.scriptProcessorNode.disconnect()}if(SDL2.capture.mediaStreamNode!==undefined){SDL2.capture.mediaStreamNode.disconnect()}SDL2.capture=undefined}else{if(SDL2.audio.scriptProcessorNode!=undefined){SDL2.audio.scriptProcessorNode.disconnect()}if(SDL2.audio.silenceTimer!==undefined){clearInterval(SDL2.audio.silenceTimer)}SDL2.audio=undefined}if(SDL2.audioContext!==undefined&&SDL2.audio===undefined&&SDL2.capture===undefined){SDL2.audioContext.close();SDL2.audioContext=undefined}},2004123:()=>window.innerWidth,2004153:()=>window.innerHeight,2004184:($0,$1,$2)=>{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst<num){var val=HEAP32[src];data[dst]=val&255;data[dst+1]=val>>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i<j){data8[i]=255;i=i+4|0;data8[i]=255;i=i+4|0;data8[i]=255;i=i+4|0;data8[i]=255;i=i+4|0;data8[i]=255;i=i+4|0;data8[i]=255;i=i+4|0;data8[i]=255;i=i+4|0;data8[i]=255;i=i+4|0}}else{while(i<j){data8[i]=255;i=i+4|0}}}SDL2.ctx.putImageData(SDL2.image,0,0)},2005652:($0,$1,$2,$3,$4)=>{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst<num){var val=HEAP32[src];data[dst]=val&255;data[dst+1]=val>>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},2006640:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},2006723:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}}};function syncSleep(ms,nonSkippable){if(!Module.sync_sleep){throw new Error("Async environment does not exists");return}const now=Date.now();if(Asyncify.state===0){if(!nonSkippable&&now-Module.last_wakeup<24){return}if(nonSkippable){Module.wakeUpAt=Date.now()+ms;++Module.nonskippable_sleep_count}++Module.sleep_count;Module.cycles+=Module._getAndResetCycles();Module.sleep_started_at=now}else if(Asyncify.state===2){Module.sleep_time+=now-Module.sleep_started_at;Module.last_wakeup=now;if(Asyncify.asyncPromiseHandlers===null){Asyncify.whenDone().catch(Module.uncaughtAsyncify)}}Asyncify.handleSleep(Module.sync_sleep)}function initTimeoutSyncSleep(){Module.alive=true;Module.nonskippable_sleep_count=0;Module.sleep_count=0;Module.sleep_time=0;Module.cycles=0;Module.last_wakeup=Date.now();Module.sync_sleep=function(wakeUp){setTimeout(function(){if(!Module.alive){return}if(Module.paused===true){var checkIntervalId=setInterval(function(){if(Module.paused===false){clearInterval(checkIntervalId);wakeUp()}},16)}else{wakeUp()}})};Module.destroyAsyncify=function(){Module.alive=false;delete Module.sync_sleep};Module.uncaughtAsyncify=function(error){console.error(error);Module.destroyAsyncify();Module.uncaught(error)};return true}function initMessageSyncSleep(worker){Module.alive=true;Module.nonskippable_sleep_count=0;Module.sleep_count=0;Module.sleep_time=0;Module.cycles=0;Module.last_wakeup=Date.now();function postWakeUpMessage(){if(worker){postMessage({name:"ws-sync-sleep",props:{sessionId:Module.sessionId}})}else{window.postMessage({name:"ws-sync-sleep",props:{sessionId:Module.sessionId}},"*")}}Module.sync_sleep=function(wakeUp){if(Module.sync_wakeUp){throw new Error("Trying to sleep in sleeping state!");return}Module.sync_wakeUp=wakeUp;if(Module.paused===true){var checkIntervalId=setInterval(function(){if(Module.paused===false){clearInterval(checkIntervalId);postWakeUpMessage()}},16)}else{postWakeUpMessage()}};Module.receive=function(ev){var data=ev.data;if(ev.data.name==="wc-sync-sleep"&&Module.sessionId===ev.data.props.sessionId){if(Module.wakeUpAt!==undefined&&Date.now()<Module.wakeUpAt){postWakeUpMessage();return}var wakeUp=Module.sync_wakeUp;delete Module.sync_wakeUp;delete Module.wakeUpAt;if(Module.alive){wakeUp()}}};if(worker){self.addEventListener("message",Module.receive,{passive:true})}else{window.addEventListener("message",Module.receive,{passive:true})}Module.destroyAsyncify=function(){if(worker){self.removeEventListener("message",Module.receive)}else{window.removeEventListener("message",Module.receive)}Module.alive=false;delete Module.sync_sleep};Module.uncaughtAsyncify=function(error){console.error(error);Module.destroyAsyncify();Module.uncaught(error)};return true}function destroyAsyncify(){Module.destroyAsyncify()}function isWorker(){return typeof importScripts==="function"}function isNode(){return typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"}function now(){return Module.performance.now()}function emsc_init_backend(){Module.onBackendEvent=function(json){console.log("backend event",json);const message=JSON.parse(json);switch(message.type){case"wc-trigger-event":{Module.withString(message.event,function(name){Module._TriggerEventByName(name)})}break;default:Module.err("Unknown event: "+json)}}}function emsc_getMTimeMs(path){var lookup=FS.lookupPath(UTF8ToString(path));return lookup.node.mtime}function emsc_progress(file,extracted,count){if(Module.libzip_progress!==undefined){Module.libzip_progress(UTF8ToString(file),extracted,count)}}function ws_init_runtime(sessionId){var worker=typeof importScripts==="function";Module.messageSent=0;Module.messageReceived=0;Module.messageFrame=0;Module.messageSound=0;Module.sessionId=UTF8ToString(sessionId);Module.bundles=[];Module.files={};Module.FS.ignorePermissions=true;Module.wsNetIds={};Module.driveIo={};function fsTree(root,parent){for(const name of Object.keys(root)){const fsNode=root[name];const folder=fsNode.isFolder;const node={name};if(folder){node.nodes=[];node.size=null}else{node.nodes=null;node.size=fsNode.usedBytes}parent.nodes.push(node);if(folder){fsTree(fsNode.contents,node)}}return parent}function sendMessage(name,props,transfer){++Module.messageSent;props=props||{};props.sessionId=Module.sessionId;if(Module.postMessage){Module.postMessage(name,props,transfer)}else if(worker){postMessage({name,props},transfer)}else{window.postMessage({name,props},"*",transfer)}}Module.sendMessage=sendMessage;Module.ping=function(msg){};Module.log=function(message){sendMessage("ws-log",{tag:"worker",message})};Module.warn=function(message){sendMessage("ws-warn",{tag:"worker",message})};Module.err=function(message){sendMessage("ws-err",{tag:"panic",message})};Module.print=Module.log;Module.printErr=Module.err;Module.mallocString=function(value){const valueLength=Module["lengthBytesUTF8"](value)+1;const valueBuffer=Module["_malloc"](valueLength);Module.stringToUTF8(value,valueBuffer,valueLength);return valueBuffer};Module.withString=function(value,callback){const cValue=Module.mallocString(value);callback(cValue);Module["_free"](cValue)};Module.uncaught=function(error){if(error.message!=="Program terminated with exit(0)"&&error!=="Program terminated with exit(0)"){Module.err("Backend crashed, cause: "+(error.message||error))}if(Module.cleanup){Module.cleanup()}if(Module.exit){Module.exit()}else{Module.sendMessage("ws-exit")}};function messageHandler(e){var data=e.data;if(data.name===undefined||data.name.length<3||data.name[0]!=="w"||data.name[1]!=="c"||data.name[2]!=="-"){return}if(data.props.sessionId!==Module.sessionId){return}processMessage(data)}function processMessage(data){if(data.name!=="wc-sync-sleep"){++Module.messageReceived}switch(data.name){case"wc-run":{Module.token=data.props.token||"";Module._extractBundleToFs();Module._runRuntime();sendMessage("ws-server-ready")}break;case"wc-pause":{Module._requestPause()}break;case"wc-resume":{Module._requestResume()}break;case"wc-mute":{Module._requestMute()}break;case"wc-unmute":{Module._requestUnmute()}break;case"wc-exit":{Module.wsNetIds={};if(Module.wsNetConnectResolve){Module.wsNetConnectResolve(-1)}Module._requestExit()}break;case"wc-pack-fs-to-bundle":{try{Module.persist=function(archive){if(archive===null){sendMessage("ws-persist",{bundle:null})}else{sendMessage("ws-persist",{bundle:archive},[archive.buffer])}};Module._packFsToBundle(data.props.onlyChanges);delete Module.persist}catch(e){Module.err(e.message)}}break;case"wc-add-key":{Module._addKey(data.props.key,data.props.pressed,data.props.timeMs)}break;case"wc-mouse-move":{Module._mouseMove(data.props.x,data.props.y,data.props.relative,data.props.timeMs)}break;case"wc-mouse-button":{Module._mouseButton(data.props.button,data.props.pressed,data.props.timeMs)}break;case"wc-mouse-sync":{Module._mouseSync(data.props.timeMs)}break;case"wc-sync-sleep":{}break;case"wc-backend-event":{if(Module.onBackendEvent){Module.onBackendEvent(data.props.json)}else{Module.err("Backend does not support custom events")}}break;case"wc-connect":{const buffer=Module.mallocString(data.props.address);Module._networkConnect(data.props.networkType,buffer);Module._free(buffer)}break;case"wc-disconnect":{Module._networkDisconnect(data.props.networkType)}break;case"wc-asyncify-stats":{const stats={offscreenCanvas:!!Module.canvas,messageSent:Module.messageSent,messageReceived:Module.messageReceived,messageFrame:Module.messageFrame,messageSound:Module.messageSound,nonSkippableSleepCount:Module.nonskippable_sleep_count,sleepCount:Module.sleep_count,sleepTime:Module.sleep_time,cycles:Module.cycles,netSent:Module.netSent||0,netRecv:Module.netRecv||0};sendMessage("ws-asyncify-stats",stats)}break;case"wc-fs-tree":{sendMessage("ws-fs-tree",{fsTree:fsTree(Module.FS.root.contents.home.contents.web_user.contents,{name:".",nodes:[],size:null})})}break;case"wc-fs-delete-file":{Module.withString(data.props.file,cstr=>{const deleted=Module._fsDeleteFile(cstr)===1;sendMessage("ws-fs-delete-file",{deleted})})}break;case"wc-send-data-chunk":{function mergeChunks(parts){if(parts.length===1){return parts[0]}let length=0;for(const next of parts){length+=next.byteLength}const merged=new Uint8Array(length);length=0;for(const next of parts){merged.set(next,length);length+=next.byteLength}return merged}function createPath(parts,begin,end){let path="/home/web_user";for(let i=begin;i<end;++i){const part=parts[i].trim();if(part.length===0){continue}Module.FS.createPath(path,part,true,true);path=path+"/"+part}return path}const chunk=data.props.chunk;if(chunk.type==="bundle"){const index=Number.parseInt(chunk.name);if(Module.bundles[index]===undefined){Module.bundles[index]=[]}if(chunk.data===null){Module.bundles[index]=mergeChunks(Module.bundles[index])}else{Module.bundles[index].push(new Uint8Array(chunk.data))}sendMessage("ws-send-data-chunk",{chunk:{type:"ok",name:chunk.name,data:null}})}else if(chunk.type==="file"){const file=chunk.name;if(Module.files[file]===undefined){Module.files[file]=[]}if(chunk.data===null){const body=mergeChunks(Module.files[file]);delete Module.files[file];const parts=file.split("/");if(parts.length===0){Module.err("Can't create file '"+file+"', because it's not valid file path");return}const filename=parts[parts.length-1].trim();const path=createPath(parts,0,parts.length-1);Module.FS.writeFile(path+"/"+filename,body)}else{Module.files[file].push(new Uint8Array(chunk.data))}sendMessage("ws-send-data-chunk",{chunk:{type:"ok",name:chunk.name,data:null}})}else{Module.err("Unknown chunk type: "+chunk.type)}}break;case"wc-fs-get-file":{const file=data.props.file;const contents=Module.FS.readFile("/home/web_user/"+file,{encoding:"binary"});sendMessage("ws-send-data-chunk",{chunk:{type:"file",name:file,data:contents.buffer}});sendMessage("ws-send-data-chunk",{chunk:{type:"file",name:file,data:null}})}break;case"wc-net-connected":{if(Module.wsNetConnectResolve){Module.wsNetConnectResolve(data.props.networkId)}else{console.error("wc-net-connected recived but no awaiting promises, networkId:",data.props.networkId)}}break;case"wc-net-received":{if(Module.wsNetIds[data.props.networkId]){const buffer=new Uint8Array(data.props.data);const ptr=Module._malloc(buffer.length);Module.HEAPU8.set(buffer,ptr);Module._ws_client_net_recv(data.props.networkId,ptr,buffer.length)}else{console.error("wc-net-received recived but network is not registered")}}break;case"wc-sockdrive-opened":{Module.sockdriveSectorSize=data.props.sectorSize;const ptr=Module["_malloc"](data.props.emptyRangesCount*4);for(let i=0;i<data.props.emptyRangesCount;++i){const value=data.props.emptyRanges[i];const offset=ptr+i*4;Module.HEAPU8[offset]=value&255;Module.HEAPU8[offset+1]=(value&65280)>>8;Module.HEAPU8[offset+2]=(value&16711680)>>16;Module.HEAPU8[offset+3]=(value&4278190080)>>24}Module["_em_client_sockdrive_opened"](data.props.handle,data.props.size,data.props.heads,data.props.cylinders,data.props.sectors,data.props.sectorSize,data.props.aheadRange,data.props.emptyRangesCount,ptr);Module["_free"](ptr)}break;case"wc-sockdrive-new-range":{const ptr=Module["_malloc"](data.props.buffer.length);Module.HEAPU8.set(data.props.buffer,ptr);Module["_em_client_sockdrive_new_range"](data.props.handle,data.props.range,ptr);Module["_free"](ptr)}break;case"wc-unload":{if(Module.wsUnloadResolve){Module.wsUnloadResolve()}else{console.error("wc-unload recived but no awaiting promises")}}break;default:{console.log("Unknown client message (wc): "+JSON.stringify(data))}break}}if(Module.postMessage){Module.messageHandler=messageHandler;Module.cleanup=function(){}}else if(worker){onmessage=messageHandler;Module.cleanup=function(){}}else{window.addEventListener("message",messageHandler,{passive:true});Module.cleanup=function(){window.removeEventListener("message",messageHandler)}}if(Module.canvas){try{(function(){const gl=Module.canvas.getContext("webgl");if(!gl){throw new Error("Unable to get WebGL context")}Module.gl=gl;const vsSource=` attribute vec4 aVertexPosition; attribute vec2 aTextureCoord; varying highp vec2 vTextureCoord; void main(void) { gl_Position = aVertexPosition; vTextureCoord = aTextureCoord; } `;const fsSource=` varying highp vec2 vTextureCoord; uniform sampler2D uSampler; void main(void) { highp vec4 color = texture2D(uSampler, vTextureCoord); gl_FragColor = vec4(color.r, color.g, color.b, 1.0); } `;function loadShader(gl,shaderType,source){const shader=gl.createShader(shaderType);gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){const info=gl.getShaderInfoLog(shader);gl.deleteShader(shader);throw new Error("An error occurred compiling the shaders: "+info)}return shader}function initShaderProgram(gl,vsSource,fsSource){const vertexShader=loadShader(gl,gl.VERTEX_SHADER,vsSource);const fragmentShader=loadShader(gl,gl.FRAGMENT_SHADER,fsSource);const shaderProgram=gl.createProgram();gl.attachShader(shaderProgram,vertexShader);gl.attachShader(shaderProgram,fragmentShader);gl.linkProgram(shaderProgram);if(!gl.getProgramParameter(shaderProgram,gl.LINK_STATUS)){throw new Error("Unable to initialize the shader program: "+gl.getProgramInfoLog(shaderProgram))}return shaderProgram}const shaderProgram=initShaderProgram(gl,vsSource,fsSource);const vertexPosition=gl.getAttribLocation(shaderProgram,"aVertexPosition");const textureCoord=gl.getAttribLocation(shaderProgram,"aTextureCoord");const uSampler=gl.getUniformLocation(shaderProgram,"uSampler");const positionBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);const positions=[-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0];gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(positions),gl.STATIC_DRAW);gl.vertexAttribPointer(vertexPosition,3,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(vertexPosition);const textureCoordBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,textureCoordBuffer);const textureCoordinates=[0,1,1,1,1,0,0,1,1,0,0,0];gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(textureCoordinates),gl.STATIC_DRAW);gl.vertexAttribPointer(textureCoord,2,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(textureCoord);const texture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);const pixel=new Uint8Array([0,0,0]);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,1,1,0,gl.RGB,gl.UNSIGNED_BYTE,pixel);gl.useProgram(shaderProgram);gl.activeTexture(gl.TEXTURE0);gl.uniform1i(uSampler,0);let requestAnimationFrameId=null;Module.updateTexture=(frame,frameWidth,frameHeight)=>{if(requestAnimationFrameId===null){requestAnimationFrameId=requestAnimationFrame(()=>{gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,frameWidth,frameHeight,0,gl.RGB,gl.UNSIGNED_BYTE,Module.HEAPU8.slice(frame,frame+frameWidth*frameHeight*3));gl.drawArrays(gl.TRIANGLES,0,6);requestAnimationFrameId=null})}}})()}catch(e){Module.err(e.message)}}sendMessage("ws-ready",{})}function emsc_ws_client_frame_set_size(width,height){if(Module.canvas){Module.canvas.width=width;Module.canvas.height=height;Module.gl.viewport(0,0,width,height)}Module.sendMessage("ws-frame-set-size",{width,height})}function emsc_start_frame_update(){Module.frame_update_lines=[];Module.frame_update_lines_transferable=[]}function emsc_add_frame_line(start,ptr,len){if(Module.canvas){Module.frame_update_lines.push({})}else{var bpp3=Module.HEAPU8.slice(ptr,ptr+len);Module.frame_update_lines.push({start,heapu8:bpp3});Module.frame_update_lines_transferable.push(bpp3.buffer)}}function emsc_end_frame_update(frameRgb,frameWidth,frameHeight){if(Module.frame_update_lines.length>0){++Module.messageFrame;if(Module.canvas){if(frameWidth>0&&frameHeight>0){Module.updateTexture(frameRgb,frameWidth,frameHeight)}}else{Module.sendMessage("ws-update-lines",{lines:Module.frame_update_lines},Module.frame_update_lines_transferable)}}delete Module.frame_update_lines;delete Module.frame_update_lines_transferable}function emsc_ws_client_sound_init(freq){Module.sendMessage("ws-sound-init",{freq})}function emsc_ws_client_sound_push(samples,num_samples){if(num_samples<=0){return}++Module.messageSound;const heapf32=Module.HEAPF32.slice(samples/4,samples/4+num_samples);Module.sendMessage("ws-sound-push",{samples:heapf32},[heapf32.buffer])}function emsc_ws_exit_runtime(){Module.exit=function(){Module.sendMessage("ws-exit")}}function ws_client_stdout(data,amount){Module.sendMessage("ws-stdout",{message:UTF8ToString(data,amount)})}function ws_client_log(tag,message){Module.sendMessage("ws-log",{tag:UTF8ToString(tag),message:UTF8ToString(message)})}function ws_client_warn(tag,message){Module.sendMessage("ws-warn",{tag:UTF8ToString(tag),message:UTF8ToString(message)})}function ws_client_error(tag,message){Module.sendMessage("ws-err",{tag:UTF8ToString(tag),message:UTF8ToString(message)})}function ws_client_network_connected(networkType,address){Module.sendMessage("ws-connected",{networkType,address:UTF8ToString(address)})}function ws_client_network_disconnected(networkType){Module.sendMessage("ws-disconnected",{networkType})}function emsc_exit_runtime(){if(!Module.exit){var message="ERR! exitRuntime called without request"+", asyncify state: "+Asyncify.state;Module.err(message);return}Module.exit();Module.cleanup()}function emsc_extract_bundle_to_fs(){Module.FS.chdir("/home/web_user");let index;Module.libzip_progress=function(file,extracted,count){Module.sendMessage("ws-extract-progress",{index,file,extracted,count})};let dosboxConf=null;for(index=0;index<Module.bundles.length;++index){const bytes=Module.bundles[index];const buffer=Module._malloc(bytes.length);Module.HEAPU8.set(bytes,buffer);const retcode=Module._zip_to_fs(buffer,bytes.length,0);Module._free(buffer);if(retcode!==0){Module.err("Unable to extract bundle archive\n");return}if(index===0){try{dosboxConf=Module.FS.readFile("/home/web_user/.jsdos/dosbox.conf")}catch(e){}Module.fsCreatedAt=Module._get_changes_mtime_ms();const nowTime=Date.now();while(Date.now()<nowTime+4){}}}if(dosboxConf===null){try{dosboxConf=Module.FS.readFile("/home/web_user/.jsdos/dosbox.conf")}catch(e){Module.err("Broken bundle, .jsdos/dosbox.conf not found");return}}const configContentPtr=Module._getConfigContent();const configContent=Module.UTF8ToString(configContentPtr);Module._free(configContentPtr);Module.sendMessage("ws-config",{dosboxConf,jsdosConf:configContent});delete Module.libzip_progress;delete Module.bundles}function emsc_pack_fs_to_bundle(onlyChanges){Module.FS.chdir("/home/web_user");const ptr=Module._zip_from_fs(onlyChanges?Module.fsCreatedAt:0);if(ptr===0){if(onlyChanges){Module.persist(null)}else{Module.err("Can't create zip, see more info in logs");Module._abort()}return}const length=Module.HEAPU32[ptr/4];const memory=Module.HEAPU8;const archive=memory.slice(ptr+4,ptr+4+length);Module._free(ptr);Module.persist(archive)}function __asyncjs__em_net_connect(address){return Asyncify.handleAsync(async()=>new Promise(resolve=>{if(Module.wsNetConnectResolve){console.error("wsOpen is called while another one is still processing");return-1}Module.wsNetConnectResolve=id=>{delete Module.wsNetConnectResolve;if(id!==-1){Module.wsNetIds[id]=true}resolve(id)};Module.sendMessage("ws-net-connect",{address:UTF8ToString(address)})}))}function __asyncjs__em_unload(){return Asyncify.handleAsync(async()=>new Promise(resolve=>{Module.sendMessage("ws-unload");Module.wsUnloadResolve=()=>{delete Module.wsUnloadResolve;resolve()}}))}function em_net_send(networkId,datap,len){if(Module.wsNetIds[networkId]){const data=Module.HEAPU8.slice(datap,datap+len);Module.sendMessage("ws-net-send",{networkId,data},[data.buffer])}return Module.wsNetIds[networkId]===true}function em_net_disconnect(networkId){if(Module.wsNetIds[networkId]){Module.sendMessage("ws-net-disconnect",{networkId});delete Module.wsNetIds[networkId]}}function em_server_sockdrive_open(handle,url){Module.sendMessage("ws-sockdrive-open",{handle,url:UTF8ToString(url)})}function em_server_sockdrive_ready(handle){Module.sendMessage("ws-sockdrive-ready",{handle})}function em_server_sockdrive_close(handle){Module.sendMessage("ws-sockdrive-close",{handle})}function em_server_sockdrive_load_range(handle,range){Module.sendMessage("ws-sockdrive-load-range",{handle,range})}function em_server_sockdrive_write_sector(handle,sector,buffer){const data=HEAPU8.slice(buffer,buffer+Module.sockdriveSectorSize);Module.sendMessage("ws-sockdrive-write-sector",{handle,sector,data},[data.buffer])}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||false;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;break;case"i8":HEAP8[ptr]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":abort("to do setValue(i64) use WASM_BIGINT");case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var ___call_sighandler=(fp,sig)=>(a1=>dynCall_vi(fp,a1))(sig);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 initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};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<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=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<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};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(typeof window!="undefined"&&typeof window.prompt=="function"){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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.atime=Date.now()}return bytesRead},write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.mtime=stream.node.ctime=Date.now()}return i}},default_tty_ops:{get_char(tty){return FS_stdin_getChar()},put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){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 alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;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,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.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){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.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){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);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.mtime=node.ctime=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate(stream,offset,length){MEMFS.e