var Module=typeof Module!=='undefined'?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key];}} var arguments_=[];var thisProgram='./this.program';var quit_=function(status,toThrow){throw toThrow;};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==='object';ENVIRONMENT_IS_WORKER=typeof importScripts==='function';ENVIRONMENT_IS_NODE=typeof process==='object'&&typeof process.versions==='object'&&typeof process.versions.node==='string';ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(Module['ENVIRONMENT']){throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)');} var scriptDirectory='';function locateFile(path){if(Module['locateFile']){return Module['locateFile'](path,scriptDirectory);} return scriptDirectory+path;} var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require('path').dirname(scriptDirectory)+'/';}else{scriptDirectory=__dirname+'/';} read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require('fs');if(!nodePath)nodePath=require('path');filename=nodePath['normalize'](filename);return nodeFS['readFileSync'](filename,binary?null:'utf8');};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret);} assert(ret.buffer);return ret;};if(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',function(ex){if(!(ex instanceof ExitStatus)){throw ex;}});process['on']('unhandledRejection',abort);quit_=function(status){process['exit'](status);};Module['inspect']=function(){return '[Emscripten Module object]';};}else if(ENVIRONMENT_IS_SHELL){if(typeof read!='undefined'){read_=function shell_read(f){return read(f);};} readBinary=function readBinary(f){var data;if(typeof readbuffer==='function'){return new Uint8Array(readbuffer(f));} data=read(f,'binary');assert(typeof data==='object');return data;};if(typeof scriptArgs!='undefined'){arguments_=scriptArgs;}else if(typeof arguments!='undefined'){arguments_=arguments;} if(typeof quit==='function'){quit_=function(status){quit(status);};} if(typeof print!=='undefined'){if(typeof console==='undefined')console=({});console.log=(print);console.warn=console.error=(typeof printErr!=='undefined'?printErr:print);}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href;}else if(document.currentScript){scriptDirectory=document.currentScript.src;} if(scriptDirectory.indexOf('blob:')!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf('/')+1);}else{scriptDirectory='';} {read_=function shell_read(url){var xhr=new XMLHttpRequest();xhr.open('GET',url,false);xhr.send(null);return xhr.responseText;};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest();xhr.open('GET',url,false);xhr.responseType='arraybuffer';xhr.send(null);return new Uint8Array((xhr.response));};} readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest();xhr.open('GET',url,true);xhr.responseType='arraybuffer';xhr.onload=function xhr_onload(){if(xhr.status==200||(xhr.status==0&&xhr.response)){onload(xhr.response);return;} onerror();};xhr.onerror=onerror;xhr.send(null);};} setWindowTitle=function(title){document.title=title};}else {throw new Error('environment detection error');} var out=Module['print']||console.log.bind(console);var err=Module['printErr']||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key];}} moduleOverrides=null;if(Module['arguments'])arguments_=Module['arguments'];if(!Object.getOwnPropertyDescriptor(Module,'arguments'))Object.defineProperty(Module,'arguments',{configurable:true,get:function(){abort('Module.arguments has been replaced with plain arguments_')}});if(Module['thisProgram'])thisProgram=Module['thisProgram'];if(!Object.getOwnPropertyDescriptor(Module,'thisProgram'))Object.defineProperty(Module,'thisProgram',{configurable:true,get:function(){abort('Module.thisProgram has been replaced with plain thisProgram')}});if(Module['quit'])quit_=Module['quit'];if(!Object.getOwnPropertyDescriptor(Module,'quit'))Object.defineProperty(Module,'quit',{configurable:true,get:function(){abort('Module.quit has been replaced with plain quit_')}});assert(typeof Module['memoryInitializerPrefixURL']==='undefined','Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');assert(typeof Module['pthreadMainPrefixURL']==='undefined','Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');assert(typeof Module['cdInitializerPrefixURL']==='undefined','Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');assert(typeof Module['filePackagePrefixURL']==='undefined','Module.filePackagePrefixURL option was removed, use Module.locateFile instead');assert(typeof Module['read']==='undefined','Module.read option was removed (modify read_ in JS)');assert(typeof Module['readAsync']==='undefined','Module.readAsync option was removed (modify readAsync in JS)');assert(typeof Module['readBinary']==='undefined','Module.readBinary option was removed (modify readBinary in JS)');assert(typeof Module['setWindowTitle']==='undefined','Module.setWindowTitle option was removed (modify setWindowTitle in JS)');assert(typeof Module['TOTAL_MEMORY']==='undefined','Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');if(!Object.getOwnPropertyDescriptor(Module,'read'))Object.defineProperty(Module,'read',{configurable:true,get:function(){abort('Module.read has been replaced with plain read_')}});if(!Object.getOwnPropertyDescriptor(Module,'readAsync'))Object.defineProperty(Module,'readAsync',{configurable:true,get:function(){abort('Module.readAsync has been replaced with plain readAsync')}});if(!Object.getOwnPropertyDescriptor(Module,'readBinary'))Object.defineProperty(Module,'readBinary',{configurable:true,get:function(){abort('Module.readBinary has been replaced with plain readBinary')}});var IDBFS='IDBFS is no longer included by default; build with -lidbfs.js';var PROXYFS='PROXYFS is no longer included by default; build with -lproxyfs.js';var WORKERFS='WORKERFS is no longer included by default; build with -lworkerfs.js';var NODEFS='NODEFS is no longer included by default; build with -lnodefs.js';var STACK_ALIGN=16;var stackSave;var stackRestore;var stackAlloc;stackSave=stackRestore=stackAlloc=function(){abort('cannot use the stack before compiled code is ready to run, and has provided stack access');};function staticAlloc(size){abort('staticAlloc is no longer available at runtime; instead, perform static allocations at compile time (using makeStaticAlloc)');} function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=(ret+size+15)&-16;assert(end<=HEAP8.length,'failure to dynamicAlloc - memory growth etc. is not supported there, call malloc/sbrk directly');HEAP32[DYNAMICTOP_PTR>>2]=end;return ret;} function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor;} function getNativeTypeSize(type){switch(type){case 'i1':case 'i8':return 1;case 'i16':return 2;case 'i32':return 4;case 'i64':return 8;case 'float':return 4;case 'double':return 8;default:{if(type[type.length-1]==='*'){return 4;}else if(type[0]==='i'){var bits=Number(type.substr(1));assert(bits%8===0,'getNativeTypeSize invalid bits '+bits+', type '+type);return bits/8;}else{return 0;}}}} function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text);}} function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={'i':'i32','j':'i64','f':'f32','d':'f64'};var type={parameters:[],results:sig[0]=='v'?[]:[typeNames[sig[0]]]};for(var i=1;i>>0)))+((+((high>>>0)))*4294967296.0)):((+((low>>>0)))+((+((high|0)))*4294967296.0));} function dynCall(sig,ptr,args){if(args&&args.length){assert(args.length===sig.substring(1).replace(/j/g,'--').length);assert(('dynCall_'+sig)in Module,'bad function pointer type - no table for sig \''+sig+'\'');return Module['dynCall_'+sig].apply(null,[ptr].concat(args));}else{assert(sig.length==1);assert(('dynCall_'+sig)in Module,'bad function pointer type - no table for sig \''+sig+'\'');return Module['dynCall_'+sig].call(null,ptr);}} var tempRet0=0;var setTempRet0=function(value){tempRet0=value;};var getTempRet0=function(){return tempRet0;};function getCompilerSetting(name){throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work';} var Runtime={getTempRet0:function(){abort('getTempRet0() is now a top-level function, after removing the Runtime object. Remove "Runtime."')},staticAlloc:function(){abort('staticAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."')},stackAlloc:function(){abort('stackAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."')},};var GLOBAL_BASE=1024;var wasmBinary;if(Module['wasmBinary'])wasmBinary=Module['wasmBinary'];if(!Object.getOwnPropertyDescriptor(Module,'wasmBinary'))Object.defineProperty(Module,'wasmBinary',{configurable:true,get:function(){abort('Module.wasmBinary has been replaced with plain wasmBinary')}});var noExitRuntime;if(Module['noExitRuntime'])noExitRuntime=Module['noExitRuntime'];if(!Object.getOwnPropertyDescriptor(Module,'noExitRuntime'))Object.defineProperty(Module,'noExitRuntime',{configurable:true,get:function(){abort('Module.noExitRuntime has been replaced with plain noExitRuntime')}});if(typeof WebAssembly!=='object'){abort('No WebAssembly support found. Build with -s WASM=0 to target JavaScript instead.');} function setValue(ptr,value,type,noSafe){type=type||'i8';if(type.charAt(type.length-1)==='*')type='i32';switch(type){case 'i1':HEAP8[((ptr)>>0)]=value;break;case 'i8':HEAP8[((ptr)>>0)]=value;break;case 'i16':HEAP16[((ptr)>>1)]=value;break;case 'i32':HEAP32[((ptr)>>2)]=value;break;case 'i64':(tempI64=[value>>>0,(tempDouble=value,(+(Math_abs(tempDouble)))>=1.0?(tempDouble>0.0?((Math_min((+(Math_floor((tempDouble)/4294967296.0))),4294967295.0))|0)>>>0:(~~((+(Math_ceil((tempDouble-+(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0):0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]);break;case 'float':HEAPF32[((ptr)>>2)]=value;break;case 'double':HEAPF64[((ptr)>>3)]=value;break;default:abort('invalid type for setValue: '+type);}} function getValue(ptr,type,noSafe){type=type||'i8';if(type.charAt(type.length-1)==='*')type='i32';switch(type){case 'i1':return HEAP8[((ptr)>>0)];case 'i8':return HEAP8[((ptr)>>0)];case 'i16':return HEAP16[((ptr)>>1)];case 'i32':return HEAP32[((ptr)>>2)];case 'i64':return HEAP32[((ptr)>>2)];case 'float':return HEAPF32[((ptr)>>2)];case 'double':return HEAPF64[((ptr)>>3)];default:abort('invalid type for getValue: '+type);} return null;} var wasmMemory;var wasmTable=new WebAssembly.Table({'initial':1821,'maximum':1821+0,'element':'anyfunc'});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort('Assertion failed: '+text);}} function getCFunc(ident){var func=Module['_'+ident];assert(func,'Cannot call unknown function '+ident+', make sure it is exported');return func;} function ccall(ident,returnType,argTypes,args,opts){var toC={'string':function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len);} return ret;},'array':function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret;}};function convertReturnValue(ret){if(returnType==='string')return UTF8ToString(ret);if(returnType==='boolean')return Boolean(ret);return ret;} var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=='array','Return type should not be "array".');if(args){for(var i=0;i>2)]=0;} stop=ret+size;while(ptr>0)]=0;} return ret;} if(singleType==='i8'){if(slab.subarray||slab.slice){HEAPU8.set((slab),ret);}else{HEAPU8.set(new Uint8Array(slab),ret);} return ret;} var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr));}else{var str='';while(idx>10),0xDC00|(ch&0x3FF));}}} return str;} function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):'';} function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0)) return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=0xD800&&u<=0xDFFF){var u1=str.charCodeAt(++i);u=0x10000+((u&0x3FF)<<10)|(u1&0x3FF);} if(u<=0x7F){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u;}else if(u<=0x7FF){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=0xC0|(u>>6);outU8Array[outIdx++]=0x80|(u&63);}else if(u<=0xFFFF){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=0xE0|(u>>12);outU8Array[outIdx++]=0x80|((u>>6)&63);outU8Array[outIdx++]=0x80|(u&63);}else{if(outIdx+3>=endIdx)break;if(u>=0x200000)warnOnce('Invalid Unicode code point 0x'+u.toString(16)+' encountered when serializing a JS string to an UTF-8 string on the asm.js/wasm heap! (Valid unicode code points should be in range 0-0x1FFFFF).');outU8Array[outIdx++]=0xF0|(u>>18);outU8Array[outIdx++]=0x80|((u>>12)&63);outU8Array[outIdx++]=0x80|((u>>6)&63);outU8Array[outIdx++]=0x80|(u&63);}} outU8Array[outIdx]=0;return outIdx-startIdx;} function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite=='number','stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);} function lengthBytesUTF8(str){var len=0;for(var i=0;i=0xD800&&u<=0xDFFF)u=0x10000+((u&0x3FF)<<10)|(str.charCodeAt(++i)&0x3FF);if(u<=0x7F)++len;else if(u<=0x7FF)len+=2;else if(u<=0xFFFF)len+=3;else len+=4;} return len;} function AsciiToString(ptr){var str='';while(1){var ch=HEAPU8[((ptr++)>>0)];if(!ch)return str;str+=String.fromCharCode(ch);}} function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false);} var UTF16Decoder=typeof TextDecoder!=='undefined'?new TextDecoder('utf-16le'):undefined;function UTF16ToString(ptr){assert(ptr%2==0,'Pointer passed to UTF16ToString must be aligned to two bytes!');var endPtr=ptr;var idx=endPtr>>1;while(HEAP16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));}else{var i=0;var str='';while(1){var codeUnit=HEAP16[(((ptr)+(i*2))>>1)];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit);}}} function stringToUTF16(str,outPtr,maxBytesToWrite){assert(outPtr%2==0,'Pointer passed to stringToUTF16 must be aligned to two bytes!');assert(typeof maxBytesToWrite=='number','stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');if(maxBytesToWrite===undefined){maxBytesToWrite=0x7FFFFFFF;} if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=(maxBytesToWrite>1)]=codeUnit;outPtr+=2;} HEAP16[((outPtr)>>1)]=0;return outPtr-startPtr;} function lengthBytesUTF16(str){return str.length*2;} function UTF32ToString(ptr){assert(ptr%4==0,'Pointer passed to UTF32ToString must be aligned to four bytes!');var i=0;var str='';while(1){var utf32=HEAP32[(((ptr)+(i*4))>>2)];if(utf32==0) return str;++i;if(utf32>=0x10000){var ch=utf32-0x10000;str+=String.fromCharCode(0xD800|(ch>>10),0xDC00|(ch&0x3FF));}else{str+=String.fromCharCode(utf32);}}} function stringToUTF32(str,outPtr,maxBytesToWrite){assert(outPtr%4==0,'Pointer passed to stringToUTF32 must be aligned to four bytes!');assert(typeof maxBytesToWrite=='number','stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');if(maxBytesToWrite===undefined){maxBytesToWrite=0x7FFFFFFF;} if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=0xD800&&codeUnit<=0xDFFF){var trailSurrogate=str.charCodeAt(++i);codeUnit=0x10000+((codeUnit&0x3FF)<<10)|(trailSurrogate&0x3FF);} HEAP32[((outPtr)>>2)]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break;} HEAP32[((outPtr)>>2)]=0;return outPtr-startPtr;} function lengthBytesUTF32(str){var len=0;for(var i=0;i=0xD800&&codeUnit<=0xDFFF)++i;len+=4;} return len;} function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret;} function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret;} function writeStringToMemory(string,buffer,dontAddNull){warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end];} stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar;} function writeArrayToMemory(array,buffer){assert(array.length>=0,'writeArrayToMemory array must have a length (should be an array or typed array)') HEAP8.set(array,buffer);} function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0)]=str.charCodeAt(i);} if(!dontAddNull)HEAP8[((buffer)>>0)]=0;} var PAGE_SIZE=16384;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-(x%multiple);} return x;} var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module['HEAP8']=HEAP8=new Int8Array(buf);Module['HEAP16']=HEAP16=new Int16Array(buf);Module['HEAP32']=HEAP32=new Int32Array(buf);Module['HEAPU8']=HEAPU8=new Uint8Array(buf);Module['HEAPU16']=HEAPU16=new Uint16Array(buf);Module['HEAPU32']=HEAPU32=new Uint32Array(buf);Module['HEAPF32']=HEAPF32=new Float32Array(buf);Module['HEAPF64']=HEAPF64=new Float64Array(buf);} var STATIC_BASE=1024,STACK_BASE=19593120,STACKTOP=STACK_BASE,STACK_MAX=14350240,DYNAMIC_BASE=19593120,DYNAMICTOP_PTR=14350080;assert(STACK_BASE%16===0,'stack must start aligned');assert(DYNAMIC_BASE%16===0,'heap must start aligned');var TOTAL_STACK=5242880;if(Module['TOTAL_STACK'])assert(TOTAL_STACK===Module['TOTAL_STACK'],'the stack size can no longer be determined at runtime') var INITIAL_INITIAL_MEMORY=Module['INITIAL_MEMORY']||20971520;if(!Object.getOwnPropertyDescriptor(Module,'INITIAL_MEMORY'))Object.defineProperty(Module,'INITIAL_MEMORY',{configurable:true,get:function(){abort('Module.INITIAL_MEMORY has been replaced with plain INITIAL_INITIAL_MEMORY')}});assert(INITIAL_INITIAL_MEMORY>=TOTAL_STACK,'INITIAL_MEMORY should be larger than TOTAL_STACK, was '+INITIAL_INITIAL_MEMORY+'! (TOTAL_STACK='+TOTAL_STACK+')');assert(typeof Int32Array!=='undefined'&&typeof Float64Array!=='undefined'&&Int32Array.prototype.subarray!==undefined&&Int32Array.prototype.set!==undefined,'JS engine does not provide full typed array support');if(Module['wasmMemory']){wasmMemory=Module['wasmMemory'];}else {wasmMemory=new WebAssembly.Memory({'initial':INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,'maximum':INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE});} if(wasmMemory){buffer=wasmMemory.buffer;} INITIAL_INITIAL_MEMORY=buffer.byteLength;assert(INITIAL_INITIAL_MEMORY%WASM_PAGE_SIZE===0);updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function writeStackCookie(){assert((STACK_MAX&3)==0);HEAPU32[(STACK_MAX>>2)+1]=0x2135467;HEAPU32[(STACK_MAX>>2)+2]=0x89BACDFE;HEAP32[0]=0x63736d65;} function checkStackCookie(){var cookie1=HEAPU32[(STACK_MAX>>2)+1];var cookie2=HEAPU32[(STACK_MAX>>2)+2];if(cookie1!=0x2135467||cookie2!=0x89BACDFE){abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x'+cookie2.toString(16)+' '+cookie1.toString(16));} if(HEAP32[0]!==0x63736d65)abort('Runtime error: The application has corrupted its heap memory area (address zero)!');} function abortStackOverflow(allocSize){abort('Stack overflow! Attempted to allocate '+allocSize+' bytes on the stack, but stack has only '+(STACK_MAX-stackSave()+allocSize)+' bytes available!');} (function(){var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=0x6373;if(h8[0]!==0x73||h8[1]!==0x63)throw 'Runtime error: expected the system to be little-endian!';})();function abortFnPtrError(ptr,sig){abort("Invalid function pointer "+ptr+" called with signature '"+sig+"'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). Build with ASSERTIONS=2 for more info.");} function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=='function'){callback();continue;} var func=callback.func;if(typeof func==='number'){if(callback.arg===undefined){Module['dynCall_v'](func);}else{Module['dynCall_vi'](func,callback.arg);}}else{func(callback.arg===undefined?null:callback.arg);}}} var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module['preRun']){if(typeof Module['preRun']=='function')Module['preRun']=[Module['preRun']];while(Module['preRun'].length){addOnPreRun(Module['preRun'].shift());}} callRuntimeCallbacks(__ATPRERUN__);} function initRuntime(){checkStackCookie();assert(!runtimeInitialized);runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__);} function preMain(){checkStackCookie();FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__);} function exitRuntime(){checkStackCookie();runtimeExited=true;} function postRun(){checkStackCookie();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 addOnPreMain(cb){__ATMAIN__.unshift(cb);} function addOnExit(cb){} function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb);} function unSign(value,bits,ignore){if(value>=0){return value;} return bits<=32?2*Math.abs(1<<(bits-1))+value:Math.pow(2,bits)+value;} function reSign(value,bits,ignore){if(value<=0){return value;} var half=bits<=32?Math.abs(1<<(bits-1)):Math.pow(2,bits-1);if(value>=half&&(bits<=32||value>half)){value=-2*half+value;} return value;} assert(Math.imul,'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');assert(Math.fround,'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');assert(Math.clz32,'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');assert(Math.trunc,'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function getUniqueRunDependency(id){var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random();}} function addRunDependency(id){runDependencies++;if(Module['monitorRunDependencies']){Module['monitorRunDependencies'](runDependencies);} if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!=='undefined'){runDependencyWatcher=setInterval(function(){if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return;} var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err('still waiting on run dependencies:');} err('dependency: '+dep);} if(shown){err('(end of list)');}},10000);}}else{err('warning: run dependency added without ID');}} function removeRunDependency(id){runDependencies--;if(Module['monitorRunDependencies']){Module['monitorRunDependencies'](runDependencies);} if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id];}else{err('warning: run dependency removed without ID');} if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null;} if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback();}}} Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module['onAbort']){Module['onAbort'](what);} what+='';out(what);err(what);ABORT=true;EXITSTATUS=1;var output='abort('+what+') at '+stackTrace();what=output;throw new WebAssembly.RuntimeError(what);} var memoryInitializer=null;var dataURIPrefix='data:application/octet-stream;base64,';function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0;} var wasmBinaryFile='sm64.us.f3dex2e.wasm';if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile);} function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary);} if(readBinary){return readBinary(wasmBinaryFile);}else{throw "both async and sync fetching of the wasm failed";}} catch(err){abort(err);}} function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==='function'){return fetch(wasmBinaryFile,{credentials:'same-origin'}).then(function(response){if(!response['ok']){throw "failed to load wasm binary file at '"+wasmBinaryFile+"'";} return response['arrayBuffer']();}).catch(function(){return getBinary();});} return new Promise(function(resolve,reject){resolve(getBinary());});} function createWasm(){var info={'env':asmLibraryArg,'wasi_snapshot_preview1':asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module['asm']=exports;removeRunDependency('wasm-instantiate');} addRunDependency('wasm-instantiate');var trueModule=Module;function receiveInstantiatedSource(output){assert(Module===trueModule,'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?');trueModule=null;receiveInstance(output['instance']);} function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info);}).then(receiver,function(reason){err('failed to asynchronously prepare wasm: '+reason);abort(reason);});} function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==='function'&&!isDataURI(wasmBinaryFile)&&typeof fetch==='function'){fetch(wasmBinaryFile,{credentials:'same-origin'}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err('wasm streaming compile failed: '+reason);err('falling back to ArrayBuffer instantiation');instantiateArrayBuffer(receiveInstantiatedSource);});});}else{return instantiateArrayBuffer(receiveInstantiatedSource);}} if(Module['instantiateWasm']){try{var exports=Module['instantiateWasm'](info,receiveInstance);return exports;}catch(e){err('Module.instantiateWasm callback failed with error: '+e);return false;}} instantiateAsync();return{};} var tempDouble;var tempI64;var ASM_CONSTS={3069901:function($0){requestAnimationFrame(function(time){dynCall("vd",$0,[time]);})},3069970:function($0){var s=localStorage.sm64_save_file;if(s&&s.length===684){try{var binary=atob(s);if(binary.length===512){for(var i=0;i<512;i++){HEAPU8[$0+i]=binary.charCodeAt(i);}return 1;}}catch(e){}}return 0;},3070210:function($0){var str="";for(var i=0;i<512;i++){str+=String.fromCharCode(HEAPU8[$0+i]);}localStorage.sm64_save_file=btoa(str);},8775252:function($0,$1,$2){var w=$0;var h=$1;var pixels=$2;if(!Module['SDL2'])Module['SDL2']={};var SDL2=Module['SDL2'];if(SDL2.ctxCanvas!==Module['canvas']){SDL2.ctx=Module['createContext'](Module['canvas'],false,true);SDL2.ctxCanvas=Module['canvas'];}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx;}var data=SDL2.image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=='undefined'&&data instanceof CanvasPixelArray){num=data.length;while(dst>8)&0xff;data[dst+2]=(val>>16)&0xff;data[dst+3]=0xff;src++;dst+=4;}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i>2;var dst=0;var num;if(typeof CanvasPixelArray!=='undefined'&&data instanceof CanvasPixelArray){num=data.length;while(dst>8)&0xff;data[dst+2]=(val>>16)&0xff;data[dst+3]=(val>>24)&0xff;src++;dst+=4;}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num));}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf;},8777696:function($0){if(Module['canvas']){Module['canvas'].style['cursor']=UTF8ToString($0);}return 0;},8777789:function(){if(Module['canvas']){Module['canvas'].style['cursor']='none';}},8779014:function(){return screen.width;},8779041:function(){return screen.height;},8779069:function(){return window.innerWidth;},8779101:function(){return window.innerHeight;},8779179:function($0){if(typeof Module['setWindowTitle']!=='undefined'){Module['setWindowTitle'](UTF8ToString($0));}return 0;},8779333:function(){if(typeof(AudioContext)!=='undefined'){return 1;}else if(typeof(webkitAudioContext)!=='undefined'){return 1;}return 0;},8779499:function(){if((typeof(navigator.mediaDevices)!=='undefined')&&(typeof(navigator.mediaDevices.getUserMedia)!=='undefined')){return 1;}else if(typeof(navigator.webkitGetUserMedia)!=='undefined'){return 1;}return 0;},8779725:function($0){if(typeof(Module['SDL2'])==='undefined'){Module['SDL2']={};}var SDL2=Module['SDL2'];if(!$0){SDL2.audio={};}else{SDL2.capture={};}if(!SDL2.audioContext){if(typeof(AudioContext)!=='undefined'){SDL2.audioContext=new AudioContext();}else if(typeof(webkitAudioContext)!=='undefined'){SDL2.audioContext=new webkitAudioContext();}}return SDL2.audioContext===undefined?-1:0;},8780208:function(){var SDL2=Module['SDL2'];return SDL2.audioContext.sampleRate;},8780278:function($0,$1,$2,$3){var SDL2=Module['SDL2'];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined;}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if((SDL2===undefined)||(SDL2.capture===undefined)){return;}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0.0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall('vi',$2,[$3]);};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream;};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0.0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall('vi',$2,[$3]);};SDL2.capture.silenceTimer=setTimeout(silence_callback,($1/SDL2.audioContext.sampleRate)*1000);if((navigator.mediaDevices!==undefined)&&(navigator.mediaDevices.getUserMedia!==undefined)){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone);}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone);}},8781930:function($0,$1,$2,$3){var SDL2=Module['SDL2'];SDL2.audio.scriptProcessorNode=SDL2.audioContext['createScriptProcessor']($1,0,$0);SDL2.audio.scriptProcessorNode['onaudioprocess']=function(e){if((SDL2===undefined)||(SDL2.audio===undefined)){return;}SDL2.audio.currentOutputBuffer=e['outputBuffer'];dynCall('vi',$2,[$3]);};SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']);},8782340:function($0,$1){var SDL2=Module['SDL2'];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c>2];}}},8783425:function($0){var SDL2=Module['SDL2'];if($0){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer);}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i>2)]=value;else err('failed to set errno from JS');return value;} var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1);},normalizeArray:function(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:function(path){var isAbsolute=path.charAt(0)==='/',trailingSlash=path.substr(-1)==='/';path=PATH.normalizeArray(path.split('/').filter(function(p){return!!p;}),!isAbsolute).join('/');if(!path&&!isAbsolute){path='.';} if(path&&trailingSlash){path+='/';} return(isAbsolute?'/':'')+path;},dirname:function(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:function(path){if(path==='/')return '/';var lastSlash=path.lastIndexOf('/');if(lastSlash===-1)return path;return path.substr(lastSlash+1);},extname:function(path){return PATH.splitPath(path)[3];},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join('/'));},join2:function(l,r){return PATH.normalize(l+'/'+r);}};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.charAt(0)==='/';} resolvedPath=PATH.normalizeArray(resolvedPath.split('/').filter(function(p){return!!p;}),!resolvedAbsolute).join('/');return((resolvedAbsolute?'/':'')+resolvedPath)||'.';},relative:function(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;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);}},flush: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);}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[];}}}};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;} return node;},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,(prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return;},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return;} if(!node.contents||node.contents.subarray){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;return;} if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset);}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32);} var parts=PATH.normalizeArray(path.split('/').filter(function(p){return!!p;}),false);var current=FS.root;var current_path='/';for(var i=0;i40){throw new FS.ErrnoError(32);}}}} return{path:current_path,node:current};},getPath:function(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:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length;},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node;},hashRemoveNode:function(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:function(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:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node;},destroyNode:function(node){FS.hashRemoveNode(node);},isRoot:function(node){return node===node.parent;},isMountpoint:function(node){return!!node.mounted;},isFile:function(mode){return(mode&61440)===32768;},isDir:function(mode){return(mode&61440)===16384;},isLink:function(mode){return(mode&61440)===40960;},isChrdev:function(mode){return(mode&61440)===8192;},isBlkdev:function(mode){return(mode&61440)===24576;},isFIFO:function(mode){return(mode&61440)===4096;},isSocket:function(mode){return(mode&49152)===49152;},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==='undefined'){throw new Error('Unknown file open mode: '+str);} return flags;},flagsToPermissionString:function(flag){var perms=['r','w','rw'][flag&3];if((flag&512)){perms+='w';} return perms;},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0;} if(perms.indexOf('r')!==-1&&!(node.mode&292)){return 2;}else if(perms.indexOf('w')!==-1&&!(node.mode&146)){return 2;}else if(perms.indexOf('x')!==-1&&!(node.mode&73)){return 2;} return 0;},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,'x');if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0;},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20;}catch(e){} return FS.nodePermissions(dir,'wx');},mayDelete:function(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:function(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:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd;}} throw new FS.ErrnoError(33);},getStream:function(fd){return FS.streams[fd];},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};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);}}};} var newStream=new FS.FSStream();for(var p in stream){newStream[p]=stream[p];} stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream;},closeStream:function(fd){FS.streams[fd]=null;},chrdev_stream_ops:{open:function(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:function(){throw new FS.ErrnoError(70);}},major:function(dev){return((dev)>>8);},minor:function(dev){return((dev)&0xff);},makedev:function(ma,mi){return((ma)<<8|(mi));},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops};},getDevice:function(dev){return FS.devices[dev];},getMounts:function(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:function(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){assert(FS.syncFSRequests>0);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(function(mount){if(!mount.type.syncfs){return done(null);} mount.type.syncfs(mount,populate,done);});},mount:function(type,opts,mountpoint){if(typeof type==='string'){throw type;} 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:function(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(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current);} current=next;}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1);},lookup:function(parent,name){return parent.node_ops.lookup(parent,name);},mknod:function(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:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0);},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0);},mkdirTree:function(path,mode){var dirs=path.split('/');var d='';for(var i=0;ithis.length-1||idx<0){return undefined;} var chunkOffset=idx%this.chunkSize;var chunkNum=(idx/this.chunkSize)|0;return this.getter(chunkNum)[chunkOffset];};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=(function(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);if(typeof Uint8Array!='undefined')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||[]));}else{return intArrayFromString(xhr.responseText||'',true);}});var lazyArray=this;lazyArray.setDataGetter(function(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(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29);} return fn.apply(null,arguments);};});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29);} var contents=stream.node.contents;if(position>=contents.length) return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2)]=stat.dev;HEAP32[(((buf)+(4))>>2)]=0;HEAP32[(((buf)+(8))>>2)]=stat.ino;HEAP32[(((buf)+(12))>>2)]=stat.mode;HEAP32[(((buf)+(16))>>2)]=stat.nlink;HEAP32[(((buf)+(20))>>2)]=stat.uid;HEAP32[(((buf)+(24))>>2)]=stat.gid;HEAP32[(((buf)+(28))>>2)]=stat.rdev;HEAP32[(((buf)+(32))>>2)]=0;(tempI64=[stat.size>>>0,(tempDouble=stat.size,(+(Math_abs(tempDouble)))>=1.0?(tempDouble>0.0?((Math_min((+(Math_floor((tempDouble)/4294967296.0))),4294967295.0))|0)>>>0:(~~((+(Math_ceil((tempDouble-+(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>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;HEAP32[(((buf)+(56))>>2)]=(stat.atime.getTime()/1000)|0;HEAP32[(((buf)+(60))>>2)]=0;HEAP32[(((buf)+(64))>>2)]=(stat.mtime.getTime()/1000)|0;HEAP32[(((buf)+(68))>>2)]=0;HEAP32[(((buf)+(72))>>2)]=(stat.ctime.getTime()/1000)|0;HEAP32[(((buf)+(76))>>2)]=0;(tempI64=[stat.ino>>>0,(tempDouble=stat.ino,(+(Math_abs(tempDouble)))>=1.0?(tempDouble>0.0?((Math_min((+(Math_floor((tempDouble)/4294967296.0))),4294967295.0))|0)>>>0:(~~((+(Math_ceil((tempDouble-+(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0):0)],HEAP32[(((buf)+(80))>>2)]=tempI64[0],HEAP32[(((buf)+(84))>>2)]=tempI64[1]);return 0;},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags);},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==='/')path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0;},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28;} FS.mknod(path,mode,dev);return 0;},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len;},doAccess:function(path,amode){if(amode&~7){return-28;} var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44;} var perms='';if(amode&4)perms+='r';if(amode&2)perms+='w';if(amode&1)perms+='x';if(perms&&FS.nodePermissions(node,perms)){return-2;} return 0;},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd;},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2)];var len=HEAP32[(((iov)+(i*8+4))>>2)];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2)];var len=HEAP32[(((iov)+(i*8+4))>>2)];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;} return ret;},varargs:undefined,get:function(){assert(SYSCALLS.varargs!=undefined);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;},get64:function(low,high){if(low>=0)assert(high===0);else assert(high===-1);return low;}};function ___syscall221(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.open(stream.path,stream.flags,0,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 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[(((arg)+(offset))>>1)]=2;return 0;} case 13:case 14:return 0;case 16:case 8:return-28;case 9:___setErrNo(28);return-1;default:{return-28;}}}catch(e){if(typeof FS==='undefined'||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}} function ___syscall5(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd;}catch(e){if(typeof FS==='undefined'||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}} function ___syscall54(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:abort('bad ioctl syscall '+op);}}catch(e){if(typeof FS==='undefined'||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}} function _abort(){abort();} function _atexit(func,arg){warnOnce('atexit() called, but EXIT_RUNTIME is not set, so atexits() will not be called. set EXIT_RUNTIME to 1 (see the FAQ)');__ATEXIT__.unshift({func:func,arg:arg});} var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process['hrtime']();return t[0]*1e3+t[1]/1e6;};}else if(typeof dateNow!=='undefined'){_emscripten_get_now=dateNow;}else _emscripten_get_now=function(){return performance.now();};var _emscripten_get_now_is_monotonic=true;;function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now();}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now();}else{___setErrNo(28);return-1;} HEAP32[((tp)>>2)]=(now/1000)|0;HEAP32[(((tp)+(4))>>2)]=((now%1000)*1000*1000)|0;return 0;} function _dlclose(handle){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking");} function _dlerror(){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking");} function _dlsym(handle,symbol){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking");} function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){console.error('emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up.');return 1;} 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=function(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;} function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;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=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=='undefined'){browserIterationFunc=function(){Module['dynCall_vi'](func,arg);};}else{browserIterationFunc=function(){Module['dynCall_v'](func);};} var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){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+0.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9;}} console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+' ms');Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return;}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now();} if(Browser.mainLoop.method==='timeout'&&Module.ctx){warnOnce('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!');Browser.mainLoop.method='';} Browser.mainLoop.runIter(browserIterationFunc);checkStackCookie();if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1000.0/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler();} if(simulateInfiniteLoop){throw 'unwind';}}var Browser={mainLoop:{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;_emscripten_set_main_loop(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=6){var curr=(leftchar>>(leftbits-6))&0x3f;leftbits-=6;ret+=BASE[curr];}} if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD;}else if(leftbits==4){ret+=BASE[(leftchar&0xf)<<2];ret+=PAD;} return ret;} audio.src='data:audio/x-'+name.substr(-3)+';base64,'+encode64(byteArray);finish(audio);};audio.src=url;Browser.safeSetTimeout(function(){finish(audio);},10000);}else{return fail();}};Module['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']||function(){};canvas.exitPointerLock=document['exitPointerLock']||document['mozExitPointerLock']||document['webkitExitPointerLock']||document['msExitPointerLock']||function(){};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",function(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:1,};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(function(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']?function(){canvasContainer['webkitRequestFullscreen'](Element['ALLOW_KEYBOARD_INPUT'])}:null)||(canvasContainer['webkitRequestFullScreen']?function(){canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT'])}:null);canvasContainer.requestFullscreen();},requestFullScreen:function(){abort('Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)');},exitFullscreen:function(){if(!Browser.isFullscreen){return false;} var CFS=document['exitFullscreen']||document['cancelFullScreen']||document['mozCancelFullScreen']||document['msExitFullscreen']||document['webkitCancelFullScreen']||(function(){});CFS.apply(document,[]);return true;},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1000/60;}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1000/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);},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments);};},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false;},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func();});}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func();}else{Browser.queuedAsyncCallbacks.push(func);}});},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func();}else{Browser.queuedAsyncCallbacks.push(func);}},timeout);},safeSetInterval:function(func,timeout){noExitRuntime=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func();}},timeout);},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);assert((typeof scrollX!=='undefined')&&(typeof scrollY!=='undefined'),'Unable to retrieve scroll position, mouse positions likely broken.');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;}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency('al '+url):'';readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep);},function(event){if(onerror){onerror();}else{throw 'Loading data file "'+url+'" failed.';}});if(dep)addRunDependency(dep);},resizeListeners:[],updateResizeListeners:function(){var canvas=Module['canvas'];Browser.resizeListeners.forEach(function(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|0x00800000;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&~0x00800000;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==0x3021){var alphaSize=HEAP32[(((attribList)+(4))>>2)];EGL.contextAttributes.alpha=(alphaSize>0);}else if(param==0x3025){var depthSize=HEAP32[(((attribList)+(4))>>2)];EGL.contextAttributes.depth=(depthSize>0);}else if(param==0x3026){var stencilSize=HEAP32[(((attribList)+(4))>>2)];EGL.contextAttributes.stencil=(stencilSize>0);}else if(param==0x3031){var samples=HEAP32[(((attribList)+(4))>>2)];EGL.contextAttributes.antialias=(samples>0);}else if(param==0x3032){var samples=HEAP32[(((attribList)+(4))>>2)];EGL.contextAttributes.antialias=(samples==1);}else if(param==0x3100){var requestedPriority=HEAP32[(((attribList)+(4))>>2)];EGL.contextAttributes.lowLatency=(requestedPriority!=0x3103);}else if(param==0x3038){break;} attribList+=8;}} if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(0x300C);return 0;} if(numConfigs){HEAP32[((numConfigs)>>2)]=1;} if(config&&config_size>0){HEAP32[((config)>>2)]=62002;} EGL.setErrorCode(0x3000);return 1;}};function _eglBindAPI(api){if(api==0x30A0){EGL.setErrorCode(0x3000);return 1;}else{EGL.setErrorCode(0x300C);return 0;}} function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);} function __webgl_acquireInstancedArraysExtension(ctx){var ext=ctx.getExtension('ANGLE_instanced_arrays');if(ext){ctx['vertexAttribDivisor']=function(index,divisor){ext['vertexAttribDivisorANGLE'](index,divisor);};ctx['drawArraysInstanced']=function(mode,first,count,primcount){ext['drawArraysInstancedANGLE'](mode,first,count,primcount);};ctx['drawElementsInstanced']=function(mode,count,type,indices,primcount){ext['drawElementsInstancedANGLE'](mode,count,type,indices,primcount);};}} function __webgl_acquireVertexArrayObjectExtension(ctx){var ext=ctx.getExtension('OES_vertex_array_object');if(ext){ctx['createVertexArray']=function(){return ext['createVertexArrayOES']();};ctx['deleteVertexArray']=function(vao){ext['deleteVertexArrayOES'](vao);};ctx['bindVertexArray']=function(vao){ext['bindVertexArrayOES'](vao);};ctx['isVertexArray']=function(vao){return ext['isVertexArrayOES'](vao);};}} function __webgl_acquireDrawBuffersExtension(ctx){var ext=ctx.getExtension('WEBGL_draw_buffers');if(ext){ctx['drawBuffers']=function(n,bufs){ext['drawBuffersWEBGL'](n,bufs);};}}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){var miniTempFloatBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2)]:-1;source+=UTF8ToString(HEAP32[(((string)+(i*4))>>2)],len<0?undefined:len);} return source;},createContext:function(canvas,webGLContextAttributes){var ctx=(canvas.getContext("webgl",webGLContextAttributes));if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle;},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);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;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null;},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){__webgl_acquireInstancedArraysExtension(GLctx);__webgl_acquireVertexArrayObjectExtension(GLctx);__webgl_acquireDrawBuffersExtension(GLctx);} GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","EXT_texture_norm16","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2","WEBKIT_WEBGL_compressed_texture_pvrtc"];function shouldEnableAutomatically(extension){var ret=false;automaticallyEnabledExtensions.forEach(function(include){if(extension.indexOf(include)!=-1){ret=true;}});return ret;} var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext);}});},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,0x8B86);for(var i=0;i>2)];if(param==0x3098){glesContextVersion=HEAP32[(((contextAttribs)+(4))>>2)];}else if(param==0x3038){break;}else{EGL.setErrorCode(0x3004);return 0;} contextAttribs+=8;} if(glesContextVersion!=2){EGL.setErrorCode(0x3005);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(0x3000);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004;}else{EGL.setErrorCode(0x3009);return 0;}} function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} if(config!=62002){EGL.setErrorCode(0x3005);return 0;} EGL.setErrorCode(0x3000);return 62006;} function _eglDestroyContext(display,context){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} if(context!=62004){EGL.setErrorCode(0x3006);return 0;} GL.deleteContext(EGL.context);EGL.setErrorCode(0x3000);if(EGL.currentContext==context){EGL.currentContext=0;} return 1;} function _eglDestroySurface(display,surface){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} if(surface!=62006){EGL.setErrorCode(0x300D);return 1;} if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0;} if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0;} EGL.setErrorCode(0x3000);return 1;} function _eglGetConfigAttrib(display,config,attribute,value){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} if(config!=62002){EGL.setErrorCode(0x3005);return 0;} if(!value){EGL.setErrorCode(0x300C);return 0;} EGL.setErrorCode(0x3000);switch(attribute){case 0x3020:HEAP32[((value)>>2)]=EGL.contextAttributes.alpha?32:24;return 1;case 0x3021:HEAP32[((value)>>2)]=EGL.contextAttributes.alpha?8:0;return 1;case 0x3022:HEAP32[((value)>>2)]=8;return 1;case 0x3023:HEAP32[((value)>>2)]=8;return 1;case 0x3024:HEAP32[((value)>>2)]=8;return 1;case 0x3025:HEAP32[((value)>>2)]=EGL.contextAttributes.depth?24:0;return 1;case 0x3026:HEAP32[((value)>>2)]=EGL.contextAttributes.stencil?8:0;return 1;case 0x3027:HEAP32[((value)>>2)]=0x3038;return 1;case 0x3028:HEAP32[((value)>>2)]=62002;return 1;case 0x3029:HEAP32[((value)>>2)]=0;return 1;case 0x302A:HEAP32[((value)>>2)]=4096;return 1;case 0x302B:HEAP32[((value)>>2)]=16777216;return 1;case 0x302C:HEAP32[((value)>>2)]=4096;return 1;case 0x302D:HEAP32[((value)>>2)]=0;return 1;case 0x302E:HEAP32[((value)>>2)]=0;return 1;case 0x302F:HEAP32[((value)>>2)]=0x3038;return 1;case 0x3031:HEAP32[((value)>>2)]=EGL.contextAttributes.antialias?4:0;return 1;case 0x3032:HEAP32[((value)>>2)]=EGL.contextAttributes.antialias?1:0;return 1;case 0x3033:HEAP32[((value)>>2)]=0x4;return 1;case 0x3034:HEAP32[((value)>>2)]=0x3038;return 1;case 0x3035:case 0x3036:case 0x3037:HEAP32[((value)>>2)]=-1;return 1;case 0x3039:case 0x303A:HEAP32[((value)>>2)]=0;return 1;case 0x303B:HEAP32[((value)>>2)]=0;return 1;case 0x303C:HEAP32[((value)>>2)]=1;return 1;case 0x303D:case 0x303E:HEAP32[((value)>>2)]=0;return 1;case 0x303F:HEAP32[((value)>>2)]=0x308E;return 1;case 0x3040:HEAP32[((value)>>2)]=0x4;return 1;case 0x3042:HEAP32[((value)>>2)]=0;return 1;default:EGL.setErrorCode(0x3004);return 0;}} function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(0x3000);return 62000;} function _eglGetError(){return EGL.errorCode;} function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_);} function _eglInitialize(display,majorVersion,minorVersion){if(display==62000){if(majorVersion){HEAP32[((majorVersion)>>2)]=1;} if(minorVersion){HEAP32[((minorVersion)>>2)]=4;} EGL.defaultDisplayInitialized=true;EGL.setErrorCode(0x3000);return 1;} else{EGL.setErrorCode(0x3008);return 0;}} function _eglMakeCurrent(display,draw,read,context){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} if(context!=0&&context!=62004){EGL.setErrorCode(0x3006);return 0;} if((read!=0&&read!=62006)||(draw!=0&&draw!=62006)){EGL.setErrorCode(0x300D);return 0;} GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(0x3000);return 1;} function _eglQueryString(display,name){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} EGL.setErrorCode(0x3000);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 0x3053:ret=allocateUTF8("Emscripten");break;case 0x3054:ret=allocateUTF8("1.4 Emscripten EGL");break;case 0x3055:ret=allocateUTF8("");break;case 0x308D:ret=allocateUTF8("OpenGL_ES");break;default:EGL.setErrorCode(0x300C);return 0;} EGL.stringCache[name]=ret;return ret;} function _eglSwapBuffers(){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(0x3001);}else if(!Module.ctx){EGL.setErrorCode(0x3002);}else if(Module.ctx.isContextLost()){EGL.setErrorCode(0x300E);}else{EGL.setErrorCode(0x3000);return 1;} return 0;} function _eglSwapInterval(display,interval){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(0x3000);return 1;} function _eglTerminate(display){if(display!=62000){EGL.setErrorCode(0x3008);return 0;} EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(0x3000);return 1;} function _eglWaitClient(){EGL.setErrorCode(0x3000);return 1;}function _eglWaitGL(){return _eglWaitClient();} function _eglWaitNative(nativeEngineId){EGL.setErrorCode(0x3000);return 1;} var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,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.precedence>2)]=canvas.width;HEAP32[((height)>>2)]=canvas.height;}function __get_canvas_element_size(target){var stackTop=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stackAlloc(target.id.length+1);stringToUTF8(target.id,targetInt,target.id.length+1);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[((w)>>2)],HEAP32[((h)>>2)]];stackRestore(stackTop);return size;} 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 __set_canvas_element_size(target,width,height){if(!target.controlTransferredOffscreen){target.width=width;target.height=height;}else{var stackTop=stackSave();var targetInt=stackAlloc(target.id.length+1);stringToUTF8(target.id,targetInt,target.id.length+1);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(stackTop);}}function __registerRestoreOldStyle(canvas){var canvasSize=__get_canvas_element_size(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement||document.msFullscreenElement;if(!fullscreenElement){document.removeEventListener('fullscreenchange',restoreOldStyle);document.removeEventListener('webkitfullscreenchange',restoreOldStyle);__set_canvas_element_size(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor='white';document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(__currentFullscreenStrategy.canvasResizedCallback){dynCall_iiii(__currentFullscreenStrategy.canvasResizedCallback,37,0,__currentFullscreenStrategy.canvasResizedCallbackUserData);}}} document.addEventListener('fullscreenchange',restoreOldStyle);document.addEventListener('webkitfullscreenchange',restoreOldStyle);return restoreOldStyle;} function __setLetterbox(element,topBottom,leftRight){element.style.paddingLeft=element.style.paddingRight=leftRight+'px';element.style.paddingTop=element.style.paddingBottom=topBottom+'px';} function __getBoundingClientRect(e){return __specialEventTargets.indexOf(e)<0?e.getBoundingClientRect():{'left':0,'top':0};}function _JSEvents_resizeCanvasForFullscreen(target,strategy){var restoreOldStyle=__registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=__getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=__get_canvas_element_size(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){__setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight;}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight>3)]=rect.width;HEAPF64[((height)>>3)]=rect.height;return 0;} function __fillGamepadEventData(eventStruct,e){HEAPF64[((eventStruct)>>3)]=e.timestamp;for(var i=0;i>3)]=e.axes[i];} for(var i=0;i>3)]=e.buttons[i].value;}else{HEAPF64[(((eventStruct+i*8)+(528))>>3)]=e.buttons[i];}} for(var i=0;i>2)]=e.buttons[i].pressed;}else{HEAP32[(((eventStruct+i*4)+(1040))>>2)]=e.buttons[i]==1;}} HEAP32[(((eventStruct)+(1296))>>2)]=e.connected;HEAP32[(((eventStruct)+(1300))>>2)]=e.index;HEAP32[(((eventStruct)+(8))>>2)]=e.axes.length;HEAP32[(((eventStruct)+(12))>>2)]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64);}function _emscripten_get_gamepad_status(index,gamepadState){if(!JSEvents.lastGamepadState)throw 'emscripten_get_gamepad_status() can only be called after having first called emscripten_sample_gamepad_data() and that function has returned EMSCRIPTEN_RESULT_SUCCESS!';if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0;} function _emscripten_get_num_gamepads(){if(!JSEvents.lastGamepadState)throw 'emscripten_get_num_gamepads() can only be called after having first called emscripten_sample_gamepad_data() and that function has returned EMSCRIPTEN_RESULT_SUCCESS!';return JSEvents.lastGamepadState.length;} function _emscripten_get_sbrk_ptr(){return 14350080;} function _emscripten_glActiveTexture(x0){GLctx['activeTexture'](x0)} function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader]);} function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt['beginQueryEXT'](target,GL.timerQueriesEXT[id]);} function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name));} function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer]);} function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer]);} function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer]);} function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture]);} function _emscripten_glBindVertexArrayOES(vao){GLctx['bindVertexArray'](GL.vaos[vao]);} function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx['blendColor'](x0,x1,x2,x3)} function _emscripten_glBlendEquation(x0){GLctx['blendEquation'](x0)} function _emscripten_glBlendEquationSeparate(x0,x1){GLctx['blendEquationSeparate'](x0,x1)} function _emscripten_glBlendFunc(x0,x1){GLctx['blendFunc'](x0,x1)} function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx['blendFuncSeparate'](x0,x1,x2,x3)} function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage);} function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size));} function _emscripten_glCheckFramebufferStatus(x0){return GLctx['checkFramebufferStatus'](x0)} function _emscripten_glClear(x0){GLctx['clear'](x0)} function _emscripten_glClearColor(x0,x1,x2,x3){GLctx['clearColor'](x0,x1,x2,x3)} function _emscripten_glClearDepthf(x0){GLctx['clearDepth'](x0)} function _emscripten_glClearStencil(x0){GLctx['clearStencil'](x0)} function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha);} function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader]);} function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx['compressedTexImage2D'](target,level,internalFormat,width,height,border,data?HEAPU8.subarray((data),(data+imageSize)):null);} function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx['compressedTexSubImage2D'](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray((data),(data+imageSize)):null);} function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx['copyTexImage2D'](x0,x1,x2,x3,x4,x5,x6,x7)} function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx['copyTexSubImage2D'](x0,x1,x2,x3,x4,x5,x6,x7)} function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id;} function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id;} function _emscripten_glCullFace(x0){GLctx['cullFace'](x0)} function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i>2)];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0;}} function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2)];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null;}} function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(0x501);return;} GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null;} function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2)];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt['deleteQueryEXT'](query);GL.timerQueriesEXT[id]=null;}} function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2)];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null;}} function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(0x501);return;} GLctx.deleteShader(shader);GL.shaders[id]=null;} function _emscripten_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 _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2)];GLctx['deleteVertexArray'](GL.vaos[id]);GL.vaos[id]=null;}} function _emscripten_glDepthFunc(x0){GLctx['depthFunc'](x0)} function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag);} function _emscripten_glDepthRangef(x0,x1){GLctx['depthRange'](x0,x1)} function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader]);} function _emscripten_glDisable(x0){GLctx['disable'](x0)} function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index);} function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count);} function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx['drawArraysInstanced'](mode,first,count,primcount);} var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2)];} GLctx['drawBuffers'](bufArray);} function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices);} function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx['drawElementsInstanced'](mode,count,type,indices,primcount);} function _emscripten_glEnable(x0){GLctx['enable'](x0)} function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index);} function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt['endQueryEXT'](target);} function _emscripten_glFinish(){GLctx['finish']()} function _emscripten_glFlush(){GLctx['flush']()} function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer]);} function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level);} function _emscripten_glFrontFace(x0){GLctx['frontFace'](x0)} function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2)]=id;}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,'createBuffer',GL.buffers);} function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,'createFramebuffer',GL.framebuffers);} function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2)]=0;return;} var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[(((ids)+(i*4))>>2)]=id;}} function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,'createRenderbuffer',GL.renderbuffers);} function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,'createTexture',GL.textures);} function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,'createVertexArray',GL.vaos);} function _emscripten_glGenerateMipmap(x0){GLctx['generateMipmap'](x0)} function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;var numBytesWrittenExclNull=(bufSize>0&&name)?stringToUTF8(info.name,name,bufSize):0;if(length)HEAP32[((length)>>2)]=numBytesWrittenExclNull;if(size)HEAP32[((size)>>2)]=info.size;if(type)HEAP32[((type)>>2)]=info.type;} function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;var numBytesWrittenExclNull=(bufSize>0&&name)?stringToUTF8(info.name,name,bufSize):0;if(length)HEAP32[((length)>>2)]=numBytesWrittenExclNull;if(size)HEAP32[((size)>>2)]=info.size;if(type)HEAP32[((type)>>2)]=info.type;} function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount;} HEAP32[((count)>>2)]=len;for(var i=0;i>2)]=id;}} function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));} function readI53FromI64(ptr){return HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296;} function readI53FromU64(ptr){return HEAPU32[ptr>>2]+HEAPU32[ptr+4>>2]*4294967296;}function writeI53ToI64(ptr,num){HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296;var deserialized=(num>=0)?readI53FromU64(ptr):readI53FromI64(ptr);if(deserialized!=num)warnOnce('writeI53ToI64() out of range: serialized JS Number '+num+' to Wasm heap as bytes lo=0x'+HEAPU32[ptr>>2].toString(16)+', hi=0x'+HEAPU32[ptr+4>>2].toString(16)+', which deserializes back to '+deserialized+' instead!');}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(0x501);return;} var ret=undefined;switch(name_){case 0x8DFA:ret=1;break;case 0x8DF8:if(type!=0&&type!=1){GL.recordError(0x500);} return;case 0x8DF9:ret=0;break;case 0x86A2:var formats=GLctx.getParameter(0x86A3);ret=formats?formats.length:0;break;} if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof(result)){case "number":ret=result;break;case "boolean":ret=result?1:0;break;case "string":GL.recordError(0x500);return;case "object":if(result===null){switch(name_){case 0x8894:case 0x8B8D:case 0x8895:case 0x8CA6:case 0x8CA7:case 0x8069:case 0x85B5:case 0x8514:{ret=0;break;} default:{GL.recordError(0x500);return;}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2)]=result[i];break;case 2:HEAPF32[(((p)+(i*4))>>2)]=result[i];break;case 4:HEAP8[(((p)+(i))>>0)]=result[i]?1:0;break;}} return;}else{try{ret=result.name|0;}catch(e){GL.recordError(0x500);err('GL_INVALID_ENUM in glGet'+type+'v: Unknown object returned from WebGL getParameter('+name_+')! (error: '+e+')');return;}} break;default:GL.recordError(0x500);err('GL_INVALID_ENUM in glGet'+type+'v: Native code calling glGet'+type+'v('+name_+') and it returns '+result+' of type '+typeof(result)+'!');return;}} switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[((p)>>2)]=ret;break;case 2:HEAPF32[((p)>>2)]=ret;break;case 4:HEAP8[((p)>>0)]=ret?1:0;break;}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4);} function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(0x501);return;} HEAP32[((data)>>2)]=GLctx.getBufferParameter(target,value);} function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error;} function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2);} function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0;} HEAP32[((params)>>2)]=result;} function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0);} function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log='(unknown error)';var numBytesWrittenExclNull=(maxLength>0&&infoLog)?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[((length)>>2)]=numBytesWrittenExclNull;} function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(0x501);return;} if(program>=GL.counter){GL.recordError(0x501);return;} var ptable=GL.programInfos[program];if(!ptable){GL.recordError(0x502);return;} if(pname==0x8B84){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log='(unknown error)';HEAP32[((p)>>2)]=log.length+1;}else if(pname==0x8B87){HEAP32[((p)>>2)]=ptable.maxUniformLength;}else if(pname==0x8B8A){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,0x8B89);ptable.maxAttributeLength=0;for(var i=0;i>2)]=ptable.maxAttributeLength;}else if(pname==0x8A35){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,0x8A36);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2)]=ptable.maxUniformBlockNameLength;}else{HEAP32[((p)>>2)]=GLctx.getProgramParameter(GL.programs[program],pname);}} function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(0x501);return;} var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query,pname);var ret;if(typeof param=='boolean'){ret=param?1:0;}else{ret=param;} writeI53ToI64(params,ret);} function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(0x501);return;} var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query,pname);var ret;if(typeof param=='boolean'){ret=param?1:0;}else{ret=param;} HEAP32[((params)>>2)]=ret;} function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(0x501);return;} var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query,pname);var ret;if(typeof param=='boolean'){ret=param?1:0;}else{ret=param;} writeI53ToI64(params,ret);} function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(0x501);return;} var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query,pname);var ret;if(typeof param=='boolean'){ret=param?1:0;}else{ret=param;} HEAP32[((params)>>2)]=ret;} function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(0x501);return;} HEAP32[((params)>>2)]=GLctx.disjointTimerQueryExt['getQueryEXT'](target,pname);} function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(0x501);return;} HEAP32[((params)>>2)]=GLctx.getRenderbufferParameter(target,pname);} function _emscripten_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 _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[((range)>>2)]=result.rangeMin;HEAP32[(((range)+(4))>>2)]=result.rangeMax;HEAP32[((precision)>>2)]=result.precision;} function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=(bufSize>0&&source)?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[((length)>>2)]=numBytesWrittenExclNull;} function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(0x501);return;} if(pname==0x8B84){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log='(unknown error)';HEAP32[((p)>>2)]=log.length+1;}else if(pname==0x8B88){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=(source===null||source.length==0)?0:source.length+1;HEAP32[((p)>>2)]=sourceLength;}else{HEAP32[((p)>>2)]=GLctx.getShaderParameter(GL.shaders[shader],pname);}} function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString;}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 0x1F03:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return "GL_"+e;}));ret=stringToNewUTF8(exts.join(' '));break;case 0x1F00:case 0x1F01:case 0x9245:case 0x9246:var s=GLctx.getParameter(name_);if(!s){GL.recordError(0x500);} ret=stringToNewUTF8(s);break;case 0x1F02:var glVersion=GLctx.getParameter(0x1F02);{glVersion='OpenGL ES 2.0 ('+glVersion+')';} ret=stringToNewUTF8(glVersion);break;case 0x8B8C:var glslVersion=GLctx.getParameter(0x8B8C);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+'0';glslVersion='OpenGL ES GLSL ES '+ver_num[1]+' ('+glslVersion+')';} ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(0x500);return 0;} GL.stringCache[name_]=ret;return ret;} function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(0x501);return;} HEAPF32[((params)>>2)]=GLctx.getTexParameter(target,pname);} function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(0x501);return;} HEAP32[((params)>>2)]=GLctx.getTexParameter(target,pname);} function jstoi_q(str){return parseInt(str,undefined);}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]==']'){var leftBrace=name.lastIndexOf('[');arrayIndex=name[leftBrace+1]!=']'?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace);} var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2)]=data;break;case 2:HEAPF32[((params)>>2)]=data;break;default:throw 'internal emscriptenWebGLGetUniform() error, bad type: '+type;}}else{for(var i=0;i>2)]=data[i];break;case 2:HEAPF32[(((params)+(i*4))>>2)]=data[i];break;default:throw 'internal emscriptenWebGLGetUniform() error, bad type: '+type;}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2);} function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0);} function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(0x501);return;} HEAP32[((pointer)>>2)]=GLctx.getVertexAttribOffset(index,pname);} function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(0x501);return;} var data=GLctx.getVertexAttrib(index,pname);if(pname==0x889F){HEAP32[((params)>>2)]=data["name"];}else if(typeof data=='number'||typeof data=='boolean'){switch(type){case 0:HEAP32[((params)>>2)]=data;break;case 2:HEAPF32[((params)>>2)]=data;break;case 5:HEAP32[((params)>>2)]=Math.fround(data);break;default:throw 'internal emscriptenWebGLGetVertexAttrib() error, bad type: '+type;}}else{for(var i=0;i>2)]=data[i];break;case 2:HEAPF32[(((params)+(i*4))>>2)]=data[i];break;case 5:HEAP32[(((params)+(i*4))>>2)]=Math.fround(data[i]);break;default:throw 'internal emscriptenWebGLGetVertexAttrib() error, bad type: '+type;}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2);} function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5);} function _emscripten_glHint(x0,x1){GLctx['hint'](x0,x1)} function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b);} function _emscripten_glIsEnabled(x0){return GLctx['isEnabled'](x0)} function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb);} function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program);} function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt['isQueryEXT'](query);} function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb);} function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s);} function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture);} function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx['isVertexArray'](vao);} function _emscripten_glLineWidth(x0){GLctx['lineWidth'](x0)} function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program);} function _emscripten_glPixelStorei(pname,param){if(pname==0xCF5){GL.unpackAlignment=param;} GLctx.pixelStorei(pname,param);} function _emscripten_glPolygonOffset(x0,x1){GLctx['polygonOffset'](x0,x1)} function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt['queryCounterEXT'](GL.timerQueriesEXT[id],target);} 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,};return colorChannels[format-0x1902]||1;} function __heapObjectForWebGLType(type){type-=0x1400;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922) 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 _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(0x500);return;} GLctx.readPixels(x,y,width,height,format,type,pixelData);} function _emscripten_glReleaseShaderCompiler(){} function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx['renderbufferStorage'](x0,x1,x2,x3)} function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert);} function _emscripten_glScissor(x0,x1,x2,x3){GLctx['scissor'](x0,x1,x2,x3)} function _emscripten_glShaderBinary(){GL.recordError(0x500);} function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source);} function _emscripten_glStencilFunc(x0,x1,x2){GLctx['stencilFunc'](x0,x1,x2)} function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx['stencilFuncSeparate'](x0,x1,x2,x3)} function _emscripten_glStencilMask(x0){GLctx['stencilMask'](x0)} function _emscripten_glStencilMaskSeparate(x0,x1){GLctx['stencilMaskSeparate'](x0,x1)} function _emscripten_glStencilOp(x0,x1,x2){GLctx['stencilOp'](x0,x1,x2)} function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx['stencilOpSeparate'](x0,x1,x2,x3)} function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null);} function _emscripten_glTexParameterf(x0,x1,x2){GLctx['texParameterf'](x0,x1,x2)} function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[((params)>>2)];GLctx.texParameterf(target,pname,param);} function _emscripten_glTexParameteri(x0,x1,x2){GLctx['texParameteri'](x0,x1,x2)} function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[((params)>>2)];GLctx.texParameteri(target,pname,param);} function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData);} function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0);} function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[count-1];for(var i=0;i>2)];}}else {var view=HEAPF32.subarray((value)>>2,(value+count*4)>>2);} GLctx.uniform1fv(GL.uniforms[location],view);} function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0);} function _emscripten_glUniform1iv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[count-1];for(var i=0;i>2)];}}else {var view=HEAP32.subarray((value)>>2,(value+count*4)>>2);} GLctx.uniform1iv(GL.uniforms[location],view);} function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1);} function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[(((value)+(4*i))>>2)];view[i+1]=HEAPF32[(((value)+(4*i+4))>>2)];}}else {var view=HEAPF32.subarray((value)>>2,(value+count*8)>>2);} GLctx.uniform2fv(GL.uniforms[location],view);} function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1);} function _emscripten_glUniform2iv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[(((value)+(4*i))>>2)];view[i+1]=HEAP32[(((value)+(4*i+4))>>2)];}}else {var view=HEAP32.subarray((value)>>2,(value+count*8)>>2);} GLctx.uniform2iv(GL.uniforms[location],view);} function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2);} function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[(((value)+(4*i))>>2)];view[i+1]=HEAPF32[(((value)+(4*i+4))>>2)];view[i+2]=HEAPF32[(((value)+(4*i+8))>>2)];}}else {var view=HEAPF32.subarray((value)>>2,(value+count*12)>>2);} GLctx.uniform3fv(GL.uniforms[location],view);} function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2);} function _emscripten_glUniform3iv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[(((value)+(4*i))>>2)];view[i+1]=HEAP32[(((value)+(4*i+4))>>2)];view[i+2]=HEAP32[(((value)+(4*i+8))>>2)];}}else {var view=HEAP32.subarray((value)>>2,(value+count*12)>>2);} GLctx.uniform3iv(GL.uniforms[location],view);} function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3);} function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];}}else {var view=HEAPF32.subarray((value)>>2,(value+count*16)>>2);} GLctx.uniform4fv(GL.uniforms[location],view);} function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3);} function _emscripten_glUniform4iv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferIntViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[(((value)+(4*i))>>2)];view[i+1]=HEAP32[(((value)+(4*i+4))>>2)];view[i+2]=HEAP32[(((value)+(4*i+8))>>2)];view[i+3]=HEAP32[(((value)+(4*i+12))>>2)];}}else {var view=HEAP32.subarray((value)>>2,(value+count*16)>>2);} GLctx.uniform4iv(GL.uniforms[location],view);} function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[(((value)+(4*i))>>2)];view[i+1]=HEAPF32[(((value)+(4*i+4))>>2)];view[i+2]=HEAPF32[(((value)+(4*i+8))>>2)];view[i+3]=HEAPF32[(((value)+(4*i+12))>>2)];}}else {var view=HEAPF32.subarray((value)>>2,(value+count*16)>>2);} GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view);} function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[(((value)+(4*i))>>2)];view[i+1]=HEAPF32[(((value)+(4*i+4))>>2)];view[i+2]=HEAPF32[(((value)+(4*i+8))>>2)];view[i+3]=HEAPF32[(((value)+(4*i+12))>>2)];view[i+4]=HEAPF32[(((value)+(4*i+16))>>2)];view[i+5]=HEAPF32[(((value)+(4*i+20))>>2)];view[i+6]=HEAPF32[(((value)+(4*i+24))>>2)];view[i+7]=HEAPF32[(((value)+(4*i+28))>>2)];view[i+8]=HEAPF32[(((value)+(4*i+32))>>2)];}}else {var view=HEAPF32.subarray((value)>>2,(value+count*36)>>2);} GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view);} function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferFloatViews[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15];}}else {var view=HEAPF32.subarray((value)>>2,(value+count*64)>>2);} GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view);} function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program]);} function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program]);} function _emscripten_glVertexAttrib1f(x0,x1){GLctx['vertexAttrib1f'](x0,x1)} function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2]);} function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx['vertexAttrib2f'](x0,x1,x2)} function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2]);} function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx['vertexAttrib3f'](x0,x1,x2,x3)} function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2]);} function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx['vertexAttrib4f'](x0,x1,x2,x3,x4)} function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2]);} function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx['vertexAttribDivisor'](index,divisor);} function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr);} function _emscripten_glViewport(x0,x1,x2,x3){GLctx['viewport'](x0,x1,x2,x3)} function _emscripten_has_asyncify(){return 0;} function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num);} function __emscripten_do_request_fullscreen(target,strategy){if(!JSEvents.fullscreenEnabled())return-1;target=__findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3;} var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(_JSEvents_requestFullscreen,1,[target,strategy]);return 1;}else{return-2;}} return _JSEvents_requestFullscreen(target,strategy);}function _emscripten_request_fullscreen_strategy(target,deferUntilInEventHandler,fullscreenStrategy){var strategy={scaleMode:HEAP32[((fullscreenStrategy)>>2)],canvasResolutionScaleMode:HEAP32[(((fullscreenStrategy)+(4))>>2)],filteringMode:HEAP32[(((fullscreenStrategy)+(8))>>2)],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[(((fullscreenStrategy)+(12))>>2)],canvasResizedCallbackUserData:HEAP32[(((fullscreenStrategy)+(16))>>2)]};__currentFullscreenStrategy=strategy;return __emscripten_do_request_fullscreen(target,strategy);} function _emscripten_request_pointerlock(target,deferUntilInEventHandler){target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.msRequestPointerLock){return-1;} var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1;}else{return-2;}} return __requestPointerLock(target);} function _emscripten_get_heap_size(){return HEAPU8.length;} function abortOnCannotGrowMemory(requestedSize){abort('Cannot enlarge memory arrays to size '+requestedSize+' bytes (OOM). Either (1) compile with -s INITIAL_MEMORY=X with X higher than the current value '+HEAP8.length+', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ');}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize);} function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=(navigator.getGamepads?navigator.getGamepads():(navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)))?0:-1;} function __registerBeforeUnloadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString){var beforeUnloadEventHandlerFunc=function(ev){var e=ev||event;var confirmationMessage=dynCall_iiii(callbackfunc,eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage);} if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage;}};var eventHandler={target:__findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_beforeunload_callback_on_thread(userData,callbackfunc,targetThread){if(typeof onbeforeunload==='undefined')return-1;if(targetThread!==1)return-5;__registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload");return 0;} function __registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(ev){var e=ev||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(dynCall_iiii(callbackfunc,eventTypeId,focusEvent,userData))e.preventDefault();};var eventHandler={target:__findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);return 0;} function _emscripten_set_element_css_size(target,width,height){target=__findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0;} function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);return 0;} function __fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[((eventStruct)>>2)]=isFullscreen;HEAP32[(((eventStruct)+(4))>>2)]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=(reportedElement&&reportedElement.id)?reportedElement.id:'';stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[(((eventStruct)+(264))>>2)]=reportedElement?reportedElement.clientWidth:0;HEAP32[(((eventStruct)+(268))>>2)]=reportedElement?reportedElement.clientHeight:0;HEAP32[(((eventStruct)+(272))>>2)]=screen.width;HEAP32[(((eventStruct)+(276))>>2)]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement;}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault();};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=__findEventTarget(target);if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0;} function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e["gamepad"]);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault();};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0;} function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0;} function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(ev){var e=ev||event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[(((keyEventData)+(64))>>2)]=e.location;HEAP32[(((keyEventData)+(68))>>2)]=e.ctrlKey;HEAP32[(((keyEventData)+(72))>>2)]=e.shiftKey;HEAP32[(((keyEventData)+(76))>>2)]=e.altKey;HEAP32[(((keyEventData)+(80))>>2)]=e.metaKey;HEAP32[(((keyEventData)+(84))>>2)]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[(((keyEventData)+(152))>>2)]=e.charCode;HEAP32[(((keyEventData)+(156))>>2)]=e.keyCode;HEAP32[(((keyEventData)+(160))>>2)]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault();};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0;} function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0;} function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);return 0;} function __fillMouseEventData(eventStruct,e,target){HEAP32[((eventStruct)>>2)]=e.screenX;HEAP32[(((eventStruct)+(4))>>2)]=e.screenY;HEAP32[(((eventStruct)+(8))>>2)]=e.clientX;HEAP32[(((eventStruct)+(12))>>2)]=e.clientY;HEAP32[(((eventStruct)+(16))>>2)]=e.ctrlKey;HEAP32[(((eventStruct)+(20))>>2)]=e.shiftKey;HEAP32[(((eventStruct)+(24))>>2)]=e.altKey;HEAP32[(((eventStruct)+(28))>>2)]=e.metaKey;HEAP16[(((eventStruct)+(32))>>1)]=e.button;HEAP16[(((eventStruct)+(34))>>1)]=e.buttons;var movementX=e["movementX"]||(e.screenX-JSEvents.previousScreenX);var movementY=e["movementY"]||(e.screenY-JSEvents.previousScreenY);HEAP32[(((eventStruct)+(36))>>2)]=movementX;HEAP32[(((eventStruct)+(40))>>2)]=movementY;var rect=__getBoundingClientRect(target);HEAP32[(((eventStruct)+(44))>>2)]=e.clientX-rect.left;HEAP32[(((eventStruct)+(48))>>2)]=e.clientY-rect.top;if(e.type!=='wheel'&&e.type!=='mousewheel'){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY;}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=__findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(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};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);return 0;} function _emscripten_set_mouseenter_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);return 0;} function _emscripten_set_mouseleave_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);return 0;} function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);return 0;} function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);return 0;} function __fillPointerlockChangeEventData(eventStruct){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[((eventStruct)>>2)]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=(pointerLockElement&&pointerLockElement.id)?pointerLockElement.id:'';stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128);}function __registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=function(ev){var e=ev||event;var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;__fillPointerlockChangeEventData(pointerlockChangeEvent);if(dynCall_iiii(callbackfunc,eventTypeId,pointerlockChangeEvent,userData))e.preventDefault();};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);} function _emscripten_set_pointerlockchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!document||!document.body||(!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock)){return-1;} target=__findEventTarget(target);if(!target)return-4;__registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread);__registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);__registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);__registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return 0;} function __registerUiEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=__findEventTarget(target);var uiEventHandlerFunc=function(ev){var e=ev||event;if(e.target!=target){return;} var uiEvent=JSEvents.uiEvent;var b=document.body;HEAP32[((uiEvent)>>2)]=e.detail;HEAP32[(((uiEvent)+(4))>>2)]=b.clientWidth;HEAP32[(((uiEvent)+(8))>>2)]=b.clientHeight;HEAP32[(((uiEvent)+(12))>>2)]=innerWidth;HEAP32[(((uiEvent)+(16))>>2)]=innerHeight;HEAP32[(((uiEvent)+(20))>>2)]=outerWidth;HEAP32[(((uiEvent)+(24))>>2)]=outerHeight;HEAP32[(((uiEvent)+(28))>>2)]=pageXOffset;HEAP32[(((uiEvent)+(32))>>2)]=pageYOffset;if(dynCall_iiii(callbackfunc,eventTypeId,uiEvent,userData))e.preventDefault();};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_resize_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);return 0;} function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(ev){var e=ev||event;var touches={};for(var i=0;i>2)]=e.ctrlKey;HEAP32[(((ptr)+(8))>>2)]=e.shiftKey;HEAP32[(((ptr)+(12))>>2)]=e.altKey;HEAP32[(((ptr)+(16))>>2)]=e.metaKey;ptr+=20;var targetRect=__getBoundingClientRect(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[((ptr)>>2)]=t.identifier;HEAP32[(((ptr)+(4))>>2)]=t.screenX;HEAP32[(((ptr)+(8))>>2)]=t.screenY;HEAP32[(((ptr)+(12))>>2)]=t.clientX;HEAP32[(((ptr)+(16))>>2)]=t.clientY;HEAP32[(((ptr)+(20))>>2)]=t.pageX;HEAP32[(((ptr)+(24))>>2)]=t.pageY;HEAP32[(((ptr)+(28))>>2)]=t.changed;HEAP32[(((ptr)+(32))>>2)]=t.onTarget;HEAP32[(((ptr)+(36))>>2)]=t.clientX-targetRect.left;HEAP32[(((ptr)+(40))>>2)]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break;}} HEAP32[((touchEvent)>>2)]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault();};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=='touchstart'||eventTypeString=='touchend',eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0;} function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0;} function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0;} function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0;} function __fillVisibilityChangeEventData(eventStruct){var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[((eventStruct)>>2)]=document.hidden;HEAP32[(((eventStruct)+(4))>>2)]=visibilityState;}function __registerVisibilityChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=function(ev){var e=ev||event;var visibilityChangeEvent=JSEvents.visibilityChangeEvent;__fillVisibilityChangeEventData(visibilityChangeEvent);if(dynCall_iiii(callbackfunc,eventTypeId,visibilityChangeEvent,userData))e.preventDefault();};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_visibilitychange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!__specialEventTargets[1]){return-4;} __registerVisibilityChangeEventCallback(__specialEventTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread);return 0;} function __registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(96);var wheelHandlerFunc=function(ev){var e=ev||event;var wheelEvent=JSEvents.wheelEvent;__fillMouseEventData(wheelEvent,e,target);HEAPF64[(((wheelEvent)+(64))>>3)]=e["deltaX"];HEAPF64[(((wheelEvent)+(72))>>3)]=e["deltaY"];HEAPF64[(((wheelEvent)+(80))>>3)]=e["deltaZ"];HEAP32[(((wheelEvent)+(88))>>2)]=e["deltaMode"];if(dynCall_iiii(callbackfunc,eventTypeId,wheelEvent,userData))e.preventDefault();};var mouseWheelHandlerFunc=function(ev){var e=ev||event;__fillMouseEventData(JSEvents.wheelEvent,e,target);HEAPF64[(((JSEvents.wheelEvent)+(64))>>3)]=e["wheelDeltaX"]||0;var wheelDeltaY=-(e["wheelDeltaY"]||e["wheelDelta"]) HEAPF64[(((JSEvents.wheelEvent)+(72))>>3)]=wheelDeltaY;HEAPF64[(((JSEvents.wheelEvent)+(80))>>3)]=0;HEAP32[(((JSEvents.wheelEvent)+(88))>>2)]=0;var shouldCancel=dynCall_iiii(callbackfunc,eventTypeId,JSEvents.wheelEvent,userData);if(shouldCancel){e.preventDefault();}};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:(eventTypeString=='wheel')?wheelHandlerFunc:mouseWheelHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler);}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=__findEventTarget(target);if(typeof target.onwheel!=='undefined'){__registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread);return 0;}else if(typeof target.onmousewheel!=='undefined'){__registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"mousewheel",targetThread);return 0;}else{return-1;}} function _emscripten_sleep(){throw 'Please compile your program with async support in order to use asynchronous operations like emscripten_sleep';} var ENV={};function __getExecutableName(){return thisProgram||'./this.program';}function _emscripten_get_environ(){if(!_emscripten_get_environ.strings){var env={'USER':'web_user','LOGNAME':'web_user','PATH':'/','PWD':'/','HOME':'/home/web_user','LANG':((typeof navigator==='object'&&navigator.languages&&navigator.languages[0])||'C').replace('-','_')+'.UTF-8','_':__getExecutableName()};for(var x in ENV){env[x]=ENV[x];} var strings=[];for(var x in env){strings.push(x+'='+env[x]);} _emscripten_get_environ.strings=strings;} return _emscripten_get_environ.strings;}function _environ_get(__environ,environ_buf){var strings=_emscripten_get_environ();var bufSize=0;strings.forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[(((__environ)+(i*4))>>2)]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1;});return 0;} function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=_emscripten_get_environ();HEAP32[((penviron_count)>>2)]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1;});HEAP32[((penviron_buf_size)>>2)]=bufSize;return 0;} function _exit(status){exit(status);} function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0;}catch(e){if(typeof FS==='undefined'||!(e instanceof FS.ErrnoError))abort(e);return e.errno;}} function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[((pnum)>>2)]=num return 0;}catch(e){if(typeof FS==='undefined'||!(e instanceof FS.ErrnoError))abort(e);return e.errno;}} function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=0x100000000;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=0x20000000000000;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61;} FS.llseek(stream,offset,whence);(tempI64=[stream.position>>>0,(tempDouble=stream.position,(+(Math_abs(tempDouble)))>=1.0?(tempDouble>0.0?((Math_min((+(Math_floor((tempDouble)/4294967296.0))),4294967295.0))|0)>>>0:(~~((+(Math_ceil((tempDouble-+(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>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 instanceof FS.ErrnoError))abort(e);return e.errno;}} function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[((pnum)>>2)]=num return 0;}catch(e){if(typeof FS==='undefined'||!(e instanceof FS.ErrnoError))abort(e);return e.errno;}} function _gettimeofday(ptr){var now=Date.now();HEAP32[((ptr)>>2)]=(now/1000)|0;HEAP32[(((ptr)+(4))>>2)]=((now%1000)*1000)|0;return 0;} function _glActiveTexture(x0){GLctx['activeTexture'](x0)} function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader]);} function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer]);} function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture]);} function _glBlendFunc(x0,x1){GLctx['blendFunc'](x0,x1)} function _glBufferData(target,size,data,usage){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;GL.programs[id]=program;return id;} function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id;} function _glDepthFunc(x0){GLctx['depthFunc'](x0)} function _glDepthMask(flag){GLctx.depthMask(!!flag);} function _glDisable(x0){GLctx['disable'](x0)} function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index);} function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count);} function _glEnable(x0){GLctx['enable'](x0)} function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index);} function _glGenBuffers(n,buffers){__glGenObject(n,buffers,'createBuffer',GL.buffers);} function _glGenTextures(n,textures){__glGenObject(n,textures,'createTexture',GL.textures);} function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));} 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 _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(0x501);return;} if(pname==0x8B84){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log='(unknown error)';HEAP32[((p)>>2)]=log.length+1;}else if(pname==0x8B88){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=(source===null||source.length==0)?0:source.length+1;HEAP32[((p)>>2)]=sourceLength;}else{HEAP32[((p)>>2)]=GLctx.getShaderParameter(GL.shaders[shader],pname);}} function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]==']'){var leftBrace=name.lastIndexOf('[');arrayIndex=name[leftBrace+1]!=']'?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace);} var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2)];var nanoseconds=HEAP32[(((rqtp)+(4))>>2)];if(nanoseconds<0||nanoseconds>999999999||seconds<0){___setErrNo(28);return-1;} if(rmtp!==0){HEAP32[((rmtp)>>2)]=0;HEAP32[(((rmtp)+(4))>>2)]=0;} return _usleep((seconds*1e6)+(nanoseconds/1000));} function _setTempRet0($i){setTempRet0(($i)|0);} function _sigaction(signum,act,oldact){err('Calling stub instead of sigaction()');return 0;} var __sigalrm_handler=0;function _signal(sig,func){if(sig==14){__sigalrm_handler=func;}else{err('Calling stub instead of signal()');} return 0;} function readAsmConstArgs(sigPtr,buf){if(!readAsmConstArgs.array){readAsmConstArgs.array=[];} var args=readAsmConstArgs.array;args.length=0;var ch;while(ch=HEAPU8[sigPtr++]){if(ch===100||ch===102){buf=(buf+7)&~7;args.push(HEAPF64[(buf>>3)]);buf+=8;}else if(ch===105) {buf=(buf+3)&~3;args.push(HEAP32[(buf>>2)]);buf+=4;} else abort("unexpected char in asm const signature "+ch);} return args;} var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this;} this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode;},set:function(val){val?this.mode|=readMode:this.mode&=~readMode;}},write:{get:function(){return(this.mode&writeMode)===writeMode;},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode;}},isFolder:{get:function(){return FS.isDir(this.mode);}},isDevice:{get:function(){return FS.isChrdev(this.mode);}}});FS.FSNode=FSNode;FS.staticInit();;Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestFullScreen"]=function Module_requestFullScreen(){Browser.requestFullScreen()};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 GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));;var ASSERTIONS=true;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;} function intArrayToString(array){var ret=[];for(var i=0;i0xFF){if(ASSERTIONS){assert(false,'Character code '+chr+' ('+String.fromCharCode(chr)+') at offset '+i+' not in 0x00-0xFF.');} chr&=0xFF;} ret.push(String.fromCharCode(chr));} return ret.join('');} var asmGlobalArg={};var asmLibraryArg={"__assert_fail":___assert_fail,"__handle_stack_overflow":___handle_stack_overflow,"__syscall221":___syscall221,"__syscall5":___syscall5,"__syscall54":___syscall54,"abort":_abort,"atexit":_atexit,"clock_gettime":_clock_gettime,"dlclose":_dlclose,"dlerror":_dlerror,"dlsym":_dlsym,"eglBindAPI":_eglBindAPI,"eglChooseConfig":_eglChooseConfig,"eglCreateContext":_eglCreateContext,"eglCreateWindowSurface":_eglCreateWindowSurface,"eglDestroyContext":_eglDestroyContext,"eglDestroySurface":_eglDestroySurface,"eglGetConfigAttrib":_eglGetConfigAttrib,"eglGetDisplay":_eglGetDisplay,"eglGetError":_eglGetError,"eglGetProcAddress":_eglGetProcAddress,"eglInitialize":_eglInitialize,"eglMakeCurrent":_eglMakeCurrent,"eglQueryString":_eglQueryString,"eglSwapBuffers":_eglSwapBuffers,"eglSwapInterval":_eglSwapInterval,"eglTerminate":_eglTerminate,"eglWaitGL":_eglWaitGL,"eglWaitNative":_eglWaitNative,"emscripten_asm_const_iii":_emscripten_asm_const_iii,"emscripten_exit_fullscreen":_emscripten_exit_fullscreen,"emscripten_exit_pointerlock":_emscripten_exit_pointerlock,"emscripten_get_device_pixel_ratio":_emscripten_get_device_pixel_ratio,"emscripten_get_element_css_size":_emscripten_get_element_css_size,"emscripten_get_gamepad_status":_emscripten_get_gamepad_status,"emscripten_get_num_gamepads":_emscripten_get_num_gamepads,"emscripten_get_sbrk_ptr":_emscripten_get_sbrk_ptr,"emscripten_glActiveTexture":_emscripten_glActiveTexture,"emscripten_glAttachShader":_emscripten_glAttachShader,"emscripten_glBeginQueryEXT":_emscripten_glBeginQueryEXT,"emscripten_glBindAttribLocation":_emscripten_glBindAttribLocation,"emscripten_glBindBuffer":_emscripten_glBindBuffer,"emscripten_glBindFramebuffer":_emscripten_glBindFramebuffer,"emscripten_glBindRenderbuffer":_emscripten_glBindRenderbuffer,"emscripten_glBindTexture":_emscripten_glBindTexture,"emscripten_glBindVertexArrayOES":_emscripten_glBindVertexArrayOES,"emscripten_glBlendColor":_emscripten_glBlendColor,"emscripten_glBlendEquation":_emscripten_glBlendEquation,"emscripten_glBlendEquationSeparate":_emscripten_glBlendEquationSeparate,"emscripten_glBlendFunc":_emscripten_glBlendFunc,"emscripten_glBlendFuncSeparate":_emscripten_glBlendFuncSeparate,"emscripten_glBufferData":_emscripten_glBufferData,"emscripten_glBufferSubData":_emscripten_glBufferSubData,"emscripten_glCheckFramebufferStatus":_emscripten_glCheckFramebufferStatus,"emscripten_glClear":_emscripten_glClear,"emscripten_glClearColor":_emscripten_glClearColor,"emscripten_glClearDepthf":_emscripten_glClearDepthf,"emscripten_glClearStencil":_emscripten_glClearStencil,"emscripten_glColorMask":_emscripten_glColorMask,"emscripten_glCompileShader":_emscripten_glCompileShader,"emscripten_glCompressedTexImage2D":_emscripten_glCompressedTexImage2D,"emscripten_glCompressedTexSubImage2D":_emscripten_glCompressedTexSubImage2D,"emscripten_glCopyTexImage2D":_emscripten_glCopyTexImage2D,"emscripten_glCopyTexSubImage2D":_emscripten_glCopyTexSubImage2D,"emscripten_glCreateProgram":_emscripten_glCreateProgram,"emscripten_glCreateShader":_emscripten_glCreateShader,"emscripten_glCullFace":_emscripten_glCullFace,"emscripten_glDeleteBuffers":_emscripten_glDeleteBuffers,"emscripten_glDeleteFramebuffers":_emscripten_glDeleteFramebuffers,"emscripten_glDeleteProgram":_emscripten_glDeleteProgram,"emscripten_glDeleteQueriesEXT":_emscripten_glDeleteQueriesEXT,"emscripten_glDeleteRenderbuffers":_emscripten_glDeleteRenderbuffers,"emscripten_glDeleteShader":_emscripten_glDeleteShader,"emscripten_glDeleteTextures":_emscripten_glDeleteTextures,"emscripten_glDeleteVertexArraysOES":_emscripten_glDeleteVertexArraysOES,"emscripten_glDepthFunc":_emscripten_glDepthFunc,"emscripten_glDepthMask":_emscripten_glDepthMask,"emscripten_glDepthRangef":_emscripten_glDepthRangef,"emscripten_glDetachShader":_emscripten_glDetachShader,"emscripten_glDisable":_emscripten_glDisable,"emscripten_glDisableVertexAttribArray":_emscripten_glDisableVertexAttribArray,"emscripten_glDrawArrays":_emscripten_glDrawArrays,"emscripten_glDrawArraysInstancedANGLE":_emscripten_glDrawArraysInstancedANGLE,"emscripten_glDrawBuffersWEBGL":_emscripten_glDrawBuffersWEBGL,"emscripten_glDrawElements":_emscripten_glDrawElements,"emscripten_glDrawElementsInstancedANGLE":_emscripten_glDrawElementsInstancedANGLE,"emscripten_glEnable":_emscripten_glEnable,"emscripten_glEnableVertexAttribArray":_emscripten_glEnableVertexAttribArray,"emscripten_glEndQueryEXT":_emscripten_glEndQueryEXT,"emscripten_glFinish":_emscripten_glFinish,"emscripten_glFlush":_emscripten_glFlush,"emscripten_glFramebufferRenderbuffer":_emscripten_glFramebufferRenderbuffer,"emscripten_glFramebufferTexture2D":_emscripten_glFramebufferTexture2D,"emscripten_glFrontFace":_emscripten_glFrontFace,"emscripten_glGenBuffers":_emscripten_glGenBuffers,"emscripten_glGenFramebuffers":_emscripten_glGenFramebuffers,"emscripten_glGenQueriesEXT":_emscripten_glGenQueriesEXT,"emscripten_glGenRenderbuffers":_emscripten_glGenRenderbuffers,"emscripten_glGenTextures":_emscripten_glGenTextures,"emscripten_glGenVertexArraysOES":_emscripten_glGenVertexArraysOES,"emscripten_glGenerateMipmap":_emscripten_glGenerateMipmap,"emscripten_glGetActiveAttrib":_emscripten_glGetActiveAttrib,"emscripten_glGetActiveUniform":_emscripten_glGetActiveUniform,"emscripten_glGetAttachedShaders":_emscripten_glGetAttachedShaders,"emscripten_glGetAttribLocation":_emscripten_glGetAttribLocation,"emscripten_glGetBooleanv":_emscripten_glGetBooleanv,"emscripten_glGetBufferParameteriv":_emscripten_glGetBufferParameteriv,"emscripten_glGetError":_emscripten_glGetError,"emscripten_glGetFloatv":_emscripten_glGetFloatv,"emscripten_glGetFramebufferAttachmentParameteriv":_emscripten_glGetFramebufferAttachmentParameteriv,"emscripten_glGetIntegerv":_emscripten_glGetIntegerv,"emscripten_glGetProgramInfoLog":_emscripten_glGetProgramInfoLog,"emscripten_glGetProgramiv":_emscripten_glGetProgramiv,"emscripten_glGetQueryObjecti64vEXT":_emscripten_glGetQueryObjecti64vEXT,"emscripten_glGetQueryObjectivEXT":_emscripten_glGetQueryObjectivEXT,"emscripten_glGetQueryObjectui64vEXT":_emscripten_glGetQueryObjectui64vEXT,"emscripten_glGetQueryObjectuivEXT":_emscripten_glGetQueryObjectuivEXT,"emscripten_glGetQueryivEXT":_emscripten_glGetQueryivEXT,"emscripten_glGetRenderbufferParameteriv":_emscripten_glGetRenderbufferParameteriv,"emscripten_glGetShaderInfoLog":_emscripten_glGetShaderInfoLog,"emscripten_glGetShaderPrecisionFormat":_emscripten_glGetShaderPrecisionFormat,"emscripten_glGetShaderSource":_emscripten_glGetShaderSource,"emscripten_glGetShaderiv":_emscripten_glGetShaderiv,"emscripten_glGetString":_emscripten_glGetString,"emscripten_glGetTexParameterfv":_emscripten_glGetTexParameterfv,"emscripten_glGetTexParameteriv":_emscripten_glGetTexParameteriv,"emscripten_glGetUniformLocation":_emscripten_glGetUniformLocation,"emscripten_glGetUniformfv":_emscripten_glGetUniformfv,"emscripten_glGetUniformiv":_emscripten_glGetUniformiv,"emscripten_glGetVertexAttribPointerv":_emscripten_glGetVertexAttribPointerv,"emscripten_glGetVertexAttribfv":_emscripten_glGetVertexAttribfv,"emscripten_glGetVertexAttribiv":_emscripten_glGetVertexAttribiv,"emscripten_glHint":_emscripten_glHint,"emscripten_glIsBuffer":_emscripten_glIsBuffer,"emscripten_glIsEnabled":_emscripten_glIsEnabled,"emscripten_glIsFramebuffer":_emscripten_glIsFramebuffer,"emscripten_glIsProgram":_emscripten_glIsProgram,"emscripten_glIsQueryEXT":_emscripten_glIsQueryEXT,"emscripten_glIsRenderbuffer":_emscripten_glIsRenderbuffer,"emscripten_glIsShader":_emscripten_glIsShader,"emscripten_glIsTexture":_emscripten_glIsTexture,"emscripten_glIsVertexArrayOES":_emscripten_glIsVertexArrayOES,"emscripten_glLineWidth":_emscripten_glLineWidth,"emscripten_glLinkProgram":_emscripten_glLinkProgram,"emscripten_glPixelStorei":_emscripten_glPixelStorei,"emscripten_glPolygonOffset":_emscripten_glPolygonOffset,"emscripten_glQueryCounterEXT":_emscripten_glQueryCounterEXT,"emscripten_glReadPixels":_emscripten_glReadPixels,"emscripten_glReleaseShaderCompiler":_emscripten_glReleaseShaderCompiler,"emscripten_glRenderbufferStorage":_emscripten_glRenderbufferStorage,"emscripten_glSampleCoverage":_emscripten_glSampleCoverage,"emscripten_glScissor":_emscripten_glScissor,"emscripten_glShaderBinary":_emscripten_glShaderBinary,"emscripten_glShaderSource":_emscripten_glShaderSource,"emscripten_glStencilFunc":_emscripten_glStencilFunc,"emscripten_glStencilFuncSeparate":_emscripten_glStencilFuncSeparate,"emscripten_glStencilMask":_emscripten_glStencilMask,"emscripten_glStencilMaskSeparate":_emscripten_glStencilMaskSeparate,"emscripten_glStencilOp":_emscripten_glStencilOp,"emscripten_glStencilOpSeparate":_emscripten_glStencilOpSeparate,"emscripten_glTexImage2D":_emscripten_glTexImage2D,"emscripten_glTexParameterf":_emscripten_glTexParameterf,"emscripten_glTexParameterfv":_emscripten_glTexParameterfv,"emscripten_glTexParameteri":_emscripten_glTexParameteri,"emscripten_glTexParameteriv":_emscripten_glTexParameteriv,"emscripten_glTexSubImage2D":_emscripten_glTexSubImage2D,"emscripten_glUniform1f":_emscripten_glUniform1f,"emscripten_glUniform1fv":_emscripten_glUniform1fv,"emscripten_glUniform1i":_emscripten_glUniform1i,"emscripten_glUniform1iv":_emscripten_glUniform1iv,"emscripten_glUniform2f":_emscripten_glUniform2f,"emscripten_glUniform2fv":_emscripten_glUniform2fv,"emscripten_glUniform2i":_emscripten_glUniform2i,"emscripten_glUniform2iv":_emscripten_glUniform2iv,"emscripten_glUniform3f":_emscripten_glUniform3f,"emscripten_glUniform3fv":_emscripten_glUniform3fv,"emscripten_glUniform3i":_emscripten_glUniform3i,"emscripten_glUniform3iv":_emscripten_glUniform3iv,"emscripten_glUniform4f":_emscripten_glUniform4f,"emscripten_glUniform4fv":_emscripten_glUniform4fv,"emscripten_glUniform4i":_emscripten_glUniform4i,"emscripten_glUniform4iv":_emscripten_glUniform4iv,"emscripten_glUniformMatrix2fv":_emscripten_glUniformMatrix2fv,"emscripten_glUniformMatrix3fv":_emscripten_glUniformMatrix3fv,"emscripten_glUniformMatrix4fv":_emscripten_glUniformMatrix4fv,"emscripten_glUseProgram":_emscripten_glUseProgram,"emscripten_glValidateProgram":_emscripten_glValidateProgram,"emscripten_glVertexAttrib1f":_emscripten_glVertexAttrib1f,"emscripten_glVertexAttrib1fv":_emscripten_glVertexAttrib1fv,"emscripten_glVertexAttrib2f":_emscripten_glVertexAttrib2f,"emscripten_glVertexAttrib2fv":_emscripten_glVertexAttrib2fv,"emscripten_glVertexAttrib3f":_emscripten_glVertexAttrib3f,"emscripten_glVertexAttrib3fv":_emscripten_glVertexAttrib3fv,"emscripten_glVertexAttrib4f":_emscripten_glVertexAttrib4f,"emscripten_glVertexAttrib4fv":_emscripten_glVertexAttrib4fv,"emscripten_glVertexAttribDivisorANGLE":_emscripten_glVertexAttribDivisorANGLE,"emscripten_glVertexAttribPointer":_emscripten_glVertexAttribPointer,"emscripten_glViewport":_emscripten_glViewport,"emscripten_has_asyncify":_emscripten_has_asyncify,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_request_fullscreen_strategy":_emscripten_request_fullscreen_strategy,"emscripten_request_pointerlock":_emscripten_request_pointerlock,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_sample_gamepad_data":_emscripten_sample_gamepad_data,"emscripten_set_beforeunload_callback_on_thread":_emscripten_set_beforeunload_callback_on_thread,"emscripten_set_blur_callback_on_thread":_emscripten_set_blur_callback_on_thread,"emscripten_set_canvas_element_size":_emscripten_set_canvas_element_size,"emscripten_set_element_css_size":_emscripten_set_element_css_size,"emscripten_set_focus_callback_on_thread":_emscripten_set_focus_callback_on_thread,"emscripten_set_fullscreenchange_callback_on_thread":_emscripten_set_fullscreenchange_callback_on_thread,"emscripten_set_gamepadconnected_callback_on_thread":_emscripten_set_gamepadconnected_callback_on_thread,"emscripten_set_gamepaddisconnected_callback_on_thread":_emscripten_set_gamepaddisconnected_callback_on_thread,"emscripten_set_keydown_callback_on_thread":_emscripten_set_keydown_callback_on_thread,"emscripten_set_keypress_callback_on_thread":_emscripten_set_keypress_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_mouseenter_callback_on_thread":_emscripten_set_mouseenter_callback_on_thread,"emscripten_set_mouseleave_callback_on_thread":_emscripten_set_mouseleave_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_pointerlockchange_callback_on_thread":_emscripten_set_pointerlockchange_callback_on_thread,"emscripten_set_resize_callback_on_thread":_emscripten_set_resize_callback_on_thread,"emscripten_set_touchcancel_callback_on_thread":_emscripten_set_touchcancel_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_visibilitychange_callback_on_thread":_emscripten_set_visibilitychange_callback_on_thread,"emscripten_set_wheel_callback_on_thread":_emscripten_set_wheel_callback_on_thread,"emscripten_sleep":_emscripten_sleep,"environ_get":_environ_get,"environ_sizes_get":_environ_sizes_get,"exit":_exit,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"gettimeofday":_gettimeofday,"glActiveTexture":_glActiveTexture,"glAttachShader":_glAttachShader,"glBindBuffer":_glBindBuffer,"glBindTexture":_glBindTexture,"glBlendFunc":_glBlendFunc,"glBufferData":_glBufferData,"glClear":_glClear,"glClearColor":_glClearColor,"glCompileShader":_glCompileShader,"glCreateProgram":_glCreateProgram,"glCreateShader":_glCreateShader,"glDepthFunc":_glDepthFunc,"glDepthMask":_glDepthMask,"glDisable":_glDisable,"glDisableVertexAttribArray":_glDisableVertexAttribArray,"glDrawArrays":_glDrawArrays,"glEnable":_glEnable,"glEnableVertexAttribArray":_glEnableVertexAttribArray,"glGenBuffers":_glGenBuffers,"glGenTextures":_glGenTextures,"glGetAttribLocation":_glGetAttribLocation,"glGetShaderInfoLog":_glGetShaderInfoLog,"glGetShaderiv":_glGetShaderiv,"glGetUniformLocation":_glGetUniformLocation,"glLinkProgram":_glLinkProgram,"glPolygonOffset":_glPolygonOffset,"glScissor":_glScissor,"glShaderSource":_glShaderSource,"glTexImage2D":_glTexImage2D,"glTexParameteri":_glTexParameteri,"glUniform1i":_glUniform1i,"glUseProgram":_glUseProgram,"glVertexAttribPointer":_glVertexAttribPointer,"glViewport":_glViewport,"memory":wasmMemory,"nanosleep":_nanosleep,"setTempRet0":_setTempRet0,"sigaction":_sigaction,"signal":_signal,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["__wasm_call_ctors"].apply(null,arguments)};var _memcpy=Module["_memcpy"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["memcpy"].apply(null,arguments)};var _memset=Module["_memset"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["memset"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["malloc"].apply(null,arguments)};var _free=Module["_free"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["free"].apply(null,arguments)};var _main=Module["_main"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["main"].apply(null,arguments)};var _strstr=Module["_strstr"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["strstr"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["__errno_location"].apply(null,arguments)};var _fflush=Module["_fflush"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["fflush"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["emscripten_GetProcAddress"].apply(null,arguments)};var ___set_stack_limit=Module["___set_stack_limit"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["__set_stack_limit"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["stackSave"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["stackAlloc"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["stackRestore"].apply(null,arguments)};var __growWasmMemory=Module["__growWasmMemory"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["__growWasmMemory"].apply(null,arguments)};var dynCall_i=Module["dynCall_i"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_i"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_v"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iiii"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vi"].apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iii"].apply(null,arguments)};var dynCall_vd=Module["dynCall_vd"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vd"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_ii"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viii"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vii"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viiii"].apply(null,arguments)};var dynCall_d=Module["dynCall_d"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_d"].apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iiiii"].apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iiiiii"].apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_jiji"].apply(null,arguments)};var dynCall_ji=Module["dynCall_ji"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_ji"].apply(null,arguments)};var dynCall_iiiiidii=Module["dynCall_iiiiidii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iiiiidii"].apply(null,arguments)};var dynCall_iiiiiiiiii=Module["dynCall_iiiiiiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iiiiiiiiii"].apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iiiiiiiii"].apply(null,arguments)};var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viiiiiii"].apply(null,arguments)};var dynCall_viiiiiiiiiii=Module["dynCall_viiiiiiiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viiiiiiiiiii"].apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iiiiiiii"].apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_iidiiii"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viiiii"].apply(null,arguments)};var dynCall_vffff=Module["dynCall_vffff"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vffff"].apply(null,arguments)};var dynCall_vf=Module["dynCall_vf"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vf"].apply(null,arguments)};var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viiiiiiii"].apply(null,arguments)};var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viiiiiiiii"].apply(null,arguments)};var dynCall_vff=Module["dynCall_vff"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vff"].apply(null,arguments)};var dynCall_vfi=Module["dynCall_vfi"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vfi"].apply(null,arguments)};var dynCall_viif=Module["dynCall_viif"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viif"].apply(null,arguments)};var dynCall_vif=Module["dynCall_vif"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vif"].apply(null,arguments)};var dynCall_viff=Module["dynCall_viff"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viff"].apply(null,arguments)};var dynCall_vifff=Module["dynCall_vifff"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_vifff"].apply(null,arguments)};var dynCall_viffff=Module["dynCall_viffff"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viffff"].apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){assert(runtimeInitialized,'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');assert(!runtimeExited,'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');return Module["asm"]["dynCall_viiiiii"].apply(null,arguments)};Module['asm']=asm;if(!Object.getOwnPropertyDescriptor(Module,"intArrayFromString"))Module["intArrayFromString"]=function(){abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"intArrayToString"))Module["intArrayToString"]=function(){abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ccall"))Module["ccall"]=function(){abort("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"cwrap"))Module["cwrap"]=function(){abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setValue"))Module["setValue"]=function(){abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getValue"))Module["getValue"]=function(){abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"allocate"))Module["allocate"]=function(){abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getMemory"))Module["getMemory"]=function(){abort("'getMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"UTF8ArrayToString"))Module["UTF8ArrayToString"]=function(){abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UTF8ToString"))Module["UTF8ToString"]=function(){abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8Array"))Module["stringToUTF8Array"]=function(){abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8"))Module["stringToUTF8"]=function(){abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF8"))Module["lengthBytesUTF8"]=function(){abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=function(){abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnPreRun"))Module["addOnPreRun"]=function(){abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnInit"))Module["addOnInit"]=function(){abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnPreMain"))Module["addOnPreMain"]=function(){abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnExit"))Module["addOnExit"]=function(){abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnPostRun"))Module["addOnPostRun"]=function(){abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeStringToMemory"))Module["writeStringToMemory"]=function(){abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeArrayToMemory"))Module["writeArrayToMemory"]=function(){abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeAsciiToMemory"))Module["writeAsciiToMemory"]=function(){abort("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addRunDependency"))Module["addRunDependency"]=function(){abort("'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"removeRunDependency"))Module["removeRunDependency"]=function(){abort("'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createFolder"))Module["FS_createFolder"]=function(){abort("'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createPath"))Module["FS_createPath"]=function(){abort("'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createDataFile"))Module["FS_createDataFile"]=function(){abort("'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createPreloadedFile"))Module["FS_createPreloadedFile"]=function(){abort("'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createLazyFile"))Module["FS_createLazyFile"]=function(){abort("'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createLink"))Module["FS_createLink"]=function(){abort("'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createDevice"))Module["FS_createDevice"]=function(){abort("'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_unlink"))Module["FS_unlink"]=function(){abort("'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"dynamicAlloc"))Module["dynamicAlloc"]=function(){abort("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"loadDynamicLibrary"))Module["loadDynamicLibrary"]=function(){abort("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"loadWebAssemblyModule"))Module["loadWebAssemblyModule"]=function(){abort("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getLEB"))Module["getLEB"]=function(){abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getFunctionTables"))Module["getFunctionTables"]=function(){abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"alignFunctionTables"))Module["alignFunctionTables"]=function(){abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerFunctions"))Module["registerFunctions"]=function(){abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addFunction"))Module["addFunction"]=function(){abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"removeFunction"))Module["removeFunction"]=function(){abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getFuncWrapper"))Module["getFuncWrapper"]=function(){abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"prettyPrint"))Module["prettyPrint"]=function(){abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"makeBigInt"))Module["makeBigInt"]=function(){abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"dynCall"))Module["dynCall"]=function(){abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getCompilerSetting"))Module["getCompilerSetting"]=function(){abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"print"))Module["print"]=function(){abort("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"printErr"))Module["printErr"]=function(){abort("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getTempRet0"))Module["getTempRet0"]=function(){abort("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setTempRet0"))Module["setTempRet0"]=function(){abort("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};Module["callMain"]=callMain;if(!Object.getOwnPropertyDescriptor(Module,"abort"))Module["abort"]=function(){abort("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToNewUTF8"))Module["stringToNewUTF8"]=function(){abort("'stringToNewUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"abortOnCannotGrowMemory"))Module["abortOnCannotGrowMemory"]=function(){abort("'abortOnCannotGrowMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscripten_realloc_buffer"))Module["emscripten_realloc_buffer"]=function(){abort("'emscripten_realloc_buffer' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ENV"))Module["ENV"]=function(){abort("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setjmpId"))Module["setjmpId"]=function(){abort("'setjmpId' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_CODES"))Module["ERRNO_CODES"]=function(){abort("'ERRNO_CODES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_MESSAGES"))Module["ERRNO_MESSAGES"]=function(){abort("'ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"DNS"))Module["DNS"]=function(){abort("'DNS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GAI_ERRNO_MESSAGES"))Module["GAI_ERRNO_MESSAGES"]=function(){abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"Protocols"))Module["Protocols"]=function(){abort("'Protocols' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"Sockets"))Module["Sockets"]=function(){abort("'Sockets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UNWIND_CACHE"))Module["UNWIND_CACHE"]=function(){abort("'UNWIND_CACHE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readAsmConstArgs"))Module["readAsmConstArgs"]=function(){abort("'readAsmConstArgs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"jstoi_q"))Module["jstoi_q"]=function(){abort("'jstoi_q' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"jstoi_s"))Module["jstoi_s"]=function(){abort("'jstoi_s' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"PATH"))Module["PATH"]=function(){abort("'PATH' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"PATH_FS"))Module["PATH_FS"]=function(){abort("'PATH_FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SYSCALLS"))Module["SYSCALLS"]=function(){abort("'SYSCALLS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"syscallMmap2"))Module["syscallMmap2"]=function(){abort("'syscallMmap2' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"syscallMunmap"))Module["syscallMunmap"]=function(){abort("'syscallMunmap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"JSEvents"))Module["JSEvents"]=function(){abort("'JSEvents' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"demangle"))Module["demangle"]=function(){abort("'demangle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"demangleAll"))Module["demangleAll"]=function(){abort("'demangleAll' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"jsStackTrace"))Module["jsStackTrace"]=function(){abort("'jsStackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=function(){abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64"))Module["writeI53ToI64"]=function(){abort("'writeI53ToI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Clamped"))Module["writeI53ToI64Clamped"]=function(){abort("'writeI53ToI64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Signaling"))Module["writeI53ToI64Signaling"]=function(){abort("'writeI53ToI64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Clamped"))Module["writeI53ToU64Clamped"]=function(){abort("'writeI53ToU64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Signaling"))Module["writeI53ToU64Signaling"]=function(){abort("'writeI53ToU64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readI53FromI64"))Module["readI53FromI64"]=function(){abort("'readI53FromI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readI53FromU64"))Module["readI53FromU64"]=function(){abort("'readI53FromU64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"convertI32PairToI53"))Module["convertI32PairToI53"]=function(){abort("'convertI32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"convertU32PairToI53"))Module["convertU32PairToI53"]=function(){abort("'convertU32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"Browser"))Module["Browser"]=function(){abort("'Browser' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"FS"))Module["FS"]=function(){abort("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"MEMFS"))Module["MEMFS"]=function(){abort("'MEMFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"TTY"))Module["TTY"]=function(){abort("'TTY' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"PIPEFS"))Module["PIPEFS"]=function(){abort("'PIPEFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SOCKFS"))Module["SOCKFS"]=function(){abort("'SOCKFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GL"))Module["GL"]=function(){abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGet"))Module["emscriptenWebGLGet"]=function(){abort("'emscriptenWebGLGet' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetTexPixelData"))Module["emscriptenWebGLGetTexPixelData"]=function(){abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetUniform"))Module["emscriptenWebGLGetUniform"]=function(){abort("'emscriptenWebGLGetUniform' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetVertexAttrib"))Module["emscriptenWebGLGetVertexAttrib"]=function(){abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"AL"))Module["AL"]=function(){abort("'AL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SDL"))Module["SDL"]=function(){abort("'SDL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SDL_gfx"))Module["SDL_gfx"]=function(){abort("'SDL_gfx' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLUT"))Module["GLUT"]=function(){abort("'GLUT' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"EGL"))Module["EGL"]=function(){abort("'EGL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLFW_Window"))Module["GLFW_Window"]=function(){abort("'GLFW_Window' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLFW"))Module["GLFW"]=function(){abort("'GLFW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLEW"))Module["GLEW"]=function(){abort("'GLEW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"IDBStore"))Module["IDBStore"]=function(){abort("'IDBStore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"runAndAbortIfError"))Module["runAndAbortIfError"]=function(){abort("'runAndAbortIfError' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"warnOnce"))Module["warnOnce"]=function(){abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackSave"))Module["stackSave"]=function(){abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackRestore"))Module["stackRestore"]=function(){abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackAlloc"))Module["stackAlloc"]=function(){abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"AsciiToString"))Module["AsciiToString"]=function(){abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToAscii"))Module["stringToAscii"]=function(){abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UTF16ToString"))Module["UTF16ToString"]=function(){abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF16"))Module["stringToUTF16"]=function(){abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF16"))Module["lengthBytesUTF16"]=function(){abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UTF32ToString"))Module["UTF32ToString"]=function(){abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF32"))Module["stringToUTF32"]=function(){abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF32"))Module["lengthBytesUTF32"]=function(){abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8"))Module["allocateUTF8"]=function(){abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8OnStack"))Module["allocateUTF8OnStack"]=function(){abort("'allocateUTF8OnStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")};Module["writeStackCookie"]=writeStackCookie;Module["checkStackCookie"]=checkStackCookie;Module["abortStackOverflow"]=abortStackOverflow;if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_NORMAL"))Object.defineProperty(Module,"ALLOC_NORMAL",{configurable:true,get:function(){abort("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}});if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_STACK"))Object.defineProperty(Module,"ALLOC_STACK",{configurable:true,get:function(){abort("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}});if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_DYNAMIC"))Object.defineProperty(Module,"ALLOC_DYNAMIC",{configurable:true,get:function(){abort("'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}});if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_NONE"))Object.defineProperty(Module,"ALLOC_NONE",{configurable:true,get:function(){abort("'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)")}});var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status;} var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller;};function callMain(args){assert(runDependencies==0,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])');assert(__ATPRERUN__.length==0,'cannot call main when preRun functions remain to be called');var entryFunction=Module['_main'];args=args||[];var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(thisProgram);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1]);} HEAP32[(argv>>2)+argc]=0;try{Module['___set_stack_limit'](STACK_MAX);var ret=entryFunction(argc,argv);exit(ret,true);} catch(e){if(e instanceof ExitStatus){return;}else if(e=='unwind'){noExitRuntime=true;return;}else{var toLog=e;if(e&&typeof e==='object'&&e.stack){toLog=[e,e.stack];} err('exception thrown: '+toLog);quit_(1,e);}}finally{calledMain=true;}} function run(args){args=args||arguments_;if(runDependencies>0){return;} writeStackCookie();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();} checkStackCookie();} Module['run']=run;function checkUnflushedContent(){var print=out;var printErr=err;var has=false;out=err=function(x){has=true;} try{var flush=Module['_fflush'];if(flush)flush(0);['stdout','stderr'].forEach(function(name){var info=FS.analyzePath('/dev/'+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty&&tty.output&&tty.output.length){has=true;}});}catch(e){} out=print;err=printErr;if(has){warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.');}} function exit(status,implicit){checkUnflushedContent();if(implicit&&noExitRuntime&&status===0){return;} if(noExitRuntime){if(!implicit){err('program exited (with status: '+status+'), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)');}}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module['onExit'])Module['onExit'](status);} quit_(status,new ExitStatus(status));} 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;noExitRuntime=true;run();