From 06995639ab230037430f8222e33154566a64d165 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Thu, 1 Jun 2023 21:36:50 +0000 Subject: [PATCH] Start backspace functionality and handle all keys displayed Co-authored-by: sigonasr2 --- C++ProjectTemplate.js | 2 +- C++ProjectTemplate.wasm | Bin 310486 -> 312592 bytes main.cpp | 47 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/C++ProjectTemplate.js b/C++ProjectTemplate.js index 56bbbac..0edaef9 100644 --- a/C++ProjectTemplate.js +++ b/C++ProjectTemplate.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).then(receiver,reason=>{err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={40188:()=>{window.onunload=Module._olc_OnPageUnload},40232:($0,$1)=>{Module._olc_EmscriptenShellCss="width: 100%; height: 70vh; margin-left: auto; margin-right: auto;";Module._olc_WindowAspectRatio=$0/$1;Module.canvas.parentNode.addEventListener("resize",function(e){if(e.defaultPrevented){e.stopPropagation();return}var viewWidth=e.detail.width;var viewHeight=e.detail.width/Module._olc_WindowAspectRatio;if(viewHeight>e.detail.height){viewHeight=e.detail.height;viewWidth=e.detail.height*Module._olc_WindowAspectRatio}if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss+" width: "+viewWidth.toString()+"px; height: "+viewHeight.toString()+"px;";Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);if(document.fullscreenElement!=null){var top=(e.detail.height-viewHeight)/2;var left=(e.detail.width-viewWidth)/2;Module.canvas.style.position="fixed";Module.canvas.style.top=top.toString()+"px";Module.canvas.style.left=left.toString()+"px";Module.canvas.style.width="";Module.canvas.style.height=""}Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus();e.stopPropagation()});Module._olc_ResizeCanvas=function(){setTimeout(function(){if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss;Module.canvas.style.cssText="width: 100%; height: 100%; outline: none;";var resizeEvent=new CustomEvent("resize",{detail:{width:Module.canvas.clientWidth,height:Module.canvas.clientHeight},bubbles:true,cancelable:true});Module.canvas.dispatchEvent(resizeEvent)},50)};document.body.style.cssText+=" overscroll-behavior-y: contain;";if(Module.canvas.parentNode.className=="emscripten_border"){document.body.style.margin="0";Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss}Module._olc_ResizeCanvas();var resizeObserver=new ResizeObserver(function(entries){Module._olc_ResizeCanvas()}).observe(Module.canvas.parentNode);var mutationObserver=new MutationObserver(function(mutationsList,observer){for(var i=0;i0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)}var preloadPlugins=Module["preloadPlugins"]||[];function FS_handledByPreloadPlugin(byteArray,fullname,finish,onerror){if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled}function FS_createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}function FS_modeStringToFlags(str){var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags}function FS_getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:()=>{for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){global.performance=require("perf_hooks").performance}_emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(()=>{callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:2};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _eglInitialize(display,majorVersion,minorVersion){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}function _eglSwapBuffers(dpy,surface){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}function _eglSwapInterval(display,interval){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;try{wasmMemory.grow(size-b.byteLength+65535>>>16);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;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,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(e=event){var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(e=event){fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(e=event){var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx.bindVertexArray(GL.vaos[vao])}var _glBindVertexArrayOES=_glBindVertexArray;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _glClear(x0){GLctx.clear(x0)}function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glEnable(x0){GLctx.enable(x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}function stringToUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;var wasmImports={"__cxa_throw":___cxa_throw,"__syscall_fcntl64":___syscall_fcntl64,"__syscall_ioctl":___syscall_ioctl,"__syscall_openat":___syscall_openat,"_emscripten_get_now_is_monotonic":__emscripten_get_now_is_monotonic,"_emscripten_throw_longjmp":__emscripten_throw_longjmp,"abort":_abort,"eglChooseConfig":_eglChooseConfig,"eglCreateContext":_eglCreateContext,"eglCreateWindowSurface":_eglCreateWindowSurface,"eglDestroyContext":_eglDestroyContext,"eglDestroySurface":_eglDestroySurface,"eglGetDisplay":_eglGetDisplay,"eglInitialize":_eglInitialize,"eglMakeCurrent":_eglMakeCurrent,"eglSwapBuffers":_eglSwapBuffers,"eglSwapInterval":_eglSwapInterval,"eglTerminate":_eglTerminate,"emscripten_asm_const_int":_emscripten_asm_const_int,"emscripten_cancel_main_loop":_emscripten_cancel_main_loop,"emscripten_date_now":_emscripten_date_now,"emscripten_get_now":_emscripten_get_now,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_set_blur_callback_on_thread":_emscripten_set_blur_callback_on_thread,"emscripten_set_canvas_element_size":_emscripten_set_canvas_element_size,"emscripten_set_focus_callback_on_thread":_emscripten_set_focus_callback_on_thread,"emscripten_set_keydown_callback_on_thread":_emscripten_set_keydown_callback_on_thread,"emscripten_set_keyup_callback_on_thread":_emscripten_set_keyup_callback_on_thread,"emscripten_set_main_loop":_emscripten_set_main_loop,"emscripten_set_mousedown_callback_on_thread":_emscripten_set_mousedown_callback_on_thread,"emscripten_set_mousemove_callback_on_thread":_emscripten_set_mousemove_callback_on_thread,"emscripten_set_mouseup_callback_on_thread":_emscripten_set_mouseup_callback_on_thread,"emscripten_set_touchend_callback_on_thread":_emscripten_set_touchend_callback_on_thread,"emscripten_set_touchmove_callback_on_thread":_emscripten_set_touchmove_callback_on_thread,"emscripten_set_touchstart_callback_on_thread":_emscripten_set_touchstart_callback_on_thread,"emscripten_set_wheel_callback_on_thread":_emscripten_set_wheel_callback_on_thread,"emscripten_set_window_title":_emscripten_set_window_title,"environ_get":_environ_get,"environ_sizes_get":_environ_sizes_get,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"glAttachShader":_glAttachShader,"glBindBuffer":_glBindBuffer,"glBindTexture":_glBindTexture,"glBindVertexArrayOES":_glBindVertexArrayOES,"glBlendFunc":_glBlendFunc,"glBufferData":_glBufferData,"glClear":_glClear,"glClearColor":_glClearColor,"glCompileShader":_glCompileShader,"glCreateProgram":_glCreateProgram,"glCreateShader":_glCreateShader,"glDeleteProgram":_glDeleteProgram,"glDeleteShader":_glDeleteShader,"glDeleteTextures":_glDeleteTextures,"glDrawArrays":_glDrawArrays,"glEnable":_glEnable,"glEnableVertexAttribArray":_glEnableVertexAttribArray,"glGenBuffers":_glGenBuffers,"glGenTextures":_glGenTextures,"glGenVertexArraysOES":_glGenVertexArraysOES,"glGetShaderInfoLog":_glGetShaderInfoLog,"glLinkProgram":_glLinkProgram,"glReadPixels":_glReadPixels,"glShaderSource":_glShaderSource,"glTexImage2D":_glTexImage2D,"glTexParameteri":_glTexParameteri,"glUseProgram":_glUseProgram,"glVertexAttribPointer":_glVertexAttribPointer,"glViewport":_glViewport,"invoke_ii":invoke_ii,"invoke_iii":invoke_iii,"invoke_iiii":invoke_iiii,"invoke_iiiii":invoke_iiiii,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_viii":invoke_viii,"invoke_viiii":invoke_viiii,"invoke_viiiiii":invoke_viiiiii,"strftime_l":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["__main_argc_argv"]).apply(null,arguments)};var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=function(){return(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=Module["asm"]["olc_OnPageUnload"]).apply(null,arguments)};var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=function(){return(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=Module["asm"]["olc_PGE_UpdateWindowSize"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["malloc"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var _setThrew=function(){return(_setThrew=Module["asm"]["setThrew"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["stackAlloc"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["__cxa_is_pointer_type"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["dynCall_viijii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["dynCall_iiiiij"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["dynCall_iiiiijj"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["dynCall_iiiiiijj"]).apply(null,arguments)};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!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)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!==e+0)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!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)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!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv>>2;args.forEach(arg=>{HEAP32[argv_ptr++]=stringToUTF8OnStack(arg)});HEAP32[argv_ptr]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); +var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).then(receiver,reason=>{err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={40412:()=>{window.onunload=Module._olc_OnPageUnload},40456:($0,$1)=>{Module._olc_EmscriptenShellCss="width: 100%; height: 70vh; margin-left: auto; margin-right: auto;";Module._olc_WindowAspectRatio=$0/$1;Module.canvas.parentNode.addEventListener("resize",function(e){if(e.defaultPrevented){e.stopPropagation();return}var viewWidth=e.detail.width;var viewHeight=e.detail.width/Module._olc_WindowAspectRatio;if(viewHeight>e.detail.height){viewHeight=e.detail.height;viewWidth=e.detail.height*Module._olc_WindowAspectRatio}if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss+" width: "+viewWidth.toString()+"px; height: "+viewHeight.toString()+"px;";Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);if(document.fullscreenElement!=null){var top=(e.detail.height-viewHeight)/2;var left=(e.detail.width-viewWidth)/2;Module.canvas.style.position="fixed";Module.canvas.style.top=top.toString()+"px";Module.canvas.style.left=left.toString()+"px";Module.canvas.style.width="";Module.canvas.style.height=""}Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus();e.stopPropagation()});Module._olc_ResizeCanvas=function(){setTimeout(function(){if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss;Module.canvas.style.cssText="width: 100%; height: 100%; outline: none;";var resizeEvent=new CustomEvent("resize",{detail:{width:Module.canvas.clientWidth,height:Module.canvas.clientHeight},bubbles:true,cancelable:true});Module.canvas.dispatchEvent(resizeEvent)},50)};document.body.style.cssText+=" overscroll-behavior-y: contain;";if(Module.canvas.parentNode.className=="emscripten_border"){document.body.style.margin="0";Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss}Module._olc_ResizeCanvas();var resizeObserver=new ResizeObserver(function(entries){Module._olc_ResizeCanvas()}).observe(Module.canvas.parentNode);var mutationObserver=new MutationObserver(function(mutationsList,observer){for(var i=0;i0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)}var preloadPlugins=Module["preloadPlugins"]||[];function FS_handledByPreloadPlugin(byteArray,fullname,finish,onerror){if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled}function FS_createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}function FS_modeStringToFlags(str){var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags}function FS_getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:()=>{for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){global.performance=require("perf_hooks").performance}_emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(()=>{callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:2};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _eglInitialize(display,majorVersion,minorVersion){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}function _eglSwapBuffers(dpy,surface){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}function _eglSwapInterval(display,interval){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;try{wasmMemory.grow(size-b.byteLength+65535>>>16);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;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,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(e=event){var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(e=event){fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(e=event){var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx.bindVertexArray(GL.vaos[vao])}var _glBindVertexArrayOES=_glBindVertexArray;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _glClear(x0){GLctx.clear(x0)}function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glEnable(x0){GLctx.enable(x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}function stringToUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;var wasmImports={"__cxa_throw":___cxa_throw,"__syscall_fcntl64":___syscall_fcntl64,"__syscall_ioctl":___syscall_ioctl,"__syscall_openat":___syscall_openat,"_emscripten_get_now_is_monotonic":__emscripten_get_now_is_monotonic,"_emscripten_throw_longjmp":__emscripten_throw_longjmp,"abort":_abort,"eglChooseConfig":_eglChooseConfig,"eglCreateContext":_eglCreateContext,"eglCreateWindowSurface":_eglCreateWindowSurface,"eglDestroyContext":_eglDestroyContext,"eglDestroySurface":_eglDestroySurface,"eglGetDisplay":_eglGetDisplay,"eglInitialize":_eglInitialize,"eglMakeCurrent":_eglMakeCurrent,"eglSwapBuffers":_eglSwapBuffers,"eglSwapInterval":_eglSwapInterval,"eglTerminate":_eglTerminate,"emscripten_asm_const_int":_emscripten_asm_const_int,"emscripten_cancel_main_loop":_emscripten_cancel_main_loop,"emscripten_date_now":_emscripten_date_now,"emscripten_get_now":_emscripten_get_now,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_set_blur_callback_on_thread":_emscripten_set_blur_callback_on_thread,"emscripten_set_canvas_element_size":_emscripten_set_canvas_element_size,"emscripten_set_focus_callback_on_thread":_emscripten_set_focus_callback_on_thread,"emscripten_set_keydown_callback_on_thread":_emscripten_set_keydown_callback_on_thread,"emscripten_set_keyup_callback_on_thread":_emscripten_set_keyup_callback_on_thread,"emscripten_set_main_loop":_emscripten_set_main_loop,"emscripten_set_mousedown_callback_on_thread":_emscripten_set_mousedown_callback_on_thread,"emscripten_set_mousemove_callback_on_thread":_emscripten_set_mousemove_callback_on_thread,"emscripten_set_mouseup_callback_on_thread":_emscripten_set_mouseup_callback_on_thread,"emscripten_set_touchend_callback_on_thread":_emscripten_set_touchend_callback_on_thread,"emscripten_set_touchmove_callback_on_thread":_emscripten_set_touchmove_callback_on_thread,"emscripten_set_touchstart_callback_on_thread":_emscripten_set_touchstart_callback_on_thread,"emscripten_set_wheel_callback_on_thread":_emscripten_set_wheel_callback_on_thread,"emscripten_set_window_title":_emscripten_set_window_title,"environ_get":_environ_get,"environ_sizes_get":_environ_sizes_get,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"glAttachShader":_glAttachShader,"glBindBuffer":_glBindBuffer,"glBindTexture":_glBindTexture,"glBindVertexArrayOES":_glBindVertexArrayOES,"glBlendFunc":_glBlendFunc,"glBufferData":_glBufferData,"glClear":_glClear,"glClearColor":_glClearColor,"glCompileShader":_glCompileShader,"glCreateProgram":_glCreateProgram,"glCreateShader":_glCreateShader,"glDeleteProgram":_glDeleteProgram,"glDeleteShader":_glDeleteShader,"glDeleteTextures":_glDeleteTextures,"glDrawArrays":_glDrawArrays,"glEnable":_glEnable,"glEnableVertexAttribArray":_glEnableVertexAttribArray,"glGenBuffers":_glGenBuffers,"glGenTextures":_glGenTextures,"glGenVertexArraysOES":_glGenVertexArraysOES,"glGetShaderInfoLog":_glGetShaderInfoLog,"glLinkProgram":_glLinkProgram,"glReadPixels":_glReadPixels,"glShaderSource":_glShaderSource,"glTexImage2D":_glTexImage2D,"glTexParameteri":_glTexParameteri,"glUseProgram":_glUseProgram,"glVertexAttribPointer":_glVertexAttribPointer,"glViewport":_glViewport,"invoke_ii":invoke_ii,"invoke_iii":invoke_iii,"invoke_iiii":invoke_iiii,"invoke_iiiii":invoke_iiiii,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_viii":invoke_viii,"invoke_viiii":invoke_viiii,"invoke_viiiiii":invoke_viiiiii,"strftime_l":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["__main_argc_argv"]).apply(null,arguments)};var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=function(){return(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=Module["asm"]["olc_OnPageUnload"]).apply(null,arguments)};var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=function(){return(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=Module["asm"]["olc_PGE_UpdateWindowSize"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["malloc"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var _setThrew=function(){return(_setThrew=Module["asm"]["setThrew"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["stackAlloc"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["__cxa_is_pointer_type"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["dynCall_viijii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["dynCall_iiiiij"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["dynCall_iiiiijj"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["dynCall_iiiiiijj"]).apply(null,arguments)};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!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)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!==e+0)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!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)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!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv>>2;args.forEach(arg=>{HEAP32[argv_ptr++]=stringToUTF8OnStack(arg)});HEAP32[argv_ptr]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/C++ProjectTemplate.wasm b/C++ProjectTemplate.wasm index 49c60f4ce7e735578801095659431a5e66a91da5..e42ea9376b3ef19914069c2eda43c1a06fe90720 100755 GIT binary patch delta 89559 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 delta 87211 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⁡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 ULTs*t>&N+ErgI&BZQzXm2mhf5HUIzs diff --git a/main.cpp b/main.cpp index 99887fe..3d1a0a6 100644 --- a/main.cpp +++ b/main.cpp @@ -7,11 +7,23 @@ struct Cursor{ int pos=0; }; +struct PrintKey{ + char normal; + char shift; +}; + class IDE : public olc::PixelGameEngine { public: std::vectorcursors={{0,2}}; std::vectordocument={{"Test"}}; + std::mapPRINTABLE={ + {K0,{')'}},{K1,{'!'}},{K2,{'@'}},{K3,{'#'}},{K4,{'$'}},{K5,{'%'}},{K6,{'^'}},{K7,{'&'}},{K8,{'*'}},{K9,{'('}}, + {SPACE,{' ',' '}}, + {NP_MUL,{'*','*'}},{NP_DIV,{'/','/'}},{NP_ADD,{'+','+'}},{NP_SUB,{'-','-'}},{NP_DECIMAL,{'.','.'}},{PERIOD,{'.','>'}}, + {EQUALS,{'=','+'}},{COMMA,{',','<'}},{MINUS,{'-','_'}}, + {OEM_1,{';',':'}},{OEM_2,{'/','?'}},{OEM_3,{'`','~'}},{OEM_4,{'[','{'}},{OEM_5,{' '}},{OEM_6,{']','}'}},{OEM_7,{'\'','"'}},{OEM_8,{'\\','|'}} + }; float lastBlinkTime=0; IDE() @@ -82,7 +94,7 @@ public: int i=0; for (std::string&line:document){ DrawStringDecal({0,float(i)*10},line); - if(cursors[0].line==i&&lastBlinkTime>0.5f){DrawStringDecal({float(cursors[0].pos)*8-2,float(i)*10+1},"|",GREY,{0.5,0.8});} + if(cursors[0].line==i&&lastBlinkTime>=0.5f){DrawStringDecal({float(cursors[0].pos)*8-2,float(i)*10+1},"|",GREY,{0.5,0.8});} i++; } lastBlinkTime+=fElapsedTime; @@ -97,8 +109,39 @@ public: } void GetAnyKeyPress(olc::Key k)override{ + lastBlinkTime=0.5f; + if (k==BACK){ + if (cursors[0].pos==0){ + if (cursors[0].line>0){ + cursors[0].pos=document[cursors[0].line-1].size(); + document[cursors[0].line-1].append(document[cursors[0].line]); + document[cursors[0].line--].clear(); + } + } else { + + } + } else if (k>=A&&k<=Z){ - document[cursors[0].line].insert(cursors[0].pos,std::string(1,Z-k)); + if (GetKey(SHIFT).bHeld){ + document[cursors[0].line].insert(cursors[0].pos++,std::string(1,k-1+'A')); + } else { + document[cursors[0].line].insert(cursors[0].pos++,std::string(1,k-1+'a')); + } + } else + if (k>=K0&&k<=K9){ + if (GetKey(SHIFT).bHeld){ + document[cursors[0].line].insert(cursors[0].pos++,std::string(1,PRINTABLE[k].normal)); + } else { + document[cursors[0].line].insert(cursors[0].pos++,std::string(1,k-K0+'0')); + } + } else { + if (PRINTABLE.find(k)!=PRINTABLE.end()){ + if (GetKey(SHIFT).bHeld){ + document[cursors[0].line].insert(cursors[0].pos++,std::string(1,PRINTABLE[k].shift)); + } else { + document[cursors[0].line].insert(cursors[0].pos++,std::string(1,PRINTABLE[k].normal)); + } + } } } };