From 99712a2ea36a62610caba2dea4e9806a30c87c43 Mon Sep 17 00:00:00 2001 From: san <44402346+SanGraphic@users.noreply.github.com> Date: Mon, 2 Mar 2026 13:36:01 +0300 Subject: [PATCH] fix multi-touch further --- index.js | 2 +- index.wasm | Bin 7891379 -> 7891322 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 1a06e24..011f08f 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -(function(){function humanReadableVersionToPacked(str){str=str.split("-")[0];var vers=str.split(".").slice(0,3);while(vers.length<3)vers.push("00");vers=vers.map((n,i,arr)=>n.padStart(2,"0"));return vers.join("")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(".");var TARGET_NOT_SUPPORTED=2147483647;var currentNodeVersion=typeof process!=="undefined"&&process.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<16e4){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(16e4)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}var userAgent=typeof navigator!=="undefined"&&navigator.userAgent;if(!userAgent){return}var currentSafariVersion=userAgent.includes("Safari/")&&!userAgent.includes("Chrome/")&&userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)?humanReadableVersionToPacked(userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(!Module["expectedDataFileDownloads"])Module["expectedDataFileDownloads"]=0;Module["expectedDataFileDownloads"]++;(()=>{var isPthread=typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD;var isWasmWorker=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;if(isPthread||isWasmWorker)return;var isNode=globalThis.process&&globalThis.process.versions&&globalThis.process.versions.node&&globalThis.process.type!="renderer";async function loadPackage(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/")}var PACKAGE_NAME="index.data";var REMOTE_PACKAGE_BASE="index.data";var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];async function fetchRemotePackage(packageName,packageSize){if(isNode){var contents=require("fs").readFileSync(packageName);return new Uint8Array(contents).buffer}if(!Module["dataFileDownloads"])Module["dataFileDownloads"]={};try{var response=await fetch(packageName)}catch(e){throw new Error(`Network Error: ${packageName}`,{e})}if(!response.ok){throw new Error(`${response.status}: ${response.url}`)}const chunks=[];const headers=response.headers;const total=Number(headers.get("Content-Length")||packageSize);let loaded=0;Module["setStatus"]&&Module["setStatus"]("Downloading data...");const reader=response.body.getReader();while(1){var{done,value}=await reader.read();if(done)break;chunks.push(value);loaded+=value.length;Module["dataFileDownloads"][packageName]={loaded,total};let totalLoaded=0;let totalSize=0;for(const download of Object.values(Module["dataFileDownloads"])){totalLoaded+=download.loaded;totalSize+=download.total}Module["setStatus"]&&Module["setStatus"](`Downloading data... (${totalLoaded}/${totalSize})`)}const packageData=new Uint8Array(chunks.map(c=>c.length).reduce((a,b)=>a+b,0));let offset=0;for(const chunk of chunks){packageData.set(chunk,offset);offset+=chunk.length}return packageData.buffer}var fetchPromise;var fetched=Module["getPreloadedPackage"]&&Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE);if(!fetched){fetchPromise=fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE)}async function runWithFS(Module){function assert(check,msg){if(!check)throw new Error(msg)}Module["FS_createPath"]("/","data",true,true);Module["FS_createPath"]("/data","app",true,true);Module["FS_createPath"]("/data/app","ios",true,true);Module["FS_createPath"]("/data/app/ios","dialog",true,true);Module["FS_createPath"]("/data/app/ios/dialog","ipad",true,true);Module["FS_createPath"]("/data/app/ios","dialog2",true,true);Module["FS_createPath"]("/data/app/ios","icons",true,true);Module["FS_createPath"]("/data/app","launch",true,true);Module["FS_createPath"]("/data","fonts",true,true);Module["FS_createPath"]("/data","images",true,true);Module["FS_createPath"]("/data/images","armor",true,true);Module["FS_createPath"]("/data/images","art",true,true);Module["FS_createPath"]("/data/images","environment",true,true);Module["FS_createPath"]("/data/images","font",true,true);Module["FS_createPath"]("/data/images","gui",true,true);Module["FS_createPath"]("/data/images/gui","badge",true,true);Module["FS_createPath"]("/data/images/gui","logo",true,true);Module["FS_createPath"]("/data/images","item",true,true);Module["FS_createPath"]("/data/images","mob",true,true);Module["FS_createPath"]("/data","lang",true,true);Module["FS_createPath"]("/data","sound",true,true);Module["FS_createPath"]("/data/sound","aac",true,true);Module["FS_createPath"]("/data/sound/aac","damage",true,true);Module["FS_createPath"]("/data/sound/aac","mob",true,true);Module["FS_createPath"]("/data/sound/aac","random",true,true);Module["FS_createPath"]("/data/sound/aac","step",true,true);for(var file of metadata["files"]){var name=file["filename"];Module["addRunDependency"](`fp ${name}`)}async function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer.constructor.name===ArrayBuffer.name,"bad input to processPackageData "+arrayBuffer.constructor.name);var byteArray=new Uint8Array(arrayBuffer);for(var file of metadata["files"]){var name=file["filename"];var data=byteArray.subarray(file["start"],file["end"]);Module["FS_createDataFile"](name,null,data,true,true,true);Module["removeRunDependency"](`fp ${name}`)}Module["removeRunDependency"]("datafile_index.data")}Module["addRunDependency"]("datafile_index.data");if(!Module["preloadResults"])Module["preloadResults"]={};Module["preloadResults"][PACKAGE_NAME]={fromCache:false};if(!fetched){fetched=await fetchPromise}processPackageData(fetched)}if(Module["calledRun"]){runWithFS(Module)}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}}loadPackage({files:[{filename:"/data/.DS_Store",start:0,end:14340},{filename:"/data/app/.DS_Store",start:14340,end:24584},{filename:"/data/app/ios/bg128.png",start:24584,end:26300},{filename:"/data/app/ios/bg64.png",start:26300,end:27045},{filename:"/data/app/ios/dialog/cancel_0.png",start:27045,end:28929},{filename:"/data/app/ios/dialog/cancel_0_1.png",start:28929,end:29566},{filename:"/data/app/ios/dialog/cancel_0_3.png",start:29566,end:30490},{filename:"/data/app/ios/dialog/cancel_1.png",start:30490,end:32433},{filename:"/data/app/ios/dialog/cancel_1_1.png",start:32433,end:33106},{filename:"/data/app/ios/dialog/cancel_1_3.png",start:33106,end:34078},{filename:"/data/app/ios/dialog/create_0.png",start:34078,end:36012},{filename:"/data/app/ios/dialog/create_0_1.png",start:36012,end:36664},{filename:"/data/app/ios/dialog/create_0_3.png",start:36664,end:37604},{filename:"/data/app/ios/dialog/create_1.png",start:37604,end:39600},{filename:"/data/app/ios/dialog/create_1_1.png",start:39600,end:40301},{filename:"/data/app/ios/dialog/create_1_3.png",start:40301,end:41313},{filename:"/data/app/ios/dialog/ipad/cancel_0_4.png",start:41313,end:42336},{filename:"/data/app/ios/dialog/ipad/cancel_1_4.png",start:42336,end:43391},{filename:"/data/app/ios/dialog/ipad/create_0_4.png",start:43391,end:44476},{filename:"/data/app/ios/dialog/ipad/create_1_4.png",start:44476,end:45606},{filename:"/data/app/ios/dialog/ipad/creative_0_4.png",start:45606,end:46776},{filename:"/data/app/ios/dialog/ipad/creative_1_4.png",start:46776,end:49453},{filename:"/data/app/ios/dialog/ipad/creative_3_4.png",start:49453,end:52042},{filename:"/data/app/ios/dialog/ipad/survival_0_4.png",start:52042,end:53174},{filename:"/data/app/ios/dialog/ipad/survival_1_4.png",start:53174,end:55763},{filename:"/data/app/ios/dialog/ipad/survival_3_4.png",start:55763,end:58264},{filename:"/data/app/ios/dialog/ipad/worldname_ipad_4.png",start:58264,end:59195},{filename:"/data/app/ios/dialog/save_0.png",start:59195,end:61016},{filename:"/data/app/ios/dialog/save_0_3.png",start:61016,end:62351},{filename:"/data/app/ios/dialog/save_1.png",start:62351,end:64232},{filename:"/data/app/ios/dialog/save_1_3.png",start:64232,end:65621},{filename:"/data/app/ios/dialog/worldname_ipad.png",start:65621,end:66160},{filename:"/data/app/ios/dialog/worldname_ipad_3.png",start:66160,end:67806},{filename:"/data/app/ios/dialog/worldname_iphone.png",start:67806,end:68327},{filename:"/data/app/ios/dialog/worldname_iphone_3.png",start:68327,end:69863},{filename:"/data/app/ios/dialog2/cancel_0_1.png",start:69863,end:70475},{filename:"/data/app/ios/dialog2/cancel_0_3.png",start:70475,end:73754},{filename:"/data/app/ios/dialog2/cancel_1_1.png",start:73754,end:74386},{filename:"/data/app/ios/dialog2/cancel_1_3.png",start:74386,end:77722},{filename:"/data/app/ios/dialog2/create_0_1.png",start:77722,end:78352},{filename:"/data/app/ios/dialog2/create_0_3.png",start:78352,end:81657},{filename:"/data/app/ios/dialog2/create_1_1.png",start:81657,end:82306},{filename:"/data/app/ios/dialog2/create_1_3.png",start:82306,end:85662},{filename:"/data/app/ios/dialog2/creative_0_3.png",start:85662,end:89044},{filename:"/data/app/ios/dialog2/creative_1_3.png",start:89044,end:92470},{filename:"/data/app/ios/dialog2/survival_0_3.png",start:92470,end:95828},{filename:"/data/app/ios/dialog2/survival_1_3.png",start:95828,end:99237},{filename:"/data/app/ios/dialog2/worldname.png",start:99237,end:99826},{filename:"/data/app/ios/dialog2/worldname_3.png",start:99826,end:101669},{filename:"/data/app/ios/dialog2/worldname_ipad.png",start:101669,end:102208},{filename:"/data/app/ios/dialog2/worldname_ipad_3.png",start:102208,end:103854},{filename:"/data/app/ios/dialog2/worldname_iphone.png",start:103854,end:106920},{filename:"/data/app/ios/dialog2/worldname_iphone5_3.png",start:106920,end:110143},{filename:"/data/app/ios/dialog2/worldname_iphone_3.png",start:110143,end:113331},{filename:"/data/app/ios/icons/Icon-72.png",start:113331,end:125786},{filename:"/data/app/ios/icons/Icon-72_lite.png",start:125786,end:139006},{filename:"/data/app/ios/icons/Icon-Small-50.png",start:139006,end:147395},{filename:"/data/app/ios/icons/Icon-Small-50_lite.png",start:147395,end:156101},{filename:"/data/app/ios/icons/Icon-Small.png",start:156101,end:161103},{filename:"/data/app/ios/icons/Icon-Small@2x.png",start:161103,end:170855},{filename:"/data/app/ios/icons/Icon-Small@2x_lite.png",start:170855,end:181085},{filename:"/data/app/ios/icons/Icon-Small_lite.png",start:181085,end:186162},{filename:"/data/app/ios/icons/Icon.png",start:186162,end:195743},{filename:"/data/app/ios/icons/Icon@2x.png",start:195743,end:216449},{filename:"/data/app/ios/icons/Icon@2x_lite.png",start:216449,end:239100},{filename:"/data/app/ios/icons/Icon_lite.png",start:239100,end:249138},{filename:"/data/app/ios/icons/mcpe_ios_icon.png",start:249138,end:326889},{filename:"/data/app/ios/icons/mcpe_lite_ios_icon.png",start:326889,end:419849},{filename:"/data/app/launch/Default-Landscape~ipad.png",start:419849,end:487606},{filename:"/data/app/launch/Default.png",start:487606,end:507878},{filename:"/data/app/launch/Default@2x.png",start:507878,end:576450},{filename:"/data/fonts/minecraft.ttf",start:576450,end:594126},{filename:"/data/images/armor/chain_1.png",start:594126,end:595090},{filename:"/data/images/armor/chain_2.png",start:595090,end:595613},{filename:"/data/images/armor/cloth_1.png",start:595613,end:596752},{filename:"/data/images/armor/cloth_2.png",start:596752,end:597462},{filename:"/data/images/armor/diamond_1.png",start:597462,end:598680},{filename:"/data/images/armor/diamond_2.png",start:598680,end:599404},{filename:"/data/images/armor/gold_1.png",start:599404,end:600602},{filename:"/data/images/armor/gold_2.png",start:600602,end:601310},{filename:"/data/images/armor/iron_1.png",start:601310,end:602443},{filename:"/data/images/armor/iron_2.png",start:602443,end:603129},{filename:"/data/images/art/kz.png",start:603129,end:688716},{filename:"/data/images/environment/clouds.png",start:688716,end:702428},{filename:"/data/images/font/default8.png",start:702428,end:704579},{filename:"/data/images/gui/background.png",start:704579,end:704947},{filename:"/data/images/gui/badge/minecon140.png",start:704947,end:708051},{filename:"/data/images/gui/bg32.png",start:708051,end:708559},{filename:"/data/images/gui/cursor.png",start:708559,end:708840},{filename:"/data/images/gui/default_world.png",start:708840,end:734078},{filename:"/data/images/gui/gui.png",start:734078,end:757630},{filename:"/data/images/gui/gui2.png",start:757630,end:771514},{filename:"/data/images/gui/gui_blocks.png",start:771514,end:949518},{filename:"/data/images/gui/icons.png",start:949518,end:951958},{filename:"/data/images/gui/itemframe.png",start:951958,end:957198},{filename:"/data/images/gui/items.png",start:957198,end:986953},{filename:"/data/images/gui/logo/raknet_high_72.png",start:986953,end:1008342},{filename:"/data/images/gui/logo/raknet_low_18.png",start:1008342,end:1010185},{filename:"/data/images/gui/pi_title.png",start:1010185,end:1016956},{filename:"/data/images/gui/spritesheet.png",start:1016956,end:1028558},{filename:"/data/images/gui/title.png",start:1028558,end:1034363},{filename:"/data/images/gui/touchgui.png",start:1034363,end:1054072},{filename:"/data/images/item/arrows.png",start:1054072,end:1054394},{filename:"/data/images/item/camera.png",start:1054394,end:1055076},{filename:"/data/images/item/sign.png",start:1055076,end:1056336},{filename:"/data/images/mob/char.png",start:1056336,end:1057696},{filename:"/data/images/mob/chicken.png",start:1057696,end:1058188},{filename:"/data/images/mob/cow.png",start:1058188,end:1059566},{filename:"/data/images/mob/creeper.png",start:1059566,end:1062566},{filename:"/data/images/mob/pig.png",start:1062566,end:1065871},{filename:"/data/images/mob/pigzombie.png",start:1065871,end:1068904},{filename:"/data/images/mob/sheep.png",start:1068904,end:1071346},{filename:"/data/images/mob/sheep_fur.png",start:1071346,end:1072997},{filename:"/data/images/mob/skeleton.png",start:1072997,end:1073891},{filename:"/data/images/mob/spider.png",start:1073891,end:1076445},{filename:"/data/images/mob/zombie.png",start:1076445,end:1077760},{filename:"/data/images/particles.png",start:1077760,end:1079673},{filename:"/data/images/terrain.png",start:1079673,end:1171271},{filename:"/data/images/terrain.pvr",start:1171271,end:1204091},{filename:"/data/images/terrain.pvr4",start:1204091,end:1236911},{filename:"/data/images/terrain.pvrtc",start:1236911,end:1269731},{filename:"/data/images/terrain_4444.h",start:1269731,end:1631903},{filename:"/data/images/terrain_5551.h",start:1631903,end:1994075},{filename:"/data/images/terrain_565.h",start:1994075,end:2356246},{filename:"/data/images/terrain_565_2.h",start:2356246,end:2718419},{filename:"/data/lang/en_US.lang",start:2718419,end:2756216},{filename:"/data/sound/.DS_Store",start:2756216,end:2764412},{filename:"/data/sound/aac/damage/fallbig1.m4a",start:2764412,end:2771329},{filename:"/data/sound/aac/damage/fallbig2.m4a",start:2771329,end:2777145},{filename:"/data/sound/aac/damage/fallsmall.m4a",start:2777145,end:2781964},{filename:"/data/sound/aac/mob/chicken1.m4a",start:2781964,end:2787979},{filename:"/data/sound/aac/mob/chicken2.m4a",start:2787979,end:2795373},{filename:"/data/sound/aac/mob/chicken3.m4a",start:2795373,end:2800546},{filename:"/data/sound/aac/mob/chickenhurt1.m4a",start:2800546,end:2806365},{filename:"/data/sound/aac/mob/chickenhurt2.m4a",start:2806365,end:2810816},{filename:"/data/sound/aac/mob/chickenplop.m4a",start:2810816,end:2813571},{filename:"/data/sound/aac/mob/cow1.m4a",start:2813571,end:2825845},{filename:"/data/sound/aac/mob/cow2.m4a",start:2825845,end:2838056},{filename:"/data/sound/aac/mob/cow3.m4a",start:2838056,end:2855100},{filename:"/data/sound/aac/mob/cow4.m4a",start:2855100,end:2868384},{filename:"/data/sound/aac/mob/cowhurt1.m4a",start:2868384,end:2873572},{filename:"/data/sound/aac/mob/cowhurt2.m4a",start:2873572,end:2878551},{filename:"/data/sound/aac/mob/cowhurt3.m4a",start:2878551,end:2884169},{filename:"/data/sound/aac/mob/creeper1.m4a",start:2884169,end:2888019},{filename:"/data/sound/aac/mob/creeper2.m4a",start:2888019,end:2891908},{filename:"/data/sound/aac/mob/creeper3.m4a",start:2891908,end:2895799},{filename:"/data/sound/aac/mob/creeper4.m4a",start:2895799,end:2899766},{filename:"/data/sound/aac/mob/creeperdeath.m4a",start:2899766,end:2906877},{filename:"/data/sound/aac/mob/pig1.m4a",start:2906877,end:2911148},{filename:"/data/sound/aac/mob/pig2.m4a",start:2911148,end:2916104},{filename:"/data/sound/aac/mob/pig3.m4a",start:2916104,end:2920075},{filename:"/data/sound/aac/mob/pigdeath.m4a",start:2920075,end:2926194},{filename:"/data/sound/aac/mob/sheep1.m4a",start:2926194,end:2935469},{filename:"/data/sound/aac/mob/sheep2.m4a",start:2935469,end:2943914},{filename:"/data/sound/aac/mob/sheep3.m4a",start:2943914,end:2952094},{filename:"/data/sound/aac/mob/skeleton1.m4a",start:2952094,end:2957722},{filename:"/data/sound/aac/mob/skeleton2.m4a",start:2957722,end:2962414},{filename:"/data/sound/aac/mob/skeleton3.m4a",start:2962414,end:2967551},{filename:"/data/sound/aac/mob/skeletonhurt1.m4a",start:2967551,end:2971896},{filename:"/data/sound/aac/mob/skeletonhurt2.m4a",start:2971896,end:2976535},{filename:"/data/sound/aac/mob/skeletonhurt3.m4a",start:2976535,end:2981111},{filename:"/data/sound/aac/mob/skeletonhurt4.m4a",start:2981111,end:2985796},{filename:"/data/sound/aac/mob/spider1.m4a",start:2985796,end:2991905},{filename:"/data/sound/aac/mob/spider2.m4a",start:2991905,end:2996463},{filename:"/data/sound/aac/mob/spider3.m4a",start:2996463,end:3001465},{filename:"/data/sound/aac/mob/spider4.m4a",start:3001465,end:3005617},{filename:"/data/sound/aac/mob/spiderdeath.m4a",start:3005617,end:3013255},{filename:"/data/sound/aac/mob/zombie1.m4a",start:3013255,end:3026739},{filename:"/data/sound/aac/mob/zombie2.m4a",start:3026739,end:3039205},{filename:"/data/sound/aac/mob/zombie3.m4a",start:3039205,end:3056820},{filename:"/data/sound/aac/mob/zombiedeath.m4a",start:3056820,end:3064099},{filename:"/data/sound/aac/mob/zombiehurt1.m4a",start:3064099,end:3072478},{filename:"/data/sound/aac/mob/zombiehurt2.m4a",start:3072478,end:3080793},{filename:"/data/sound/aac/mob/zpig1.m4a",start:3080793,end:3088379},{filename:"/data/sound/aac/mob/zpig2.m4a",start:3088379,end:3097330},{filename:"/data/sound/aac/mob/zpig3.m4a",start:3097330,end:3101303},{filename:"/data/sound/aac/mob/zpig4.m4a",start:3101303,end:3106511},{filename:"/data/sound/aac/mob/zpigangry1.m4a",start:3106511,end:3113819},{filename:"/data/sound/aac/mob/zpigangry2.m4a",start:3113819,end:3117737},{filename:"/data/sound/aac/mob/zpigangry3.m4a",start:3117737,end:3125714},{filename:"/data/sound/aac/mob/zpigangry4.m4a",start:3125714,end:3134754},{filename:"/data/sound/aac/mob/zpigdeath.m4a",start:3134754,end:3144308},{filename:"/data/sound/aac/mob/zpighurt1.m4a",start:3144308,end:3148941},{filename:"/data/sound/aac/mob/zpighurt2.m4a",start:3148941,end:3153231},{filename:"/data/sound/aac/random/bow.m4a",start:3153231,end:3157233},{filename:"/data/sound/aac/random/bowhit1.m4a",start:3157233,end:3164586},{filename:"/data/sound/aac/random/bowhit2.m4a",start:3164586,end:3171317},{filename:"/data/sound/aac/random/bowhit3.m4a",start:3171317,end:3179607},{filename:"/data/sound/aac/random/bowhit4.m4a",start:3179607,end:3189674},{filename:"/data/sound/aac/random/click.m4a",start:3189674,end:3193876},{filename:"/data/sound/aac/random/door_close.m4a",start:3193876,end:3198112},{filename:"/data/sound/aac/random/door_open.m4a",start:3198112,end:3203054},{filename:"/data/sound/aac/random/eat1.m4a",start:3203054,end:3205946},{filename:"/data/sound/aac/random/eat2.m4a",start:3205946,end:3208969},{filename:"/data/sound/aac/random/eat3.m4a",start:3208969,end:3211916},{filename:"/data/sound/aac/random/explode.m4a",start:3211916,end:3217471},{filename:"/data/sound/aac/random/fuse.m4a",start:3217471,end:3231623},{filename:"/data/sound/aac/random/glass1.m4a",start:3231623,end:3238357},{filename:"/data/sound/aac/random/glass2.m4a",start:3238357,end:3244964},{filename:"/data/sound/aac/random/glass3.m4a",start:3244964,end:3251178},{filename:"/data/sound/aac/random/hurt.m4a",start:3251178,end:3259614},{filename:"/data/sound/aac/random/pop.m4a",start:3259614,end:3261709},{filename:"/data/sound/aac/random/splash.m4a",start:3261709,end:3267225},{filename:"/data/sound/aac/random/water.m4a",start:3267225,end:3289388},{filename:"/data/sound/aac/step/cloth1.m4a",start:3289388,end:3292423},{filename:"/data/sound/aac/step/cloth2.m4a",start:3292423,end:3295474},{filename:"/data/sound/aac/step/cloth3.m4a",start:3295474,end:3298585},{filename:"/data/sound/aac/step/cloth4.m4a",start:3298585,end:3301629},{filename:"/data/sound/aac/step/grass1.m4a",start:3301629,end:3306302},{filename:"/data/sound/aac/step/grass2.m4a",start:3306302,end:3311611},{filename:"/data/sound/aac/step/grass3.m4a",start:3311611,end:3316428},{filename:"/data/sound/aac/step/grass4.m4a",start:3316428,end:3321286},{filename:"/data/sound/aac/step/gravel2.m4a",start:3321286,end:3326853},{filename:"/data/sound/aac/step/gravel3.m4a",start:3326853,end:3332192},{filename:"/data/sound/aac/step/gravel4.m4a",start:3332192,end:3337716},{filename:"/data/sound/aac/step/ladder1.m4a",start:3337716,end:3341741},{filename:"/data/sound/aac/step/ladder2.m4a",start:3341741,end:3345771},{filename:"/data/sound/aac/step/ladder3.m4a",start:3345771,end:3350022},{filename:"/data/sound/aac/step/ladder4.m4a",start:3350022,end:3354033},{filename:"/data/sound/aac/step/sand1.m4a",start:3354033,end:3357372},{filename:"/data/sound/aac/step/sand2.m4a",start:3357372,end:3360260},{filename:"/data/sound/aac/step/sand3.m4a",start:3360260,end:3363432},{filename:"/data/sound/aac/step/sand4.m4a",start:3363432,end:3366752},{filename:"/data/sound/aac/step/snow1.m4a",start:3366752,end:3371137},{filename:"/data/sound/aac/step/snow2.m4a",start:3371137,end:3375747},{filename:"/data/sound/aac/step/snow3.m4a",start:3375747,end:3380433},{filename:"/data/sound/aac/step/snow4.m4a",start:3380433,end:3384864},{filename:"/data/sound/aac/step/stone1.m4a",start:3384864,end:3390935},{filename:"/data/sound/aac/step/stone2.m4a",start:3390935,end:3396074},{filename:"/data/sound/aac/step/stone3.m4a",start:3396074,end:3400648},{filename:"/data/sound/aac/step/stone4.m4a",start:3400648,end:3406155},{filename:"/data/sound/aac/step/wood1.m4a",start:3406155,end:3412657},{filename:"/data/sound/aac/step/wood2.m4a",start:3412657,end:3420117},{filename:"/data/sound/aac/step/wood3.m4a",start:3420117,end:3427275},{filename:"/data/sound/aac/step/wood4.m4a",start:3427275,end:3434908}],remote_package_size:3434908})})();if(typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER||typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD||typeof ENVIRONMENT_IS_AUDIO_WORKLET!="undefined"&&ENVIRONMENT_IS_AUDIO_WORKLET)Module["preRun"]=[];var necessaryPreJSTasks=Module["preRun"].slice();if(!Module["preRun"])throw"Module.preRun should exist because file support used it; did a pre-js delete it?";necessaryPreJSTasks.forEach(task=>{if(Module["preRun"].indexOf(task)<0)throw"All preRun tasks that exist before user pre-js code should remain after; did you replace Module or modify Module.preRun?"});var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=globalThis.document?.currentScript?.src;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(!isNode)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var fs=require("node:fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");assert(binary?Buffer.isBuffer(ret):typeof ret=="string");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}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{throw new Error("environment detection error")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary;if(!globalThis.WebAssembly){err("no native wasm support detected")}var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var isFileURI=filename=>filename.startsWith("file://");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=34821223;checkInt32(34821223);HEAPU32[max+4>>2]=2310721022;checkInt32(2310721022);HEAPU32[0>>2]=1668509029;checkInt32(1668509029)}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}var runtimeDebug=true;function dbg(...args){if(!runtimeDebug&&typeof runtimeDebug!="undefined")return;console.warn(...args)}(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function consumedModuleProp(prop){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,set(){abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_preloadFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function hookGlobalSymbolAccess(sym,func){if(!Object.getOwnPropertyDescriptor(globalThis,sym)){Object.defineProperty(globalThis,sym,{configurable:true,get(){func();return undefined}})}}function missingGlobal(sym,msg){hookGlobalSymbolAccess(sym,()=>{warnOnce(`\`${sym}\` is no longer defined by emscripten. ${msg}`)})}missingGlobal("buffer","Please use HEAP8.buffer or wasmMemory.buffer");missingGlobal("asm","Please use wasmExports instead");function missingLibrarySymbol(sym){hookGlobalSymbolAccess(sym,()=>{var msg=`\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;var librarySymbol=sym;if(!librarySymbol.startsWith("_")){librarySymbol="$"+sym}msg+=` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}warnOnce(msg)});unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var MAX_UINT8=2**8-1;var MAX_UINT16=2**16-1;var MAX_UINT32=2**32-1;var MAX_UINT53=2**53-1;var MAX_UINT64=2**64-1;var MIN_INT8=-(2**(8-1));var MIN_INT16=-(2**(16-1));var MIN_INT32=-(2**(32-1));var MIN_INT53=-(2**(53-1));var MIN_INT64=-(2**(64-1));function checkInt(value,bits,min,max){assert(Number.isInteger(Number(value)),`attempt to write non-integer (${value}) into integer heap`);assert(value<=max,`value (${value}) too large to write as ${bits}-bit value`);assert(value>=min,`value (${value}) too small to write as ${bits}-bit value`)}var checkInt8=value=>checkInt(value,8,MIN_INT8,MAX_UINT8);var checkInt16=value=>checkInt(value,16,MIN_INT16,MAX_UINT16);var checkInt32=value=>checkInt(value,32,MIN_INT32,MAX_UINT32);var checkInt64=value=>checkInt(value,64,MIN_INT64,MAX_UINT64);var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}consumedModuleProp("preRun");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;setStackLimits();checkStackCookie();SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function preMain(){checkStackCookie()}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}consumedModuleProp("postRun");callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);throw e}function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}var wasmBinaryFile;function findWasmBinary(){return locateFile("index.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{try{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);reject(e)}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var runDependencies=0;var dependenciesFulfilled=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"removeRunDependency requires an ID");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"addRunDependency requires an ID");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{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)")}},1e4);runDependencyWatcher.unref?.()}};var noExitRuntime=true;var ptrToString=ptr=>{assert(typeof ptr==="number",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var setStackLimits=()=>{var stackLow=_emscripten_stack_get_base();var stackHigh=_emscripten_stack_get_end();___set_stack_limits(stackLow,stackHigh)};function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;checkInt8(value);break;case"i8":HEAP8[ptr]=value;checkInt8(value);break;case"i16":HEAP16[ptr>>1]=value;checkInt16(value);break;case"i32":HEAP32[ptr>>2]=value;checkInt32(value);break;case"i64":HEAP64[ptr>>3]=BigInt(value);checkInt64(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught;checkInt8(caught)}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown;checkInt8(rethrown)}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var ___handle_stack_overflow=requested=>{var base=_emscripten_stack_get_base();var end=_emscripten_stack_get_end();abort(`stack overflow (Attempt to set SP to ${ptrToString(requested)}`+`, with stack limits [${ptrToString(end)} - ${ptrToString(base)}`+"]). If you require more stack space build with -sSTACK_SIZE=")};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var IDBFS={dbs:{},indexedDB:()=>{assert(typeof indexedDB!="undefined","IDBFS used, but indexedDB not supported");return indexedDB},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",queuePersist:mount=>{function onPersistComplete(){if(mount.idbPersistState==="again")startPersist();else mount.idbPersistState=0}function startPersist(){mount.idbPersistState="idb";IDBFS.syncfs(mount,false,onPersistComplete)}if(!mount.idbPersistState){mount.idbPersistState=setTimeout(startPersist,0)}else if(mount.idbPersistState==="idb"){mount.idbPersistState="again"}},mount:mount=>{var mnt=MEMFS.mount(mount);if(mount?.opts?.autoPersist){mount.idbPersistState=0;var memfs_node_ops=mnt.node_ops;mnt.node_ops={...mnt.node_ops};mnt.node_ops.mknod=(parent,name,mode,dev)=>{var node=memfs_node_ops.mknod(parent,name,mode,dev);node.node_ops=mnt.node_ops;node.idbfs_mount=mnt.mount;node.memfs_stream_ops=node.stream_ops;node.stream_ops={...node.stream_ops};node.stream_ops.write=(stream,buffer,offset,length,position,canOwn)=>{stream.node.isModified=true;return node.memfs_stream_ops.write(stream,buffer,offset,length,position,canOwn)};node.stream_ops.close=stream=>{var n=stream.node;if(n.isModified){IDBFS.queuePersist(n.idbfs_mount);n.isModified=false}if(n.memfs_stream_ops.close)return n.memfs_stream_ops.close(stream)};IDBFS.queuePersist(mnt.mount);return node};mnt.node_ops.rmdir=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rmdir(...args));mnt.node_ops.symlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.symlink(...args));mnt.node_ops.unlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.unlink(...args));mnt.node_ops.rename=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rename(...args))}return mnt},syncfs:(mount,populate,callback)=>{IDBFS.getLocalSet(mount,(err,local)=>{if(err)return callback(err);IDBFS.getRemoteSet(mount,(err,remote)=>{if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},quit:()=>{for(var value of Object.values(IDBFS.dbs)){value.close()}IDBFS.dbs={}},getDB:(name,callback)=>{var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=e=>{var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=()=>{db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=e=>{callback(e.target.error);e.preventDefault()}},getLocalSet:(mount,callback)=>{var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return p=>PATH.join2(root,p)}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push(...FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries})},getRemoteSet:(mount,callback)=>{var entries={};IDBFS.getDB(mount.mountpoint,(err,db)=>{if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=e=>{callback(e.target.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=event=>{var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db,entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:(path,callback)=>{var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:(path,entry,callback)=>{try{if(FS.isDir(entry["mode"])){FS.mkdirTree(path,entry["mode"])}else if(FS.isFile(entry["mode"])){FS.writeFile(path,entry["contents"],{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry["mode"]);FS.utime(path,entry["timestamp"],entry["timestamp"])}catch(e){return callback(e)}callback(null)},removeLocalEntry:(path,callback)=>{try{var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:(store,path,callback)=>{var req=store.get(path);req.onsuccess=event=>callback(null,event.target.result);req.onerror=e=>{callback(e.target.error);e.preventDefault()}},storeRemoteEntry:(store,path,entry,callback)=>{try{var req=store.put(entry,path)}catch(e){callback(e);return}req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},removeRemoteEntry:(store,path,callback)=>{var req=store.delete(path);req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},reconcile:(src,dst,callback)=>{var total=0;var create=[];for(var[key,e]of Object.entries(src.entries)){var e2=dst.entries[key];if(!e2||e["timestamp"].getTime()!=e2["timestamp"].getTime()){create.push(key);total++}}var remove=[];for(var key of Object.keys(dst.entries)){if(!src.entries[key]){remove.push(key);total++}}if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=transaction.onabort=e=>{done(e.target.error);e.preventDefault()};transaction.oncomplete=e=>{if(!errored){callback(null)}};for(const path of create.sort()){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(err,entry)=>{if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,(err,entry)=>{if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}}for(var path of remove.sort().reverse()){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}}};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){assert(plugin["handle"].constructor.name==="AsyncFunction","Filesystem plugin handlers must be async functions (See #24914)");return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class extends Error{name="ErrnoError";constructor(errno){super(runtimeInitialized?strError(errno):"");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}if(perms.includes("w")&&!(node.mode&146)){return 2}if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else if(FS.isDir(node.mode)){return 31}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(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,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS,IDBFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;var handleOpen=function(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,isBinary){if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){SOCKFS.emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){SOCKFS.emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;checkInt32(bytes);return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",function(ws){if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",function(){SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",function(error){sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16;checkInt32(16)}HEAP16[sa>>1]=family;checkInt16(family);HEAP32[sa+4>>2]=addr;checkInt32(addr);HEAP16[sa+2>>1]=_htons(port);checkInt16(_htons(port));break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28;checkInt32(28)}HEAP32[sa>>2]=family;checkInt32(family);HEAP32[sa+8>>2]=addr[0];checkInt32(addr[0]);HEAP32[sa+12>>2]=addr[1];checkInt32(addr[1]);HEAP32[sa+16>>2]=addr[2];checkInt32(addr[2]);HEAP32[sa+20>>2]=addr[3];checkInt32(addr[3]);HEAP16[sa+2>>1]=_htons(port);checkInt16(_htons(port));break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,"exceeded max address mappings of 65535");addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen);assert(!errno)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var SYSCALLS={calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;checkInt32(stat.dev);HEAPU32[buf+4>>2]=stat.mode;checkInt32(stat.mode);HEAPU32[buf+8>>2]=stat.nlink;checkInt32(stat.nlink);HEAPU32[buf+12>>2]=stat.uid;checkInt32(stat.uid);HEAPU32[buf+16>>2]=stat.gid;checkInt32(stat.gid);HEAPU32[buf+20>>2]=stat.rdev;checkInt32(stat.rdev);HEAP64[buf+24>>3]=BigInt(stat.size);checkInt64(stat.size);HEAP32[buf+32>>2]=4096;checkInt32(4096);HEAP32[buf+36>>2]=stat.blocks;checkInt32(stat.blocks);var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));checkInt64(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;checkInt32(atime%1e3*1e3*1e3);HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));checkInt64(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;checkInt32(mtime%1e3*1e3*1e3);HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));checkInt64(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;checkInt32(ctime%1e3*1e3*1e3);HEAP64[buf+88>>3]=BigInt(stat.ino);checkInt64(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;checkInt32(stats.bsize);HEAPU32[buf+60>>2]=stats.bsize;checkInt32(stats.bsize);HEAP64[buf+8>>3]=BigInt(stats.blocks);checkInt64(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);checkInt64(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);checkInt64(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);checkInt64(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);checkInt64(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;checkInt32(stats.fsid);HEAPU32[buf+64>>2]=stats.flags;checkInt32(stats.flags);HEAPU32[buf+56>>2]=stats.namelen;checkInt32(stats.namelen)},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);assert(!flags||flags==512);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;checkInt16(2);return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{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 ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var startIdx=Math.floor(off/struct_size);var endIdx=Math.min(stream.getdents.length,startIdx+Math.floor(count/struct_size));for(var idx=startIdx;idx>3]=BigInt(id);checkInt64(id);HEAP64[dirp+pos+8>>3]=BigInt((idx+1)*struct_size);checkInt64((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;checkInt16(280);HEAP8[dirp+pos+18]=type;checkInt8(type);stringToUTF8(name,dirp+pos+19,256);pos+=struct_size}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getsockname(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);assert(!errno);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getsockopt(fd,level,optname,optval,optlen,d1){try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;checkInt32(sock.error);HEAP32[optlen>>2]=4;checkInt32(4);sock.error=null;return 0}}return-50}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;checkInt32(termios.c_iflag||0);HEAP32[argp+4>>2]=termios.c_oflag||0;checkInt32(termios.c_oflag||0);HEAP32[argp+8>>2]=termios.c_cflag||0;checkInt32(termios.c_cflag||0);HEAP32[argp+12>>2]=termios.c_lflag||0;checkInt32(termios.c_lflag||0);for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0;checkInt8(termios.c_cc[i]||0)}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;checkInt32(0);return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];checkInt16(winsize[0]);HEAP16[argp+2>>1]=winsize[1];checkInt16(winsize[1])}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;assert(!flags,`unknown flags in __syscall_newfstatat: ${flags}`);path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen);assert(!errno)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_sendto(fd,message,length,flags,addr,addr_len){try{var sock=getSocketFromFD(fd);if(!addr){return FS.write(sock.stream,HEAP8,message,length)}var dest=getSocketAddress(addr,addr_len);return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);assert(sock.stream.fd<64);return sock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(!flags){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("native code called abort()");var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw Infinity};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);checkInt32(Number(winterOffset!=summerOffset));var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffset{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func){err("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(!MainLoop.running){MainLoop.running=true}if(mode==0){MainLoop.scheduler=function MainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)}}else if(mode==1){MainLoop.scheduler=function MainLoop_scheduler_rAF(){MainLoop.requestAnimationFrame(MainLoop.runner)}}else{assert(mode==2);if(!MainLoop.setImmediate){if(globalThis.setImmediate){MainLoop.setImmediate=setImmediate}else{var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var MainLoop_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",MainLoop_setImmediate_messageHandler,true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}}MainLoop.scheduler=function MainLoop_scheduler_setImmediate(){MainLoop.setImmediate(MainLoop.runner)}}return 0};var _emscripten_get_now=()=>performance.now();var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=`program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;err(msg)}_proc_exit(status)};var _exit=exitJS;var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}checkStackCookie();if(e instanceof WebAssembly.RuntimeError){if(_emscripten_stack_get_current()<=0){err("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)")}}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{assert(!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.");MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){MainLoop.remainingBlockers=next}else{next=next+.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0){MainLoop.tickStartTime=_emscripten_get_now();if(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!")}}MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}MainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var callUserCallback=func=>{if(ABORT){err("user callback triggered after runtime exited or application aborted. Ignoring.");return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};var MainLoop={running:false,scheduler:null,currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining){if(remaining=MainLoop.nextRAF){MainLoop.nextRAF+=1e3/60}}var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(globalThis.requestAnimationFrame){requestAnimationFrame(func)}else{MainLoop.fakeRequestAnimationFrame(func)}}};var AL={QUEUE_INTERVAL:25,QUEUE_LOOKAHEAD:.1,DEVICE_NAME:"Emscripten OpenAL",CAPTURE_DEVICE_NAME:"Emscripten OpenAL capture",ALC_EXTENSIONS:{ALC_EXT_capture:true,ALC_SOFT_pause_device:true,ALC_SOFT_HRTF:true},AL_EXTENSIONS:{AL_EXT_float32:true,AL_SOFT_loop_points:true,AL_SOFT_source_length:true,AL_EXT_source_distance_model:true,AL_SOFT_source_spatialize:true},_alcErr:0,alcErr:0,deviceRefCounts:{},alcStringCache:{},paused:false,stringCache:{},contexts:{},currentCtx:null,buffers:{0:{id:0,refCount:0,audioBuf:null,frequency:0,bytesPerSample:2,channels:1,length:0}},paramArray:[],_nextId:1,newId:()=>AL.freeIds.length>0?AL.freeIds.pop():AL._nextId++,freeIds:[],scheduleContextAudio:ctx=>{if(MainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}for(var i in ctx.sources){AL.scheduleSourceAudio(ctx.sources[i])}},scheduleSourceAudio:(src,lookahead)=>{if(MainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}if(src.state!==4114){return}var currentTime=AL.updateSourceTime(src);var startTime=src.bufStartTime;var startOffset=src.bufOffset;var bufCursor=src.bufsProcessed;for(var i=0;i=src.bufQueue.length){if(src.looping){bufCursor%=src.bufQueue.length}else{break}}var buf=src.bufQueue[bufCursor%src.bufQueue.length];if(buf.length===0){skipCount++;if(skipCount===src.bufQueue.length){break}}else{var audioSrc=src.context.audioCtx.createBufferSource();audioSrc.buffer=buf.audioBuf;audioSrc.playbackRate.value=src.playbackRate;if(buf.audioBuf._loopStart||buf.audioBuf._loopEnd){audioSrc.loopStart=buf.audioBuf._loopStart;audioSrc.loopEnd=buf.audioBuf._loopEnd}var duration=0;if(src.type===4136&&src.looping){duration=Number.POSITIVE_INFINITY;audioSrc.loop=true;if(buf.audioBuf._loopStart){audioSrc.loopStart=buf.audioBuf._loopStart}if(buf.audioBuf._loopEnd){audioSrc.loopEnd=buf.audioBuf._loopEnd}}else{duration=(buf.audioBuf.duration-startOffset)/src.playbackRate}audioSrc._startOffset=startOffset;audioSrc._duration=duration;audioSrc._skipCount=skipCount;skipCount=0;audioSrc.connect(src.gain);if(typeof audioSrc.start!="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.start(startTime,startOffset)}else if(typeof audioSrc.noteOn!="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.noteOn(startTime)}audioSrc._startTime=startTime;src.audioQueue.push(audioSrc);startTime+=duration}startOffset=0;bufCursor++}},updateSourceTime:src=>{var currentTime=src.context.audioCtx.currentTime;if(src.state!==4114){return currentTime}if(!isFinite(src.bufStartTime)){src.bufStartTime=currentTime-src.bufOffset/src.playbackRate;src.bufOffset=0}var nextStartTime=0;while(src.audioQueue.length){var audioSrc=src.audioQueue[0];src.bufsProcessed+=audioSrc._skipCount;nextStartTime=audioSrc._startTime+audioSrc._duration;if(currentTime=src.bufQueue.length&&!src.looping){AL.setSourceState(src,4116)}else if(src.type===4136&&src.looping){var buf=src.bufQueue[0];if(buf.length===0){src.bufOffset=0}else{var delta=(currentTime-src.bufStartTime)*src.playbackRate;var loopStart=buf.audioBuf._loopStart||0;var loopEnd=buf.audioBuf._loopEnd||buf.audioBuf.duration;if(loopEnd<=loopStart){loopEnd=buf.audioBuf.duration}if(delta0){src.bufStartTime+=Math.floor((currentTime-src.bufStartTime)/srcDuration)*srcDuration}}for(var i=0;i=src.bufQueue.length){if(src.looping){src.bufsProcessed%=src.bufQueue.length}else{AL.setSourceState(src,4116);break}}var buf=src.bufQueue[src.bufsProcessed];if(buf.length>0){nextStartTime=src.bufStartTime+buf.audioBuf.duration/src.playbackRate;if(currentTime{AL.updateSourceTime(src);for(var i=1;i1){src.audioQueue.length=1}},stopSourceAudio:src=>{for(var i=0;i{if(state===4114){if(src.state===4114||src.state==4116){src.bufsProcessed=0;src.bufOffset=0}else{}AL.stopSourceAudio(src);src.state=4114;src.bufStartTime=Number.NEGATIVE_INFINITY;AL.scheduleSourceAudio(src)}else if(state===4115){if(src.state===4114){AL.updateSourceTime(src);AL.stopSourceAudio(src);src.state=4115}}else if(state===4116){if(src.state!==4113){src.state=4116;src.bufsProcessed=src.bufQueue.length;src.bufStartTime=Number.NEGATIVE_INFINITY;src.bufOffset=0;AL.stopSourceAudio(src)}}else if(state===4113){if(src.state!==4113){src.state=4113;src.bufsProcessed=0;src.bufStartTime=Number.NEGATIVE_INFINITY;src.bufOffset=0;AL.stopSourceAudio(src)}}},initSourcePanner:src=>{if(src.type===4144){return}var templateBuf=AL.buffers[0];for(var i=0;i{for(var i in ctx.sources){AL.updateSourceGlobal(ctx.sources[i])}},updateSourceGlobal:src=>{var panner=src.panner;if(!panner){return}panner.refDistance=src.refDistance;panner.maxDistance=src.maxDistance;panner.rolloffFactor=src.rolloffFactor;panner.panningModel=src.context.hrtf?"HRTF":"equalpower";var distanceModel=src.context.sourceDistanceModel?src.distanceModel:src.context.distanceModel;switch(distanceModel){case 0:panner.distanceModel="inverse";panner.refDistance=340282e33;break;case 53249:case 53250:panner.distanceModel="inverse";break;case 53251:case 53252:panner.distanceModel="linear";break;case 53253:case 53254:panner.distanceModel="exponential";break}},updateListenerSpace:ctx=>{var listener=ctx.audioCtx.listener;if(listener.positionX){listener.positionX.value=ctx.listener.position[0];listener.positionY.value=ctx.listener.position[1];listener.positionZ.value=ctx.listener.position[2]}else{listener.setPosition(ctx.listener.position[0],ctx.listener.position[1],ctx.listener.position[2])}if(listener.forwardX){listener.forwardX.value=ctx.listener.direction[0];listener.forwardY.value=ctx.listener.direction[1];listener.forwardZ.value=ctx.listener.direction[2];listener.upX.value=ctx.listener.up[0];listener.upY.value=ctx.listener.up[1];listener.upZ.value=ctx.listener.up[2]}else{listener.setOrientation(ctx.listener.direction[0],ctx.listener.direction[1],ctx.listener.direction[2],ctx.listener.up[0],ctx.listener.up[1],ctx.listener.up[2])}for(var i in ctx.sources){AL.updateSourceSpace(ctx.sources[i])}},updateSourceSpace:src=>{if(!src.panner){return}var panner=src.panner;var posX=src.position[0];var posY=src.position[1];var posZ=src.position[2];var dirX=src.direction[0];var dirY=src.direction[1];var dirZ=src.direction[2];var listener=src.context.listener;var lPosX=listener.position[0];var lPosY=listener.position[1];var lPosZ=listener.position[2];if(src.relative){var lBackX=-listener.direction[0];var lBackY=-listener.direction[1];var lBackZ=-listener.direction[2];var lUpX=listener.up[0];var lUpY=listener.up[1];var lUpZ=listener.up[2];var inverseMagnitude=(x,y,z)=>{var length=Math.sqrt(x*x+y*y+z*z);if(length{if(src.state===4114){AL.cancelPendingSourceAudio(src);var audioSrc=src.audioQueue[0];if(!audioSrc){return}var duration;if(src.type===4136&&src.looping){duration=Number.POSITIVE_INFINITY}else{duration=(audioSrc.buffer.duration-audioSrc._startOffset)/src.playbackRate}audioSrc._duration=duration;audioSrc.playbackRate.value=src.playbackRate;AL.scheduleSourceAudio(src)}},sourceDuration:src=>{var length=0;for(var i=0;i{AL.updateSourceTime(src);var offset=0;for(var i=0;i{var playing=src.state==4114;if(playing){AL.setSourceState(src,4113)}if(src.bufQueue[src.bufsProcessed].audioBuf!==null){src.bufsProcessed=0;while(offset>src.bufQueue[src.bufsProcessed].audioBuf.duration){offset-=src.bufQueue[src.bufsProcessed].audioBuf.duration;src.bufsProcessed++}src.bufOffset=offset}if(playing){AL.setSourceState(src,4114)}},getGlobalParam:(funcname,param)=>{if(!AL.currentCtx){return null}switch(param){case 49152:return AL.currentCtx.dopplerFactor;case 49155:return AL.currentCtx.speedOfSound;case 53248:return AL.currentCtx.distanceModel;default:AL.currentCtx.err=40962;return null}},setGlobalParam:(funcname,param,value)=>{if(!AL.currentCtx){return}switch(param){case 49152:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.dopplerFactor=value;AL.updateListenerSpace(AL.currentCtx);break;case 49155:if(!Number.isFinite(value)||value<=0){AL.currentCtx.err=40963;return}AL.currentCtx.speedOfSound=value;AL.updateListenerSpace(AL.currentCtx);break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:AL.currentCtx.distanceModel=value;AL.updateContextGlobal(AL.currentCtx);break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},getListenerParam:(funcname,param)=>{if(!AL.currentCtx){return null}switch(param){case 4100:return AL.currentCtx.listener.position;case 4102:return AL.currentCtx.listener.velocity;case 4111:return AL.currentCtx.listener.direction.concat(AL.currentCtx.listener.up);case 4106:return AL.currentCtx.gain.gain.value;default:AL.currentCtx.err=40962;return null}},setListenerParam:(funcname,param,value)=>{if(!AL.currentCtx){return}if(value===null){AL.currentCtx.err=40962;return}var listener=AL.currentCtx.listener;switch(param){case 4100:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.position[0]=value[0];listener.position[1]=value[1];listener.position[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4102:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.velocity[0]=value[0];listener.velocity[1]=value[1];listener.velocity[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.gain.gain.value=value;break;case 4111:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])||!Number.isFinite(value[3])||!Number.isFinite(value[4])||!Number.isFinite(value[5])){AL.currentCtx.err=40963;return}listener.direction[0]=value[0];listener.direction[1]=value[1];listener.direction[2]=value[2];listener.up[0]=value[3];listener.up[1]=value[4];listener.up[2]=value[5];AL.updateListenerSpace(AL.currentCtx);break;default:AL.currentCtx.err=40962;return}},getBufferParam:(funcname,bufferId,param)=>{if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}switch(param){case 8193:return buf.frequency;case 8194:return buf.bytesPerSample*8;case 8195:return buf.channels;case 8196:return buf.length*buf.bytesPerSample*buf.channels;case 8213:if(buf.length===0){return[0,0]}return[(buf.audioBuf._loopStart||0)*buf.frequency,(buf.audioBuf._loopEnd||buf.length)*buf.frequency];default:AL.currentCtx.err=40962;return null}},setBufferParam:(funcname,bufferId,param,value)=>{if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}if(value===null){AL.currentCtx.err=40962;return}switch(param){case 8196:if(value!==0){AL.currentCtx.err=40963;return}break;case 8213:if(value[0]<0||value[0]>buf.length||value[1]<0||value[1]>buf.Length||value[0]>=value[1]){AL.currentCtx.err=40963;return}if(buf.refCount>0){AL.currentCtx.err=40964;return}if(buf.audioBuf){buf.audioBuf._loopStart=value[0]/buf.frequency;buf.audioBuf._loopEnd=value[1]/buf.frequency}break;default:AL.currentCtx.err=40962;return}},getSourceParam:(funcname,sourceId,param)=>{if(!AL.currentCtx){return null}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return null}switch(param){case 514:return src.relative;case 4097:return src.coneInnerAngle;case 4098:return src.coneOuterAngle;case 4099:return src.pitch;case 4100:return src.position;case 4101:return src.direction;case 4102:return src.velocity;case 4103:return src.looping;case 4105:if(src.type===4136){return src.bufQueue[0].id}return 0;case 4106:return src.gain.gain.value;case 4109:return src.minGain;case 4110:return src.maxGain;case 4112:return src.state;case 4117:if(src.bufQueue.length===1&&src.bufQueue[0].id===0){return 0}return src.bufQueue.length;case 4118:if(src.bufQueue.length===1&&src.bufQueue[0].id===0||src.looping){return 0}return src.bufsProcessed;case 4128:return src.refDistance;case 4129:return src.rolloffFactor;case 4130:return src.coneOuterGain;case 4131:return src.maxDistance;case 4132:return AL.sourceTell(src);case 4133:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency}return offset;case 4134:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency*src.bufQueue[0].bytesPerSample}return offset;case 4135:return src.type;case 4628:return src.spatialize;case 8201:var length=0;var bytesPerFrame=0;for(var i=0;i{if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}if(value===null){AL.currentCtx.err=40962;return}switch(param){case 514:if(value===1){src.relative=true;AL.updateSourceSpace(src)}else if(value===0){src.relative=false;AL.updateSourceSpace(src)}else{AL.currentCtx.err=40963;return}break;case 4097:if(!Number.isFinite(value)){AL.currentCtx.err=40963;return}src.coneInnerAngle=value;if(src.panner){src.panner.coneInnerAngle=value%360}break;case 4098:if(!Number.isFinite(value)){AL.currentCtx.err=40963;return}src.coneOuterAngle=value;if(src.panner){src.panner.coneOuterAngle=value%360}break;case 4099:if(!Number.isFinite(value)||value<=0){AL.currentCtx.err=40963;return}if(src.pitch===value){break}src.pitch=value;AL.updateSourceRate(src);break;case 4100:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}src.position[0]=value[0];src.position[1]=value[1];src.position[2]=value[2];AL.updateSourceSpace(src);break;case 4101:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}src.direction[0]=value[0];src.direction[1]=value[1];src.direction[2]=value[2];AL.updateSourceSpace(src);break;case 4102:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}src.velocity[0]=value[0];src.velocity[1]=value[1];src.velocity[2]=value[2];AL.updateSourceSpace(src);break;case 4103:if(value===1){src.looping=true;AL.updateSourceTime(src);if(src.type===4136&&src.audioQueue.length>0){var audioSrc=src.audioQueue[0];audioSrc.loop=true;audioSrc._duration=Number.POSITIVE_INFINITY}}else if(value===0){src.looping=false;var currentTime=AL.updateSourceTime(src);if(src.type===4136&&src.audioQueue.length>0){var audioSrc=src.audioQueue[0];audioSrc.loop=false;audioSrc._duration=src.bufQueue[0].audioBuf.duration/src.playbackRate;audioSrc._startTime=currentTime-src.bufOffset/src.playbackRate}}else{AL.currentCtx.err=40963;return}break;case 4105:if(src.state===4114||src.state===4115){AL.currentCtx.err=40964;return}if(value===0){for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=1;src.bufQueue[0]=AL.buffers[0];src.bufsProcessed=0;src.type=4144}else{var buf=AL.buffers[value];if(!buf){AL.currentCtx.err=40963;return}for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=0;buf.refCount++;src.bufQueue=[buf];src.bufsProcessed=0;src.type=4136}AL.initSourcePanner(src);AL.scheduleSourceAudio(src);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.gain.gain.value=value;break;case 4109:if(!Number.isFinite(value)||value<0||value>Math.min(src.maxGain,1)){AL.currentCtx.err=40963;return}src.minGain=value;break;case 4110:if(!Number.isFinite(value)||value1){AL.currentCtx.err=40963;return}src.maxGain=value;break;case 4128:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.refDistance=value;if(src.panner){src.panner.refDistance=value}break;case 4129:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.rolloffFactor=value;if(src.panner){src.panner.rolloffFactor=value}break;case 4130:if(!Number.isFinite(value)||value<0||value>1){AL.currentCtx.err=40963;return}src.coneOuterGain=value;if(src.panner){src.panner.coneOuterGain=value}break;case 4131:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.maxDistance=value;if(src.panner){src.panner.maxDistance=value}break;case 4132:if(value<0||value>AL.sourceDuration(src)){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4133:var srcLen=AL.sourceDuration(src);if(srcLen>0){var frequency;for(var bufId in src.bufQueue){if(bufId){frequency=src.bufQueue[bufId].frequency;break}}value/=frequency}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4134:var srcLen=AL.sourceDuration(src);if(srcLen>0){var bytesPerSec;for(var bufId in src.bufQueue){if(bufId){var buf=src.bufQueue[bufId];bytesPerSec=buf.frequency*buf.bytesPerSample*buf.channels;break}}value/=bytesPerSec}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4628:if(value!==0&&value!==1&&value!==2){AL.currentCtx.err=40963;return}src.spatialize=value;AL.initSourcePanner(src);break;case 8201:case 8202:case 8203:AL.currentCtx.err=40964;break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:src.distanceModel=value;if(AL.currentCtx.sourceDistanceModel){AL.updateContextGlobal(AL.currentCtx)}break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},captures:{},sharedCaptureAudioCtx:null,requireValidCaptureDevice:(deviceId,funcname)=>{if(deviceId===0){AL.alcErr=40961;return null}var c=AL.captures[deviceId];if(!c){AL.alcErr=40961;return null}var err=c.mediaStreamError;if(err){AL.alcErr=40961;return null}return c}};var _alBufferData=(bufferId,format,pData,size,freq)=>{if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf){AL.currentCtx.err=40963;return}if(freq<=0){AL.currentCtx.err=40963;return}var audioBuf=null;try{switch(format){case 4352:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size,freq);var channel0=audioBuf.getChannelData(0);for(var i=0;i0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>1,freq);var channel0=audioBuf.getChannelData(0);pData>>=1;for(var i=0;i>1;++i){channel0[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=1;buf.length=size>>1;break;case 4354:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>1,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);for(var i=0;i>1;++i){channel0[i]=HEAPU8[pData++]*.0078125-1;channel1[i]=HEAPU8[pData++]*.0078125-1}}buf.bytesPerSample=1;buf.channels=2;buf.length=size>>1;break;case 4355:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>2,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=1;for(var i=0;i>2;++i){channel0[i]=HEAP16[pData++]*30517578125e-15;channel1[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=2;buf.length=size>>2;break;case 65552:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>2,freq);var channel0=audioBuf.getChannelData(0);pData>>=2;for(var i=0;i>2;++i){channel0[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=1;buf.length=size>>2;break;case 65553:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>3,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=2;for(var i=0;i>3;++i){channel0[i]=HEAPF32[pData++];channel1[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=2;buf.length=size>>3;break;default:AL.currentCtx.err=40963;return}buf.frequency=freq;buf.audioBuf=audioBuf}catch(e){AL.currentCtx.err=40963;return}};var _alDeleteBuffers=(count,pBufferIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2];if(bufId===0){continue}if(!AL.buffers[bufId]){AL.currentCtx.err=40961;return}if(AL.buffers[bufId].refCount){AL.currentCtx.err=40964;return}}for(var i=0;i>2];if(bufId===0){continue}AL.deviceRefCounts[AL.buffers[bufId].deviceId]--;delete AL.buffers[bufId];AL.freeIds.push(bufId)}};var _alSourcei=(sourceId,param,value)=>{switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4628:case 8201:case 8202:case 53248:AL.setSourceParam("alSourcei",sourceId,param,value);break;default:AL.setSourceParam("alSourcei",sourceId,param,null);break}};var _alDeleteSources=(count,pSourceIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2];if(!AL.currentCtx.sources[srcId]){AL.currentCtx.err=40961;return}}for(var i=0;i>2];AL.setSourceState(AL.currentCtx.sources[srcId],4116);_alSourcei(srcId,4105,0);delete AL.currentCtx.sources[srcId];AL.freeIds.push(srcId)}};var _alDistanceModel=model=>{AL.setGlobalParam("alDistanceModel",53248,model)};var _alGenBuffers=(count,pBufferIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2]=buf.id;checkInt32(buf.id)}};var _alGenSources=(count,pSourceIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2]=src.id;checkInt32(src.id)}};var _alGetError=()=>{if(!AL.currentCtx){return 40964}var err=AL.currentCtx.err;AL.currentCtx.err=0;return err};var _alGetSourcei=(sourceId,param,pValue)=>{var val=AL.getSourceParam("alGetSourcei",sourceId,param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4112:case 4117:case 4118:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4135:case 4628:case 8201:case 8202:case 53248:HEAP32[pValue>>2]=val;checkInt32(val);break;default:AL.currentCtx.err=40962;return}};var _alListenerfv=(param,pValues)=>{if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;case 4111:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.paramArray[3]=HEAPF32[pValues+12>>2];AL.paramArray[4]=HEAPF32[pValues+16>>2];AL.paramArray[5]=HEAPF32[pValues+20>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;default:AL.setListenerParam("alListenerfv",param,null);break}};var _alSource3f=(sourceId,param,value0,value1,value2)=>{switch(param){case 4100:case 4101:case 4102:AL.paramArray[0]=value0;AL.paramArray[1]=value1;AL.paramArray[2]=value2;AL.setSourceParam("alSource3f",sourceId,param,AL.paramArray);break;default:AL.setSourceParam("alSource3f",sourceId,param,null);break}};var _alSourcePlay=sourceId=>{if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4114)};var _alSourcef=(sourceId,param,value)=>{switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:AL.setSourceParam("alSourcef",sourceId,param,value);break;default:AL.setSourceParam("alSourcef",sourceId,param,null);break}};var _alcCloseDevice=deviceId=>{if(!(deviceId in AL.deviceRefCounts)||AL.deviceRefCounts[deviceId]>0){return 0}delete AL.deviceRefCounts[deviceId];AL.freeIds.push(deviceId);return 1};var autoResumeAudioContext=ctx=>{for(var event of["keydown","mousedown","touchstart"]){for(var element of[document,document.getElementById("canvas")]){element?.addEventListener(event,()=>{if(ctx.state==="suspended")ctx.resume()},{once:true})}}};var _alcCreateContext=(deviceId,pAttrList)=>{if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return 0}var options=null;var attrs=[];var hrtf=null;pAttrList>>=2;if(pAttrList){var attr=0;var val=0;while(true){attr=HEAP32[pAttrList++];attrs.push(attr);if(attr===0){break}val=HEAP32[pAttrList++];attrs.push(val);switch(attr){case 4103:if(!options){options={}}options.sampleRate=val;break;case 4112:case 4113:break;case 6546:switch(val){case 0:hrtf=false;break;case 1:hrtf=true;break;case 2:break;default:AL.alcErr=40964;return 0}break;case 6550:if(val!==0){AL.alcErr=40964;return 0}break;default:AL.alcErr=40964;return 0}}}var AudioContext=window.AudioContext||window.webkitAudioContext;var ac=null;try{if(options){ac=new AudioContext(options)}else{ac=new AudioContext}}catch(e){if(e.name==="NotSupportedError"){AL.alcErr=40964}else{AL.alcErr=40961}return 0}autoResumeAudioContext(ac);if(typeof ac.createGain=="undefined"){ac.createGain=ac.createGainNode}var gain=ac.createGain();gain.connect(ac.destination);var ctx={deviceId,id:AL.newId(),attrs,audioCtx:ac,listener:{position:[0,0,0],velocity:[0,0,0],direction:[0,0,0],up:[0,0,0]},sources:[],interval:setInterval(()=>AL.scheduleContextAudio(ctx),AL.QUEUE_INTERVAL),gain,distanceModel:53250,speedOfSound:343.3,dopplerFactor:1,sourceDistanceModel:false,hrtf:hrtf||false,_err:0,get err(){return this._err},set err(val){if(this._err===0||val===0){this._err=val}}};AL.deviceRefCounts[deviceId]++;AL.contexts[ctx.id]=ctx;if(hrtf!==null){for(var ctxId in AL.contexts){var c=AL.contexts[ctxId];if(c.deviceId===deviceId){c.hrtf=hrtf;AL.updateContextGlobal(c)}}}return ctx.id};var _alcDestroyContext=contextId=>{var ctx=AL.contexts[contextId];if(AL.currentCtx===ctx){AL.alcErr=40962;return}if(AL.contexts[contextId].interval){clearInterval(AL.contexts[contextId].interval)}AL.deviceRefCounts[ctx.deviceId]--;delete AL.contexts[contextId];AL.freeIds.push(contextId)};var _alcMakeContextCurrent=contextId=>{if(contextId===0){AL.currentCtx=null}else{AL.currentCtx=AL.contexts[contextId]}return 1};var _alcOpenDevice=pDeviceName=>{if(pDeviceName){var name=UTF8ToString(pDeviceName);if(name!==AL.DEVICE_NAME){return 0}}if(globalThis.AudioContext||globalThis.webkitAudioContext){var deviceId=AL.newId();AL.deviceRefCounts[deviceId]=0;return deviceId}return 0};var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);checkInt64(nsec);return 0}function getFullscreenElement(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement||document.msFullscreenElement}var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);var Browser={useWebGL:false,isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],preloadedImages:{},preloadedAudios:{},getCanvas:()=>Module["canvas"],init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin["canHandle"]=name=>!Module["noImageDecoding"]&&/\.(jpg|jpeg|png|bmp|webp)$/i.test(name);imagePlugin["handle"]=async(byteArray,name)=>{var b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}var url=URL.createObjectURL(b);return new Promise((resolve,reject)=>{var img=new Image;img.onload=()=>{assert(img.complete,`Image ${name} could not be decoded`);var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Browser.preloadedImages[name]=canvas;URL.revokeObjectURL(url);resolve(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);reject()};img.src=url})};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=name=>!Module["noAudioDecoding"]&&name.slice(-4)in{".ogg":1,".wav":1,".mp3":1};audioPlugin["handle"]=async(byteArray,name)=>new Promise((resolve,reject)=>{var done=false;function finish(audio){if(done)return;done=true;Browser.preloadedAudios[name]=audio;resolve(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=event=>{if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.slice(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)});preloadPlugins.push(audioPlugin);function pointerLockChange(){var canvas=Browser.getCanvas();Browser.pointerLock=document.pointerLockElement===canvas}var canvas=Browser.getCanvas();if(canvas){document.addEventListener("pointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Browser.getCanvas().requestPointerLock){Browser.getCanvas().requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module["ctx"]&&canvas==Browser.getCanvas())return Module["ctx"];var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:typeof WebGL2RenderingContext!="undefined"?2: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);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(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=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if(getFullscreenElement()===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)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},requestFullScreen(){abort("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.slice(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(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:abort("unrecognized mouse wheel delta mode: "+event.deltaMode)}break;default:abort("unrecognized mouse wheel event: "+event.type)}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var canvas=Browser.getCanvas();var rect=canvas.getBoundingClientRect();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.");var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(canvas.width/rect.width);adjustedY=adjustedY*(canvas.height/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(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)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);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];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Browser.getCanvas();Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Browser.getCanvas();Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags;checkInt32(flags)}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags;checkInt32(flags)}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},updateCanvasDimensions(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"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1;checkInt32(1)}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};var _eglChooseConfig=(display,attrib_list,configs,config_size,numConfigs)=>EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);var GLctx;var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"));var webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"));var webgl_enable_EXT_polygon_offset_clamp=ctx=>!!(ctx.extPolygonOffsetClamp=ctx.getExtension("EXT_polygon_offset_clamp"));var webgl_enable_EXT_clip_control=ctx=>!!(ctx.extClipControl=ctx.getExtension("EXT_clip_control"));var webgl_enable_WEBGL_polygon_mode=ctx=>!!(ctx.webglPolygonMode=ctx.getExtension("WEBGL_polygon_mode"));var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_color_buffer_float","EXT_conservative_depth","EXT_disjoint_timer_query_webgl2","EXT_texture_norm16","NV_shader_noperspective_interpolation","WEBGL_clip_cull_distance","EXT_clip_control","EXT_color_buffer_half_float","EXT_depth_clamp","EXT_float_blend","EXT_polygon_offset_clamp","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_blend_func_extended","WEBGL_compressed_texture_astc","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw","WEBGL_polygon_mode"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var registerPreMainLoop=f=>{typeof MainLoop!="undefined"&&MainLoop.preMainLoop.push(f)};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],stringCache:{},stringiCache:{},unpackAlignment:4,unpackRowLength:0,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{for(var i=0;i>2]=id;checkInt32(id)}},MAX_TEMP_BUFFER_SIZE:2097152,numTempVertexBuffersPerSize:64,log2ceilLookup:i=>32-Math.clz32(i===0?0:i-1),generateTempBuffers:(quads,context)=>{var largestIndex=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);context.tempVertexBufferCounters1=[];context.tempVertexBufferCounters2=[];context.tempVertexBufferCounters1.length=context.tempVertexBufferCounters2.length=largestIndex+1;context.tempVertexBuffers1=[];context.tempVertexBuffers2=[];context.tempVertexBuffers1.length=context.tempVertexBuffers2.length=largestIndex+1;context.tempIndexBuffers=[];context.tempIndexBuffers.length=largestIndex+1;for(var i=0;i<=largestIndex;++i){context.tempIndexBuffers[i]=null;context.tempVertexBufferCounters1[i]=context.tempVertexBufferCounters2[i]=0;var ringbufferLength=GL.numTempVertexBuffersPerSize;context.tempVertexBuffers1[i]=[];context.tempVertexBuffers2[i]=[];var ringbuffer1=context.tempVertexBuffers1[i];var ringbuffer2=context.tempVertexBuffers2[i];ringbuffer1.length=ringbuffer2.length=ringbufferLength;for(var j=0;j>1;var quadIndexes=new Uint16Array(numIndexes);var i=0,v=0;while(1){quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+1;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v+3;if(i>=numIndexes)break;v+=4}context.GLctx.bufferData(34963,quadIndexes,35044);context.GLctx.bindBuffer(34963,null)}},getTempVertexBuffer:sizeBytes=>{var idx=GL.log2ceilLookup(sizeBytes);var ringbuffer=GL.currentContext.tempVertexBuffers1[idx];var nextFreeBufferIndex=GL.currentContext.tempVertexBufferCounters1[idx];GL.currentContext.tempVertexBufferCounters1[idx]=GL.currentContext.tempVertexBufferCounters1[idx]+1&GL.numTempVertexBuffersPerSize-1;var vbo=ringbuffer[nextFreeBufferIndex];if(vbo){return vbo}var prevVBO=GLctx.getParameter(34964);ringbuffer[nextFreeBufferIndex]=GLctx.createBuffer();GLctx.bindBuffer(34962,ringbuffer[nextFreeBufferIndex]);GLctx.bufferData(34962,1<{var idx=GL.log2ceilLookup(sizeBytes);var ibo=GL.currentContext.tempIndexBuffers[idx];if(ibo){return ibo}var prevIBO=GLctx.getParameter(34965);GL.currentContext.tempIndexBuffers[idx]=GLctx.createBuffer();GLctx.bindBuffer(34963,GL.currentContext.tempIndexBuffers[idx]);GLctx.bufferData(34963,1<{if(!GL.currentContext){return}var vb=GL.currentContext.tempVertexBuffers1;GL.currentContext.tempVertexBuffers1=GL.currentContext.tempVertexBuffers2;GL.currentContext.tempVertexBuffers2=vb;vb=GL.currentContext.tempVertexBufferCounters1;GL.currentContext.tempVertexBufferCounters1=GL.currentContext.tempVertexBufferCounters2;GL.currentContext.tempVertexBufferCounters2=vb;var largestIndex=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);for(var i=0;i<=largestIndex;++i){GL.currentContext.tempVertexBufferCounters1[i]=0}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}var type=GLctx.getShaderParameter(GL.shaders[shader],35663);if(type==35632){if(GLEmulation.findToken(source,"dFdx")||GLEmulation.findToken(source,"dFdy")||GLEmulation.findToken(source,"fwidth")){source="#extension GL_OES_standard_derivatives : enable\n"+source;var extension=GLctx.getExtension("OES_standard_derivatives")}}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=webGLContextAttributes.majorVersion>1?canvas.getContext("webgl2",webGLContextAttributes):canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={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:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module["ctx"]=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext: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]?.GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;context.compressionExt=GLctx.getExtension("WEBGL_compressed_texture_s3tc");context.anisotropicExt=GLctx.getExtension("EXT_texture_filter_anisotropic");webgl_enable_WEBGL_multi_draw(GLctx);webgl_enable_EXT_polygon_offset_clamp(GLctx);webgl_enable_EXT_clip_control(GLctx);webgl_enable_WEBGL_polygon_mode(GLctx);webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}for(var ext of getEmscriptenSupportedExtensions(GLctx)){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}}}};var _eglCreateContext=(display,config,hmm,contextAttribs)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Browser.getCanvas(),EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Browser.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}};var _eglCreateWindowSurface=(display,config,win,attrib_list)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006};var _eglDestroyContext=(display,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1};var _eglDestroySurface=(display,surface)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1};var _eglGetConfigAttrib=(display,config,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;checkInt32(EGL.contextAttributes.alpha?32:24);return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;checkInt32(EGL.contextAttributes.alpha?8:0);return 1;case 12322:HEAP32[value>>2]=8;checkInt32(8);return 1;case 12323:HEAP32[value>>2]=8;checkInt32(8);return 1;case 12324:HEAP32[value>>2]=8;checkInt32(8);return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;checkInt32(EGL.contextAttributes.depth?24:0);return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;checkInt32(EGL.contextAttributes.stencil?8:0);return 1;case 12327:HEAP32[value>>2]=12344;checkInt32(12344);return 1;case 12328:HEAP32[value>>2]=62002;checkInt32(62002);return 1;case 12329:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12330:HEAP32[value>>2]=4096;checkInt32(4096);return 1;case 12331:HEAP32[value>>2]=16777216;checkInt32(16777216);return 1;case 12332:HEAP32[value>>2]=4096;checkInt32(4096);return 1;case 12333:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12334:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12335:HEAP32[value>>2]=12344;checkInt32(12344);return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;checkInt32(EGL.contextAttributes.antialias?4:0);return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;checkInt32(EGL.contextAttributes.antialias?1:0);return 1;case 12339:HEAP32[value>>2]=4;checkInt32(4);return 1;case 12340:HEAP32[value>>2]=12344;checkInt32(12344);return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;checkInt32(-1);return 1;case 12345:case 12346:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12347:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12348:HEAP32[value>>2]=1;checkInt32(1);return 1;case 12349:case 12350:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12351:HEAP32[value>>2]=12430;checkInt32(12430);return 1;case 12352:HEAP32[value>>2]=4;checkInt32(4);return 1;case 12354:HEAP32[value>>2]=0;checkInt32(0);return 1;default:EGL.setErrorCode(12292);return 0}};var _eglGetDisplay=nativeDisplayType=>{EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3};var _eglGetError=()=>EGL.errorCode;var _eglInitialize=(display,majorVersion,minorVersion)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1;checkInt32(1)}if(minorVersion){HEAP32[minorVersion>>2]=4;checkInt32(4)}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1};var _eglMakeCurrent=(display,draw,read,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1};var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var _eglQueryString=(display,name)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret};var _eglSwapBuffers=(dpy,surface)=>{if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!GLctx){EGL.setErrorCode(12290)}else if(GLctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0};var _eglSwapInterval=(display,interval)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1};var _eglTerminate=display=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1};var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};var _eglWaitGL=_eglWaitClient;var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var chr=String.fromCharCode(ch);var validChars=["d","f","i","p"];validChars.push("j");assert(validChars.includes(chr),`Invalid character ${ch}("${chr}") in readEmAsmArgs! Use only [${validChars}], and do not specify "v" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(emAsmAddr),`No EM_ASM constant found at address ${emAsmAddr}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[emAsmAddr](...args)};var _emscripten_asm_const_int_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var _emscripten_asm_const_ptr_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var _emscripten_cancel_main_loop=()=>{MainLoop.pause();MainLoop.func=null};var _emscripten_err=str=>err(UTF8ToString(str));var onExits=[];var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},inEventHandler:0,deferredCalls:[],deferCall(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 call of JSEvents.deferredCalls){if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction,precedence,argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedencecall.targetFunction!=targetFunction)},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}var deferredCalls=JSEvents.deferredCalls;JSEvents.deferredCalls=[];for(var call of deferredCalls){call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;icString>2?UTF8ToString(cString):cString;var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||globalThis.document?.querySelector(target);return domElement};var findCanvasEventTarget=findEventTarget;var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;checkInt32(canvas.width);HEAP32[height>>2]=canvas.height;checkInt32(canvas.height)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var getCanvasElementSize=target=>{var sp=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];stackRestore(sp);return size};var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{var sp=stackSave();var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(sp)}};var currentFullscreenStrategy={};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(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(){if(!getFullscreenElement()){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(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){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0};var 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=getCanvasElementSize(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{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(!document.exitPointerLock)return-1;document.exitPointerLock();return 0};var _emscripten_get_device_pixel_ratio=()=>globalThis.devicePixelRatio??1;var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var 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.index;checkInt32(e.index);HEAP32[eventStruct+8>>2]=e.axes.length;checkInt32(e.axes.length);HEAP32[eventStruct+12>>2]=e.buttons.length;checkInt32(e.buttons.length);stringToUTF8(e.id,eventStruct+1112,64);stringToUTF8(e.mapping,eventStruct+1176,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{assert(JSEvents.lastGamepadState,"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};var _emscripten_get_num_gamepads=()=>{assert(JSEvents.lastGamepadState,"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};var _emscripten_get_screen_size=(width,height)=>{HEAP32[width>>2]=screen.width;checkInt32(screen.width);HEAP32[height>>2]=screen.height;checkInt32(screen.height)};var _emscripten_glActiveTexture=x0=>GLctx.activeTexture(x0);var _emscripten_glAlphaFunc=(func,ref)=>{switch(func){case 512:case 513:case 514:case 515:case 516:case 517:case 518:case 519:GLEmulation.alphaTestRef=ref;if(GLEmulation.alphaTestFunc!=func){GLEmulation.alphaTestFunc=func;GLImmediate.currentRenderer=null}break;default:break}};var _emscripten_glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glEnable=x0=>GLctx.enable(x0);var _glEnable=_emscripten_glEnable;var _emscripten_glDisable=x0=>GLctx.disable(x0);var _glDisable=_emscripten_glDisable;var _emscripten_glIsEnabled=x0=>GLctx.isEnabled(x0);var _glIsEnabled=_emscripten_glIsEnabled;var readI53FromI64=ptr=>HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296;var readI53FromU64=ptr=>HEAPU32[ptr>>2]+HEAPU32[ptr+4>>2]*4294967296;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;checkInt32(num);var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296;checkInt32((num-lower)/4294967296);var deserialized=num>=0?readI53FromU64(ptr):readI53FromI64(ptr);var offset=ptr>>2;if(deserialized!=num)warnOnce(`writeI53ToI64() out of range: serialized JS Number ${num} to Wasm heap as bytes lo=${ptrToString(HEAPU32[offset])}, hi=${ptrToString(HEAPU32[offset+1])}, which deserializes back to ${deserialized} instead!`)};var webglGetExtensions=()=>{var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 34814:case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break;case 33309:if(GL.currentContext.version<2){GL.recordError(1282);return}ret=webglGetExtensions().length;break;case 33307:case 33308:if(GL.currentContext.version<2){GL.recordError(1280);return}ret=name_==33307?3: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(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];checkInt32(result[i]);break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i]=result[i]?1:0;checkInt8(result[i]?1:0);break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);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;checkInt32(ret);break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p]=ret?1:0;checkInt8(ret?1:0);break}};var _emscripten_glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _glGetBooleanv=_emscripten_glGetBooleanv;var _emscripten_glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _glGetIntegerv=_emscripten_glGetIntegerv;var _emscripten_glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var webGLVersion=GLctx.getParameter(7938);var glVersion=`OpenGL ES 2.0 (${webGLVersion})`;if(GL.currentContext.version>=2)glVersion=`OpenGL ES 3.0 (${webGLVersion})`;ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);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(1280)}GL.stringCache[name_]=ret}return ret};var _glGetString=_emscripten_glGetString;var _emscripten_glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _glCreateShader=_emscripten_glCreateShader;var _emscripten_glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _glShaderSource=_emscripten_glShaderSource;var _emscripten_glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _glCompileShader=_emscripten_glCompileShader;var _glAttachShader=_emscripten_glAttachShader;var _emscripten_glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _glDetachShader=_emscripten_glDetachShader;var _emscripten_glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _glUseProgram=_emscripten_glUseProgram;var _emscripten_glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _glDeleteProgram=_emscripten_glDeleteProgram;var _emscripten_glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _glBindAttribLocation=_emscripten_glBindAttribLocation;var _emscripten_glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _glLinkProgram=_emscripten_glLinkProgram;var _emscripten_glBindBuffer=(target,buffer)=>{if(target==34962){GLctx.currentArrayBufferBinding=buffer;GLImmediate.lastArrayBuffer=buffer}else if(target==34963){GLctx.currentElementArrayBufferBinding=buffer}if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])};var _glBindBuffer=_emscripten_glBindBuffer;var _emscripten_glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _glGetFloatv=_emscripten_glGetFloatv;var _emscripten_glHint=(x0,x1)=>GLctx.hint(x0,x1);var _glHint=_emscripten_glHint;var _emscripten_glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray;var _emscripten_glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray;var _emscripten_glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _glVertexAttribPointer=_emscripten_glVertexAttribPointer;var _glActiveTexture=_emscripten_glActiveTexture;var GLEmulation={fogStart:0,fogEnd:1,fogDensity:1,fogColor:null,fogMode:2048,fogEnabled:false,MAX_CLIP_PLANES:6,clipPlaneEnabled:[false,false,false,false,false,false],clipPlaneEquation:[],lightingEnabled:false,lightModelAmbient:null,lightModelLocalViewer:false,lightModelTwoSide:false,materialAmbient:null,materialDiffuse:null,materialSpecular:null,materialShininess:null,materialEmission:null,MAX_LIGHTS:8,lightEnabled:[false,false,false,false,false,false,false,false],lightAmbient:[],lightDiffuse:[],lightSpecular:[],lightPosition:[],alphaTestEnabled:false,alphaTestFunc:519,alphaTestRef:0,pointSize:1,vaos:[],currentVao:null,enabledVertexAttribArrays:{},hasRunInit:false,findToken(source,token){function isIdentChar(ch){if(ch>=48&&ch<=57)return true;if(ch>=65&&ch<=90)return true;if(ch>=97&&ch<=122)return true;return false}var i=-1;do{i=source.indexOf(token,i+1);if(i<0){break}if(i>0&&isIdentChar(source[i-1])){continue}i+=token.length;if(i{GLImmediate.lastRenderer?.cleanup();if(cap==2912){if(GLEmulation.fogEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.fogEnabled=true}return}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;if(GLEmulation.clipPlaneEnabled[clipPlaneId]!=true){GLImmediate.currentRenderer=null;GLEmulation.clipPlaneEnabled[clipPlaneId]=true}return}else if(cap>=16384&&cap<16392){var lightId=cap-16384;if(GLEmulation.lightEnabled[lightId]!=true){GLImmediate.currentRenderer=null;GLEmulation.lightEnabled[lightId]=true}return}else if(cap==2896){if(GLEmulation.lightingEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.lightingEnabled=true}return}else if(cap==3008){if(GLEmulation.alphaTestEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.alphaTestEnabled=true}return}else if(cap==3553){return}else if(!(cap in validCapabilities)){return}orig_glEnable(cap)};var orig_glDisable=_glDisable;_glDisable=_emscripten_glDisable=cap=>{GLImmediate.lastRenderer?.cleanup();if(cap==2912){if(GLEmulation.fogEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.fogEnabled=false}return}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;if(GLEmulation.clipPlaneEnabled[clipPlaneId]!=false){GLImmediate.currentRenderer=null;GLEmulation.clipPlaneEnabled[clipPlaneId]=false}return}else if(cap>=16384&&cap<16392){var lightId=cap-16384;if(GLEmulation.lightEnabled[lightId]!=false){GLImmediate.currentRenderer=null;GLEmulation.lightEnabled[lightId]=false}return}else if(cap==2896){if(GLEmulation.lightingEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.lightingEnabled=false}return}else if(cap==3008){if(GLEmulation.alphaTestEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.alphaTestEnabled=false}return}else if(cap==3553){return}else if(!(cap in validCapabilities)){return}orig_glDisable(cap)};_glIsEnabled=_emscripten_glIsEnabled=cap=>{if(cap==2912){return GLEmulation.fogEnabled?1:0}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;return GLEmulation.clipPlaneEnabled[clipPlaneId]?1:0}else if(cap>=16384&&cap<16392){var lightId=cap-16384;return GLEmulation.lightEnabled[lightId]?1:0}else if(cap==2896){return GLEmulation.lightingEnabled?1:0}else if(cap==3008){return GLEmulation.alphaTestEnabled?1:0}else if(!(cap in validCapabilities)){return 0}return GLctx.isEnabled(cap)};var orig_glGetBooleanv=_glGetBooleanv;_glGetBooleanv=_emscripten_glGetBooleanv=(pname,p)=>{var attrib=GLEmulation.getAttributeFromCapability(pname);if(attrib!==null){var result=GLImmediate.enabledClientAttributes[attrib];HEAP8[p]=result===true?1:0;checkInt8(result===true?1:0);return}orig_glGetBooleanv(pname,p)};var orig_glGetIntegerv=_glGetIntegerv;_glGetIntegerv=_emscripten_glGetIntegerv=(pname,params)=>{switch(pname){case 34018:pname=GLctx.MAX_TEXTURE_IMAGE_UNITS;break;case 35658:{var result=GLctx.getParameter(GLctx.MAX_VERTEX_UNIFORM_VECTORS);HEAP32[params>>2]=result*4;checkInt32(result*4);return}case 35657:{var result=GLctx.getParameter(GLctx.MAX_FRAGMENT_UNIFORM_VECTORS);HEAP32[params>>2]=result*4;checkInt32(result*4);return}case 35659:{var result=GLctx.getParameter(GLctx.MAX_VARYING_VECTORS);HEAP32[params>>2]=result*4;checkInt32(result*4);return}case 34929:pname=GLctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS;break;case 32890:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.size:0;checkInt32(attribute?attribute.size:0);return}case 32891:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.type:0;checkInt32(attribute?attribute.type:0);return}case 32892:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.stride:0;checkInt32(attribute?attribute.stride:0);return}case 32897:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.size:0;checkInt32(attribute?attribute.size:0);return}case 32898:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.type:0;checkInt32(attribute?attribute.type:0);return}case 32899:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.stride:0;checkInt32(attribute?attribute.stride:0);return}case 32904:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.size:0;checkInt32(attribute?attribute.size:0);return}case 32905:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.type:0;checkInt32(attribute?attribute.type:0);return}case 32906:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.stride:0;checkInt32(attribute?attribute.stride:0);return}case 3378:{HEAP32[params>>2]=GLEmulation.MAX_CLIP_PLANES;checkInt32(GLEmulation.MAX_CLIP_PLANES);return}case 2976:{HEAP32[params>>2]=GLImmediate.currentMatrix+5888;checkInt32(GLImmediate.currentMatrix+5888);return}case 3009:{HEAP32[params>>2]=GLEmulation.alphaTestFunc;checkInt32(GLEmulation.alphaTestFunc);return}}orig_glGetIntegerv(pname,params)};var orig_glGetString=_glGetString;_glGetString=_emscripten_glGetString=name_=>{if(GL.stringCache[name_])return GL.stringCache[name_];switch(name_){case 7939:var ret=stringToNewUTF8(getEmscriptenSupportedExtensions(GLctx).join(" ")+" GL_EXT_texture_env_combine GL_ARB_texture_env_crossbar GL_ATI_texture_env_combine3 GL_NV_texture_env_combine4 GL_EXT_texture_env_dot3 GL_ARB_multitexture GL_ARB_vertex_buffer_object GL_EXT_framebuffer_object GL_ARB_vertex_program GL_ARB_fragment_program GL_ARB_shading_language_100 GL_ARB_shader_objects GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_texture_cube_map GL_EXT_draw_range_elements"+(GL.currentContext.compressionExt?" GL_ARB_texture_compression GL_EXT_texture_compression_s3tc":"")+(GL.currentContext.anisotropicExt?" GL_EXT_texture_filter_anisotropic":""));return GL.stringCache[name_]=ret}return orig_glGetString(name_)};GL.shaderInfos={};var orig_glCreateShader=_glCreateShader;_glCreateShader=_emscripten_glCreateShader=shaderType=>{var id=orig_glCreateShader(shaderType);GL.shaderInfos[id]={type:shaderType,ftransform:false};return id};function ensurePrecision(source){if(!/precision +(low|medium|high)p +float *;/.test(source)){source="#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n"+source}return source}_glShaderSource=_emscripten_glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);if(GL.shaderInfos[shader].type==GLctx.VERTEX_SHADER){var has_pm=source.search(/u_projection/)>=0;var has_mm=source.search(/u_modelView/)>=0;var has_pv=source.search(/a_position/)>=0;var need_pm=0,need_mm=0,need_pv=0;var old=source;source=source.replace(/ftransform\(\)/g,"(u_projection * u_modelView * a_position)");if(old!=source)need_pm=need_mm=need_pv=1;old=source;source=source.replace(/gl_ProjectionMatrix/g,"u_projection");if(old!=source)need_pm=1;old=source;source=source.replace(/gl_ModelViewMatrixTranspose\[2\]/g,"vec4(u_modelView[0][2], u_modelView[1][2], u_modelView[2][2], u_modelView[3][2])");if(old!=source)need_mm=1;old=source;source=source.replace(/gl_ModelViewMatrix/g,"u_modelView");if(old!=source)need_mm=1;old=source;source=source.replace(/gl_Vertex/g,"a_position");if(old!=source)need_pv=1;old=source;source=source.replace(/gl_ModelViewProjectionMatrix/g,"(u_projection * u_modelView)");if(old!=source)need_pm=need_mm=1;if(need_pv&&!has_pv)source="attribute vec4 a_position; \n"+source;if(need_mm&&!has_mm)source="uniform mat4 u_modelView; \n"+source;if(need_pm&&!has_pm)source="uniform mat4 u_projection; \n"+source;GL.shaderInfos[shader].ftransform=need_pm||need_mm||need_pv;for(var i=0;i{GLctx.compileShader(GL.shaders[shader])};GL.programShaders={};var orig_glAttachShader=_glAttachShader;_glAttachShader=_emscripten_glAttachShader=(program,shader)=>{GL.programShaders[program]||=[];GL.programShaders[program].push(shader);orig_glAttachShader(program,shader)};var orig_glDetachShader=_glDetachShader;_glDetachShader=_emscripten_glDetachShader=(program,shader)=>{var programShader=GL.programShaders[program];if(!programShader){err(`WARNING: _glDetachShader received invalid program: ${program}`);return}var index=programShader.indexOf(shader);programShader.splice(index,1);orig_glDetachShader(program,shader)};var orig_glUseProgram=_glUseProgram;_glUseProgram=_emscripten_glUseProgram=program=>{if(GL.currProgram!=program){GLImmediate.currentRenderer=null;GL.currProgram=program;GLImmediate.fixedFunctionProgram=0;orig_glUseProgram(program)}};var orig_glDeleteProgram=_glDeleteProgram;_glDeleteProgram=_emscripten_glDeleteProgram=program=>{orig_glDeleteProgram(program);if(program==GL.currProgram){GLImmediate.currentRenderer=null;GL.currProgram=0}};var zeroUsedPrograms={};var orig_glBindAttribLocation=_glBindAttribLocation;_glBindAttribLocation=_emscripten_glBindAttribLocation=(program,index,name)=>{if(index==0)zeroUsedPrograms[program]=true;orig_glBindAttribLocation(program,index,name)};var orig_glLinkProgram=_glLinkProgram;_glLinkProgram=_emscripten_glLinkProgram=program=>{if(!(program in zeroUsedPrograms)){GLctx.bindAttribLocation(GL.programs[program],0,"a_position")}orig_glLinkProgram(program)};var orig_glBindBuffer=_glBindBuffer;_glBindBuffer=_emscripten_glBindBuffer=(target,buffer)=>{orig_glBindBuffer(target,buffer);if(target==GLctx.ARRAY_BUFFER){if(GLEmulation.currentVao){assert(GLEmulation.currentVao.arrayBuffer==buffer||GLEmulation.currentVao.arrayBuffer==0||buffer==0,"TODO: support for multiple array buffers in vao");GLEmulation.currentVao.arrayBuffer=buffer}}else if(target==GLctx.ELEMENT_ARRAY_BUFFER){if(GLEmulation.currentVao)GLEmulation.currentVao.elementArrayBuffer=buffer}};var orig_glGetFloatv=_glGetFloatv;_glGetFloatv=_emscripten_glGetFloatv=(pname,params)=>{if(pname==2982){HEAPF32.set(GLImmediate.matrix[0],params>>2)}else if(pname==2983){HEAPF32.set(GLImmediate.matrix[1],params>>2)}else if(pname==2984){HEAPF32.set(GLImmediate.matrix[2+GLImmediate.clientActiveTexture],params>>2)}else if(pname==2918){HEAPF32.set(GLEmulation.fogColor,params>>2)}else if(pname==2915){HEAPF32[params>>2]=GLEmulation.fogStart}else if(pname==2916){HEAPF32[params>>2]=GLEmulation.fogEnd}else if(pname==2914){HEAPF32[params>>2]=GLEmulation.fogDensity}else if(pname==2917){HEAPF32[params>>2]=GLEmulation.fogMode}else if(pname==2899){HEAPF32[params>>2]=GLEmulation.lightModelAmbient[0];HEAPF32[params+4>>2]=GLEmulation.lightModelAmbient[1];HEAPF32[params+8>>2]=GLEmulation.lightModelAmbient[2];HEAPF32[params+12>>2]=GLEmulation.lightModelAmbient[3]}else if(pname==3010){HEAPF32[params>>2]=GLEmulation.alphaTestRef}else{orig_glGetFloatv(pname,params)}};var orig_glHint=_glHint;_glHint=_emscripten_glHint=(target,mode)=>{if(target==34031){return}orig_glHint(target,mode)};var orig_glEnableVertexAttribArray=_glEnableVertexAttribArray;_glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray=index=>{orig_glEnableVertexAttribArray(index);GLEmulation.enabledVertexAttribArrays[index]=1;if(GLEmulation.currentVao)GLEmulation.currentVao.enabledVertexAttribArrays[index]=1};var orig_glDisableVertexAttribArray=_glDisableVertexAttribArray;_glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray=index=>{orig_glDisableVertexAttribArray(index);delete GLEmulation.enabledVertexAttribArrays[index];if(GLEmulation.currentVao)delete GLEmulation.currentVao.enabledVertexAttribArrays[index]};var orig_glVertexAttribPointer=_glVertexAttribPointer;_glVertexAttribPointer=_emscripten_glVertexAttribPointer=(index,size,type,normalized,stride,pointer)=>{orig_glVertexAttribPointer(index,size,type,normalized,stride,pointer);if(GLEmulation.currentVao){GLEmulation.currentVao.vertexAttribPointers[index]=[index,size,type,normalized,stride,pointer]}}},getAttributeFromCapability(cap){var attrib=null;switch(cap){case 3553:abort("GL_TEXTURE_2D is not a spec-defined capability for gl{Enable,Disable}ClientState.");case 32888:attrib=GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture;break;case 32884:attrib=GLImmediate.VERTEX;break;case 32885:attrib=GLImmediate.NORMAL;break;case 32886:attrib=GLImmediate.COLOR;break}return attrib}};var GLImmediate={MapTreeLib:null,spawnMapTreeLib:()=>{function CNaiveListMap(){var list=[];this.insert=function CNaiveListMap_insert(key,val){if(this.contains(key|0))return false;list.push([key,val]);return true};var __contains_i;this.contains=function CNaiveListMap_contains(key){for(__contains_i=0;__contains_inew CMapTree}},TexEnvJIT:null,spawnTexEnvJIT:()=>{var GL_TEXTURE0=33984;var GL_TEXTURE_1D=3552;var GL_TEXTURE_2D=3553;var GL_TEXTURE_3D=32879;var GL_TEXTURE_CUBE_MAP=34067;var GL_TEXTURE_ENV=8960;var GL_TEXTURE_ENV_MODE=8704;var GL_TEXTURE_ENV_COLOR=8705;var GL_SRC0_RGB=34176;var GL_SRC1_RGB=34177;var GL_SRC2_RGB=34178;var GL_SRC0_ALPHA=34184;var GL_SRC1_ALPHA=34185;var GL_SRC2_ALPHA=34186;var GL_OPERAND0_RGB=34192;var GL_OPERAND1_RGB=34193;var GL_OPERAND2_RGB=34194;var GL_OPERAND0_ALPHA=34200;var GL_OPERAND1_ALPHA=34201;var GL_OPERAND2_ALPHA=34202;var GL_COMBINE_RGB=34161;var GL_COMBINE_ALPHA=34162;var GL_RGB_SCALE=34163;var GL_ALPHA_SCALE=3356;var GL_ADD=260;var GL_BLEND=3042;var GL_REPLACE=7681;var GL_MODULATE=8448;var GL_DECAL=8449;var GL_COMBINE=34160;var GL_SUBTRACT=34023;var GL_INTERPOLATE=34165;var GL_TEXTURE=5890;var GL_CONSTANT=34166;var GL_PRIMARY_COLOR=34167;var GL_PREVIOUS=34168;var GL_SRC_COLOR=768;var GL_ONE_MINUS_SRC_COLOR=769;var GL_SRC_ALPHA=770;var GL_ONE_MINUS_SRC_ALPHA=771;var TEXENVJIT_NAMESPACE_PREFIX="tej_";var TEX_UNIT_UNIFORM_PREFIX="uTexUnit";var TEX_COORD_VARYING_PREFIX="vTexCoord";var PRIM_COLOR_VARYING="vPrimColor";var TEX_MATRIX_UNIFORM_PREFIX="uTexMatrix";var s_texUnits=null;var s_activeTexture=0;var s_requiredTexUnitsForPass=[];function abort_noSupport(info){abort("[TexEnvJIT] ABORT: No support: "+info)}function abort_sanity(info){abort("[TexEnvJIT] ABORT: Sanity failure: "+info)}function genTexUnitSampleExpr(texUnitID){var texUnit=s_texUnits[texUnitID];var texType=texUnit.getTexType();var func=null;switch(texType){case GL_TEXTURE_1D:func="texture2D";break;case GL_TEXTURE_2D:func="texture2D";break;case GL_TEXTURE_3D:return abort_noSupport("No support for 3D textures.");case GL_TEXTURE_CUBE_MAP:func="textureCube";break;default:return abort_sanity(`Unknown texType: ${ptrToString(texType)}`)}var texCoordExpr=TEX_COORD_VARYING_PREFIX+texUnitID;if(TEX_MATRIX_UNIFORM_PREFIX!=null){texCoordExpr=`(${TEX_MATRIX_UNIFORM_PREFIX}${texUnitID} * ${texCoordExpr})`}return`${func}(${TEX_UNIT_UNIFORM_PREFIX}${texUnitID}, ${texCoordExpr}.xy)`}function getTypeFromCombineOp(op){switch(op){case GL_SRC_COLOR:case GL_ONE_MINUS_SRC_COLOR:return"vec3";case GL_SRC_ALPHA:case GL_ONE_MINUS_SRC_ALPHA:return"float"}return abort_noSupport("Unsupported combiner op: "+ptrToString(op))}function getCurTexUnit(){return s_texUnits[s_activeTexture]}function genCombinerSourceExpr(texUnitID,constantExpr,previousVar,src,op){var srcExpr=null;switch(src){case GL_TEXTURE:srcExpr=genTexUnitSampleExpr(texUnitID);break;case GL_CONSTANT:srcExpr=constantExpr;break;case GL_PRIMARY_COLOR:srcExpr=PRIM_COLOR_VARYING;break;case GL_PREVIOUS:srcExpr=previousVar;break;default:return abort_noSupport("Unsupported combiner src: "+ptrToString(src))}var expr=null;switch(op){case GL_SRC_COLOR:expr=srcExpr+".rgb";break;case GL_ONE_MINUS_SRC_COLOR:expr="(vec3(1.0) - "+srcExpr+".rgb)";break;case GL_SRC_ALPHA:expr=srcExpr+".a";break;case GL_ONE_MINUS_SRC_ALPHA:expr="(1.0 - "+srcExpr+".a)";break;default:return abort_noSupport("Unsupported combiner op: "+ptrToString(op))}return expr}function valToFloatLiteral(val){if(val==Math.round(val))return val+".0";return val}function CTexEnv(){this.mode=GL_MODULATE;this.colorCombiner=GL_MODULATE;this.alphaCombiner=GL_MODULATE;this.colorScale=1;this.alphaScale=1;this.envColor=[0,0,0,0];this.colorSrc=[GL_TEXTURE,GL_PREVIOUS,GL_CONSTANT];this.alphaSrc=[GL_TEXTURE,GL_PREVIOUS,GL_CONSTANT];this.colorOp=[GL_SRC_COLOR,GL_SRC_COLOR,GL_SRC_ALPHA];this.alphaOp=[GL_SRC_ALPHA,GL_SRC_ALPHA,GL_SRC_ALPHA];this.traverseKey={7681:0,8448:1,260:2,3042:3,8449:4,34160:5,34023:3,34165:4,5890:0,34166:1,34167:2,34168:3,768:0,769:1,770:2,771:3};this.key0=-1;this.key1=0;this.key2=0;this.computeKey0=function(){var k=this.traverseKey;var key=k[this.mode]*1638400;key+=k[this.colorCombiner]*327680;key+=k[this.alphaCombiner]*65536;key+=(this.colorScale-1)*16384;key+=(this.alphaScale-1)*4096;key+=k[this.colorSrc[0]]*1024;key+=k[this.colorSrc[1]]*256;key+=k[this.colorSrc[2]]*64;key+=k[this.alphaSrc[0]]*16;key+=k[this.alphaSrc[1]]*4;key+=k[this.alphaSrc[2]];return key};this.computeKey1=function(){var k=this.traverseKey;var key=k[this.colorOp[0]]*4096;key+=k[this.colorOp[1]]*1024;key+=k[this.colorOp[2]]*256;key+=k[this.alphaOp[0]]*16;key+=k[this.alphaOp[1]]*4;key+=k[this.alphaOp[2]];return key};this.computeKey2=function(){return this.envColor[0]*16777216+this.envColor[1]*65536+this.envColor[2]*256+1+this.envColor[3]};this.recomputeKey=function(){this.key0=this.computeKey0();this.key1=this.computeKey1();this.key2=this.computeKey2()};this.invalidateKey=function(){this.key0=-1;GLImmediate.currentRenderer=null}}function CTexUnit(){this.env=new CTexEnv;this.enabled_tex1D=false;this.enabled_tex2D=false;this.enabled_tex3D=false;this.enabled_texCube=false;this.texTypesEnabled=0;this.traverseState=function CTexUnit_traverseState(keyView){if(this.texTypesEnabled){if(this.env.key0==-1){this.env.recomputeKey()}keyView.next(this.texTypesEnabled|this.env.key0<<4);keyView.next(this.env.key1);keyView.next(this.env.key2)}else{keyView.next(0)}}}CTexUnit.prototype.enabled=function CTexUnit_enabled(){return this.texTypesEnabled};CTexUnit.prototype.genPassLines=function CTexUnit_genPassLines(passOutputVar,passInputVar,texUnitID){if(!this.enabled()){return["vec4 "+passOutputVar+" = "+passInputVar+";"]}var lines=this.env.genPassLines(passOutputVar,passInputVar,texUnitID).join("\n");var texLoadLines="";var texLoadRegex=/(texture.*?\(.*?\))/g;var loadCounter=0;var load;while(load=texLoadRegex.exec(lines)){var texLoadExpr=load[1];var secondOccurrence=lines.slice(load.index+1).indexOf(texLoadExpr);if(secondOccurrence!=-1){var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texLoadVar=prefix+"texload"+loadCounter++;var texLoadLine="vec4 "+texLoadVar+" = "+texLoadExpr+";\n";texLoadLines+=texLoadLine+"\n";lines=lines.split(texLoadExpr).join(texLoadVar);texLoadRegex=/(texture.*\(.*\))/g}}return[texLoadLines+lines]};CTexUnit.prototype.getTexType=function CTexUnit_getTexType(){if(this.enabled_texCube){return GL_TEXTURE_CUBE_MAP}else if(this.enabled_tex3D){return GL_TEXTURE_3D}else if(this.enabled_tex2D){return GL_TEXTURE_2D}else if(this.enabled_tex1D){return GL_TEXTURE_1D}return 0};CTexEnv.prototype.genPassLines=function CTexEnv_genPassLines(passOutputVar,passInputVar,texUnitID){switch(this.mode){case GL_REPLACE:{return["vec4 "+passOutputVar+" = "+genTexUnitSampleExpr(texUnitID)+";"]}case GL_ADD:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";","vec3 "+colorVar+" = "+passInputVar+".rgb + "+texVar+".rgb;","float "+alphaVar+" = "+passInputVar+".a * "+texVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_MODULATE:{var line=["vec4 "+passOutputVar," = ",passInputVar," * ",genTexUnitSampleExpr(texUnitID),";"];return[line.join("")]}case GL_DECAL:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";",["vec3 "+colorVar+" = ",passInputVar+".rgb * (1.0 - "+texVar+".a)"," + ",texVar+".rgb * "+texVar+".a",";"].join(""),"float "+alphaVar+" = "+passInputVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_BLEND:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";",["vec3 "+colorVar+" = ",passInputVar+".rgb * (1.0 - "+texVar+".rgb)"," + ",PRIM_COLOR_VARYING+".rgb * "+texVar+".rgb",";"].join(""),"float "+alphaVar+" = "+texVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_COMBINE:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";var colorLines=this.genCombinerLines(true,colorVar,passInputVar,texUnitID,this.colorCombiner,this.colorSrc,this.colorOp);var alphaLines=this.genCombinerLines(false,alphaVar,passInputVar,texUnitID,this.alphaCombiner,this.alphaSrc,this.alphaOp);var scaledColor=this.colorScale==1?colorVar:colorVar+" * "+valToFloatLiteral(this.colorScale);var scaledAlpha=this.alphaScale==1?alphaVar:alphaVar+" * "+valToFloatLiteral(this.alphaScale);var line=["vec4 "+passOutputVar," = ","vec4(",scaledColor,", ",scaledAlpha,")",";"].join("");return[].concat(colorLines,alphaLines,[line])}}return abort_noSupport("Unsupported TexEnv mode: "+ptrToString(this.mode))};CTexEnv.prototype.genCombinerLines=function CTexEnv_getCombinerLines(isColor,outputVar,passInputVar,texUnitID,combiner,srcArr,opArr){var argsNeeded=null;switch(combiner){case GL_REPLACE:argsNeeded=1;break;case GL_MODULATE:case GL_ADD:case GL_SUBTRACT:argsNeeded=2;break;case GL_INTERPOLATE:argsNeeded=3;break;default:return abort_noSupport("Unsupported combiner: "+ptrToString(combiner))}var constantExpr=["vec4(",valToFloatLiteral(this.envColor[0]),", ",valToFloatLiteral(this.envColor[1]),", ",valToFloatLiteral(this.envColor[2]),", ",valToFloatLiteral(this.envColor[3]),")"].join("");var src0Expr=argsNeeded>=1?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[0],opArr[0]):null;var src1Expr=argsNeeded>=2?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[1],opArr[1]):null;var src2Expr=argsNeeded>=3?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[2],opArr[2]):null;var outputType=isColor?"vec3":"float";var lines=null;switch(combiner){case GL_REPLACE:{lines=[`${outputType} ${outputVar} = ${src0Expr};`];break}case GL_MODULATE:{lines=[`${outputType} ${outputVar} = ${src0Expr} * ${src1Expr};`];break}case GL_ADD:{lines=[`${outputType} ${outputVar} = ${src0Expr} + ${src1Expr};`];break}case GL_SUBTRACT:{lines=[`${outputType} ${outputVar} = ${src0Expr} - ${src1Expr};`];break}case GL_INTERPOLATE:{var prefix=`${TEXENVJIT_NAMESPACE_PREFIX}env${texUnitID}_`;var arg2Var=`${prefix}colorSrc2`;var arg2Type=getTypeFromCombineOp(this.colorOp[2]);lines=[`${arg2Type} ${arg2Var} = ${src2Expr};`,`${outputType} ${outputVar} = ${src0Expr} * ${arg2Var} + ${src1Expr} * (1.0 - ${arg2Var});`];break}default:return abort_sanity("Unmatched TexEnv.colorCombiner?")}return lines};return{init:(gl,specifiedMaxTextureImageUnits)=>{var maxTexUnits=0;if(specifiedMaxTextureImageUnits){maxTexUnits=specifiedMaxTextureImageUnits}else if(gl){maxTexUnits=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)}assert(maxTexUnits>0);s_texUnits=[];for(var i=0;i{TEX_UNIT_UNIFORM_PREFIX=uTexUnitPrefix;TEX_COORD_VARYING_PREFIX=vTexCoordPrefix;PRIM_COLOR_VARYING=vPrimColor;TEX_MATRIX_UNIFORM_PREFIX=uTexMatrixPrefix},genAllPassLines:(resultDest,indentSize=0)=>{s_requiredTexUnitsForPass.length=0;var lines=[];var lastPassVar=PRIM_COLOR_VARYING;for(var i=0;is_requiredTexUnitsForPass,getActiveTexture:()=>s_activeTexture,traverseState:keyView=>{for(var texUnit of s_texUnits){texUnit.traverseState(keyView)}},getTexUnitType:texUnitID=>{assert(texUnitID>=0&&texUnitID{s_activeTexture=texture-GL_TEXTURE0;if(GLImmediate.currentMatrix>=2){GLImmediate.currentMatrix=2+s_activeTexture}},hook_enable:cap=>{var cur=getCurTexUnit();switch(cap){case GL_TEXTURE_1D:if(!cur.enabled_tex1D){GLImmediate.currentRenderer=null;cur.enabled_tex1D=true;cur.texTypesEnabled|=1}break;case GL_TEXTURE_2D:if(!cur.enabled_tex2D){GLImmediate.currentRenderer=null;cur.enabled_tex2D=true;cur.texTypesEnabled|=2}break;case GL_TEXTURE_3D:if(!cur.enabled_tex3D){GLImmediate.currentRenderer=null;cur.enabled_tex3D=true;cur.texTypesEnabled|=4}break;case GL_TEXTURE_CUBE_MAP:if(!cur.enabled_texCube){GLImmediate.currentRenderer=null;cur.enabled_texCube=true;cur.texTypesEnabled|=8}break}},hook_disable:cap=>{var cur=getCurTexUnit();switch(cap){case GL_TEXTURE_1D:if(cur.enabled_tex1D){GLImmediate.currentRenderer=null;cur.enabled_tex1D=false;cur.texTypesEnabled&=~1}break;case GL_TEXTURE_2D:if(cur.enabled_tex2D){GLImmediate.currentRenderer=null;cur.enabled_tex2D=false;cur.texTypesEnabled&=~2}break;case GL_TEXTURE_3D:if(cur.enabled_tex3D){GLImmediate.currentRenderer=null;cur.enabled_tex3D=false;cur.texTypesEnabled&=~4}break;case GL_TEXTURE_CUBE_MAP:if(cur.enabled_texCube){GLImmediate.currentRenderer=null;cur.enabled_texCube=false;cur.texTypesEnabled&=~8}break}},hook_texEnvf(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_RGB_SCALE:if(env.colorScale!=param){env.invalidateKey();env.colorScale=param}break;case GL_ALPHA_SCALE:if(env.alphaScale!=param){env.invalidateKey();env.alphaScale=param}break;default:err("WARNING: Unhandled `pname` in call to `glTexEnvf`.")}},hook_texEnvi(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_MODE:if(env.mode!=param){env.invalidateKey();env.mode=param}break;case GL_COMBINE_RGB:if(env.colorCombiner!=param){env.invalidateKey();env.colorCombiner=param}break;case GL_COMBINE_ALPHA:if(env.alphaCombiner!=param){env.invalidateKey();env.alphaCombiner=param}break;case GL_SRC0_RGB:if(env.colorSrc[0]!=param){env.invalidateKey();env.colorSrc[0]=param}break;case GL_SRC1_RGB:if(env.colorSrc[1]!=param){env.invalidateKey();env.colorSrc[1]=param}break;case GL_SRC2_RGB:if(env.colorSrc[2]!=param){env.invalidateKey();env.colorSrc[2]=param}break;case GL_SRC0_ALPHA:if(env.alphaSrc[0]!=param){env.invalidateKey();env.alphaSrc[0]=param}break;case GL_SRC1_ALPHA:if(env.alphaSrc[1]!=param){env.invalidateKey();env.alphaSrc[1]=param}break;case GL_SRC2_ALPHA:if(env.alphaSrc[2]!=param){env.invalidateKey();env.alphaSrc[2]=param}break;case GL_OPERAND0_RGB:if(env.colorOp[0]!=param){env.invalidateKey();env.colorOp[0]=param}break;case GL_OPERAND1_RGB:if(env.colorOp[1]!=param){env.invalidateKey();env.colorOp[1]=param}break;case GL_OPERAND2_RGB:if(env.colorOp[2]!=param){env.invalidateKey();env.colorOp[2]=param}break;case GL_OPERAND0_ALPHA:if(env.alphaOp[0]!=param){env.invalidateKey();env.alphaOp[0]=param}break;case GL_OPERAND1_ALPHA:if(env.alphaOp[1]!=param){env.invalidateKey();env.alphaOp[1]=param}break;case GL_OPERAND2_ALPHA:if(env.alphaOp[2]!=param){env.invalidateKey();env.alphaOp[2]=param}break;case GL_RGB_SCALE:if(env.colorScale!=param){env.invalidateKey();env.colorScale=param}break;case GL_ALPHA_SCALE:if(env.alphaScale!=param){env.invalidateKey();env.alphaScale=param}break;default:err("WARNING: Unhandled `pname` in call to `glTexEnvi`.")}},hook_texEnvfv(target,pname,params){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_COLOR:{for(var i=0;i<4;i++){var param=HEAPF32[params+i*4>>2];if(env.envColor[i]!=param){env.invalidateKey();env.envColor[i]=param}}break}default:err("WARNING: Unhandled `pname` in call to `glTexEnvfv`.")}},hook_getTexEnviv(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_MODE:HEAP32[param>>2]=env.mode;checkInt32(env.mode);return;case GL_TEXTURE_ENV_COLOR:HEAP32[param>>2]=Math.max(Math.min(env.envColor[0]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[0]*255,255,-255)));HEAP32[param+1>>2]=Math.max(Math.min(env.envColor[1]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[1]*255,255,-255)));HEAP32[param+2>>2]=Math.max(Math.min(env.envColor[2]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[2]*255,255,-255)));HEAP32[param+3>>2]=Math.max(Math.min(env.envColor[3]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[3]*255,255,-255)));return;case GL_COMBINE_RGB:HEAP32[param>>2]=env.colorCombiner;checkInt32(env.colorCombiner);return;case GL_COMBINE_ALPHA:HEAP32[param>>2]=env.alphaCombiner;checkInt32(env.alphaCombiner);return;case GL_SRC0_RGB:HEAP32[param>>2]=env.colorSrc[0];checkInt32(env.colorSrc[0]);return;case GL_SRC1_RGB:HEAP32[param>>2]=env.colorSrc[1];checkInt32(env.colorSrc[1]);return;case GL_SRC2_RGB:HEAP32[param>>2]=env.colorSrc[2];checkInt32(env.colorSrc[2]);return;case GL_SRC0_ALPHA:HEAP32[param>>2]=env.alphaSrc[0];checkInt32(env.alphaSrc[0]);return;case GL_SRC1_ALPHA:HEAP32[param>>2]=env.alphaSrc[1];checkInt32(env.alphaSrc[1]);return;case GL_SRC2_ALPHA:HEAP32[param>>2]=env.alphaSrc[2];checkInt32(env.alphaSrc[2]);return;case GL_OPERAND0_RGB:HEAP32[param>>2]=env.colorOp[0];checkInt32(env.colorOp[0]);return;case GL_OPERAND1_RGB:HEAP32[param>>2]=env.colorOp[1];checkInt32(env.colorOp[1]);return;case GL_OPERAND2_RGB:HEAP32[param>>2]=env.colorOp[2];checkInt32(env.colorOp[2]);return;case GL_OPERAND0_ALPHA:HEAP32[param>>2]=env.alphaOp[0];checkInt32(env.alphaOp[0]);return;case GL_OPERAND1_ALPHA:HEAP32[param>>2]=env.alphaOp[1];checkInt32(env.alphaOp[1]);return;case GL_OPERAND2_ALPHA:HEAP32[param>>2]=env.alphaOp[2];checkInt32(env.alphaOp[2]);return;case GL_RGB_SCALE:HEAP32[param>>2]=env.colorScale;checkInt32(env.colorScale);return;case GL_ALPHA_SCALE:HEAP32[param>>2]=env.alphaScale;checkInt32(env.alphaScale);return;default:err("WARNING: Unhandled `pname` in call to `glGetTexEnvi`.")}},hook_getTexEnvfv:(target,pname,param)=>{if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_COLOR:HEAPF32[param>>2]=env.envColor[0];HEAPF32[param+4>>2]=env.envColor[1];HEAPF32[param+8>>2]=env.envColor[2];HEAPF32[param+12>>2]=env.envColor[3];return}}}},vertexData:null,vertexDataU8:null,tempData:null,indexData:null,vertexCounter:0,mode:-1,rendererCache:null,rendererComponents:[],rendererComponentPointer:0,lastRenderer:null,lastArrayBuffer:null,lastProgram:null,lastStride:-1,matrix:[],matrixStack:[],currentMatrix:0,tempMatrix:null,matricesModified:false,useTextureMatrix:false,VERTEX:0,NORMAL:1,COLOR:2,TEXTURE0:3,NUM_ATTRIBUTES:-1,MAX_TEXTURES:-1,totalEnabledClientAttributes:0,enabledClientAttributes:[0,0],clientAttributes:[],liveClientAttributes:[],currentRenderer:null,modifiedClientAttributes:false,clientActiveTexture:0,clientColor:null,usedTexUnitList:[],fixedFunctionProgram:null,setClientAttribute(name,size,type,stride,pointer){var attrib=GLImmediate.clientAttributes[name];if(!attrib){for(var i=0;i<=name;i++){GLImmediate.clientAttributes[i]||={name,size,type,stride,pointer,offset:0}}}else{attrib.name=name;attrib.size=size;attrib.type=type;attrib.stride=stride;attrib.pointer=pointer;attrib.offset=0}GLImmediate.modifiedClientAttributes=true},addRendererComponent(name,size,type){if(!GLImmediate.rendererComponents[name]){GLImmediate.rendererComponents[name]=1;if(GLImmediate.enabledClientAttributes[name]){warnOnce("Warning: glTexCoord used after EnableClientState for TEXTURE_COORD_ARRAY for TEXTURE0. Disabling TEXTURE_COORD_ARRAY...")}GLImmediate.enabledClientAttributes[name]=true;GLImmediate.setClientAttribute(name,size,type,0,GLImmediate.rendererComponentPointer);GLImmediate.rendererComponentPointer+=size*GL.byteSizeByType[type-GL.byteSizeByTypeRoot]}else{GLImmediate.rendererComponents[name]++}},disableBeginEndClientAttributes(){for(var i=0;i0&&this.normalLocation>=0;this.hasColor=this.colorLocation===0||this.colorLocation>0;this.floatType=GLctx.FLOAT;this.fogColorLocation=GLctx.getUniformLocation(this.program,"u_fogColor");this.fogEndLocation=GLctx.getUniformLocation(this.program,"u_fogEnd");this.fogScaleLocation=GLctx.getUniformLocation(this.program,"u_fogScale");this.fogDensityLocation=GLctx.getUniformLocation(this.program,"u_fogDensity");this.hasFog=!!(this.fogColorLocation||this.fogEndLocation||this.fogScaleLocation||this.fogDensityLocation);this.pointSizeLocation=GLctx.getUniformLocation(this.program,"u_pointSize");this.hasClipPlane=false;this.clipPlaneEquationLocation=[];for(var clipPlaneId=0;clipPlaneId>2,end>>2))}if(!GL.currProgram){if(GLImmediate.fixedFunctionProgram!=this.program){GLctx.useProgram(this.program);GLImmediate.fixedFunctionProgram=this.program}}if(this.modelViewLocation&&this.modelViewMatrixVersion!=GLImmediate.matrixVersion[0]){this.modelViewMatrixVersion=GLImmediate.matrixVersion[0];GLctx.uniformMatrix4fv(this.modelViewLocation,false,GLImmediate.matrix[0]);if(GLEmulation.lightEnabled){var tmpMVinv=GLImmediate.matrixLib.mat4.create(GLImmediate.matrix[0]);GLImmediate.matrixLib.mat4.inverse(tmpMVinv);GLImmediate.matrixLib.mat4.transpose(tmpMVinv);GLctx.uniformMatrix3fv(this.normalMatrixLocation,false,GLImmediate.matrixLib.mat4.toMat3(tmpMVinv))}}if(this.projectionLocation&&this.projectionMatrixVersion!=GLImmediate.matrixVersion[1]){this.projectionMatrixVersion=GLImmediate.matrixVersion[1];GLctx.uniformMatrix4fv(this.projectionLocation,false,GLImmediate.matrix[1])}var clientAttributes=GLImmediate.clientAttributes;var posAttr=clientAttributes[GLImmediate.VERTEX];GLctx.vertexAttribPointer(this.positionLocation,posAttr.size,posAttr.type,false,GLImmediate.stride,posAttr.offset);GLctx.enableVertexAttribArray(this.positionLocation);if(this.hasNormal){var normalAttr=clientAttributes[GLImmediate.NORMAL];GLctx.vertexAttribPointer(this.normalLocation,normalAttr.size,normalAttr.type,true,GLImmediate.stride,normalAttr.offset);GLctx.enableVertexAttribArray(this.normalLocation)}if(this.hasTextures){for(var i=0;i=0){GLctx.disableVertexAttribArray(this.texCoordLocations[i])}}}if(this.hasColor){GLctx.disableVertexAttribArray(this.colorLocation)}if(this.hasNormal){GLctx.disableVertexAttribArray(this.normalLocation)}if(!GL.currProgram){GLctx.useProgram(null);GLImmediate.fixedFunctionProgram=0}if(!GLctx.currentArrayBufferBinding){GLctx.bindBuffer(GLctx.ARRAY_BUFFER,null);GLImmediate.lastArrayBuffer=null}GLImmediate.matricesModified=true};this.init()}return new Renderer},setupFuncs(){GLImmediate.MapTreeLib=GLImmediate.spawnMapTreeLib();GLImmediate.spawnMapTreeLib=null;GLImmediate.TexEnvJIT=GLImmediate.spawnTexEnvJIT();GLImmediate.spawnTexEnvJIT=null;GLImmediate.setupHooks()},setupHooks(){if(!GLEmulation.hasRunInit){GLEmulation.init()}var glActiveTexture=_glActiveTexture;_glActiveTexture=_emscripten_glActiveTexture=texture=>{GLImmediate.TexEnvJIT.hook_activeTexture(texture);glActiveTexture(texture)};var glEnable=_glEnable;_glEnable=_emscripten_glEnable=cap=>{GLImmediate.TexEnvJIT.hook_enable(cap);glEnable(cap)};var glDisable=_glDisable;_glDisable=_emscripten_glDisable=cap=>{GLImmediate.TexEnvJIT.hook_disable(cap);glDisable(cap)};_glTexEnvf=_emscripten_glTexEnvf=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvf(target,pname,param)};_glTexEnvi=_emscripten_glTexEnvi=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvi(target,pname,param)};_glTexEnvfv=_emscripten_glTexEnvfv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvfv(target,pname,param)};_glGetTexEnviv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_getTexEnviv(target,pname,param)};_glGetTexEnvfv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_getTexEnvfv(target,pname,param)};var glGetIntegerv=_glGetIntegerv;_glGetIntegerv=_emscripten_glGetIntegerv=(pname,params)=>{switch(pname){case 35725:{var cur=GLctx.getParameter(GLctx.CURRENT_PROGRAM);if(cur==GLImmediate.fixedFunctionProgram){HEAP32[params>>2]=0;checkInt32(0);return}break}}glGetIntegerv(pname,params)}},initted:false,init(){err("WARNING: using emscripten GL immediate mode emulation. This is very limited in what it supports");GLImmediate.initted=true;if(!Browser.useWebGL)return;GLImmediate.MAX_TEXTURES=Math.min(Module["GL_MAX_TEXTURE_IMAGE_UNITS"]||GLctx.getParameter(GLctx.MAX_TEXTURE_IMAGE_UNITS),28);GLImmediate.TexEnvJIT.init(GLctx,GLImmediate.MAX_TEXTURES);GLImmediate.NUM_ATTRIBUTES=3+GLImmediate.MAX_TEXTURES;GLImmediate.clientAttributes=[];GLEmulation.enabledClientAttribIndices=[];for(var i=0;i>2);GLImmediate.indexData=new Uint16Array(GL.MAX_TEMP_BUFFER_SIZE>>1);GLImmediate.vertexDataU8=new Uint8Array(GLImmediate.tempData.buffer);GL.generateTempBuffers(true,GL.currentContext);GLImmediate.clientColor=new Float32Array([1,1,1,1])},prepareClientAttributes(count,beginEnd){if(!GLImmediate.modifiedClientAttributes){GLImmediate.vertexCounter=GLImmediate.stride*count/4;return}GLImmediate.modifiedClientAttributes=false;var clientStartPointer=4294967295;var bytes=0;var minStride=4294967295;var maxStride=0;var attributes=GLImmediate.liveClientAttributes;attributes.length=0;for(var i=0;i<3+GLImmediate.MAX_TEXTURES;i++){if(GLImmediate.enabledClientAttributes[i]){var attr=GLImmediate.clientAttributes[i];attributes.push(attr);clientStartPointer=Math.min(clientStartPointer,attr.pointer);attr.sizeBytes=attr.size*GL.byteSizeByType[attr.type-GL.byteSizeByTypeRoot];bytes+=attr.sizeBytes;minStride=Math.min(minStride,attr.stride);maxStride=Math.max(maxStride,attr.stride)}}if((minStride!=maxStride||maxStride>2];HEAP32[start+attr.offset+(bytes*j+k)>>2]=val;checkInt32(val)}}}else{for(var j=0;j=0||!numProvidedIndexes);var renderer=GLImmediate.getRenderer();var numVertices=4*GLImmediate.vertexCounter/GLImmediate.stride;if(!numVertices)return;assert(numVertices%1==0,"`numVertices` must be an integer.");var emulatedElementArrayBuffer=false;var numIndexes=0;if(numProvidedIndexes){numIndexes=numProvidedIndexes;if(!GLctx.currentArrayBufferBinding&&GLImmediate.firstVertex>GLImmediate.lastVertex){assert(!GLctx.currentElementArrayBufferBinding);for(var i=0;i>1];GLImmediate.firstVertex=Math.min(GLImmediate.firstVertex,currIndex);GLImmediate.lastVertex=Math.max(GLImmediate.lastVertex,currIndex+1)}}if(!GLctx.currentElementArrayBufferBinding){assert(numProvidedIndexes<<1<=GL.MAX_TEMP_BUFFER_SIZE,"too many immediate mode indexes (a)");var indexBuffer=GL.getTempIndexBuffer(numProvidedIndexes<<1);GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,indexBuffer);GLctx.bufferSubData(GLctx.ELEMENT_ARRAY_BUFFER,0,HEAPU16.subarray(ptr>>1,ptr+(numProvidedIndexes<<1)>>1));ptr=0;emulatedElementArrayBuffer=true}}else if(GLImmediate.mode>6){if(GLImmediate.mode!=7)abort("unsupported immediate mode "+GLImmediate.mode);assert(GLImmediate.firstVertex%4==0);ptr=GLImmediate.firstVertex*3;var numQuads=numVertices/4;numIndexes=numQuads*6;assert(ptr+(numIndexes<<1)<=GL.MAX_TEMP_BUFFER_SIZE,"too many immediate mode indexes (b)");GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,GL.currentContext.tempQuadIndexBuffer);emulatedElementArrayBuffer=true;GLImmediate.mode=GLctx.TRIANGLES}renderer.prepare();if(numIndexes){GLctx.drawElements(GLImmediate.mode,numIndexes,GLctx.UNSIGNED_SHORT,ptr)}else{GLctx.drawArrays(GLImmediate.mode,startIndex,numVertices)}if(emulatedElementArrayBuffer){GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,GL.buffers[GLctx.currentElementArrayBufferBinding]||null)}renderer.cleanup()}};GLImmediate.matrixLib=(()=>{var vec3={};var mat3={};var mat4={};var quat4={};var MatrixArray=Float32Array;vec3.create=function(vec){var dest=new MatrixArray(3);if(vec){dest[0]=vec[0];dest[1]=vec[1];dest[2]=vec[2]}else{dest[0]=dest[1]=dest[2]=0}return dest};vec3.set=function(vec,dest){dest[0]=vec[0];dest[1]=vec[1];dest[2]=vec[2];return dest};vec3.add=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]+=vec2[0];vec[1]+=vec2[1];vec[2]+=vec2[2];return vec}dest[0]=vec[0]+vec2[0];dest[1]=vec[1]+vec2[1];dest[2]=vec[2]+vec2[2];return dest};vec3.subtract=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]-=vec2[0];vec[1]-=vec2[1];vec[2]-=vec2[2];return vec}dest[0]=vec[0]-vec2[0];dest[1]=vec[1]-vec2[1];dest[2]=vec[2]-vec2[2];return dest};vec3.multiply=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]*=vec2[0];vec[1]*=vec2[1];vec[2]*=vec2[2];return vec}dest[0]=vec[0]*vec2[0];dest[1]=vec[1]*vec2[1];dest[2]=vec[2]*vec2[2];return dest};vec3.negate=function(vec,dest){if(!dest){dest=vec}dest[0]=-vec[0];dest[1]=-vec[1];dest[2]=-vec[2];return dest};vec3.scale=function(vec,val,dest){if(!dest||vec===dest){vec[0]*=val;vec[1]*=val;vec[2]*=val;return vec}dest[0]=vec[0]*val;dest[1]=vec[1]*val;dest[2]=vec[2]*val;return dest};vec3.normalize=function(vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],len=Math.sqrt(x*x+y*y+z*z);if(!len){dest[0]=0;dest[1]=0;dest[2]=0;return dest}else if(len===1){dest[0]=x;dest[1]=y;dest[2]=z;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;return dest};vec3.cross=function(vec,vec2,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],x2=vec2[0],y2=vec2[1],z2=vec2[2];dest[0]=y*z2-z*y2;dest[1]=z*x2-x*z2;dest[2]=x*y2-y*x2;return dest};vec3.length=function(vec){var x=vec[0],y=vec[1],z=vec[2];return Math.sqrt(x*x+y*y+z*z)};vec3.dot=function(vec,vec2){return vec[0]*vec2[0]+vec[1]*vec2[1]+vec[2]*vec2[2]};vec3.direction=function(vec,vec2,dest){if(!dest){dest=vec}var x=vec[0]-vec2[0],y=vec[1]-vec2[1],z=vec[2]-vec2[2],len=Math.sqrt(x*x+y*y+z*z);if(!len){dest[0]=0;dest[1]=0;dest[2]=0;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;return dest};vec3.lerp=function(vec,vec2,lerp,dest){if(!dest){dest=vec}dest[0]=vec[0]+lerp*(vec2[0]-vec[0]);dest[1]=vec[1]+lerp*(vec2[1]-vec[1]);dest[2]=vec[2]+lerp*(vec2[2]-vec[2]);return dest};vec3.dist=function(vec,vec2){var x=vec2[0]-vec[0],y=vec2[1]-vec[1],z=vec2[2]-vec[2];return Math.sqrt(x*x+y*y+z*z)};vec3.unproject=function(vec,view,proj,viewport,dest){if(!dest){dest=vec}var m=mat4.create();var v=new MatrixArray(4);v[0]=(vec[0]-viewport[0])*2/viewport[2]-1;v[1]=(vec[1]-viewport[1])*2/viewport[3]-1;v[2]=2*vec[2]-1;v[3]=1;mat4.multiply(proj,view,m);if(!mat4.inverse(m)){return null}mat4.multiplyVec4(m,v);if(v[3]===0){return null}dest[0]=v[0]/v[3];dest[1]=v[1]/v[3];dest[2]=v[2]/v[3];return dest};vec3.str=function(vec){return"["+vec[0]+", "+vec[1]+", "+vec[2]+"]"};mat3.create=function(mat){var dest=new MatrixArray(9);if(mat){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8]}return dest};mat3.set=function(mat,dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];return dest};mat3.identity=function(dest){if(!dest){dest=mat3.create()}dest[0]=1;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=1;dest[5]=0;dest[6]=0;dest[7]=0;dest[8]=1;return dest};mat3.transpose=function(mat,dest){if(!dest||mat===dest){var a01=mat[1],a02=mat[2],a12=mat[5];mat[1]=mat[3];mat[2]=mat[6];mat[3]=a01;mat[5]=mat[7];mat[6]=a02;mat[7]=a12;return mat}dest[0]=mat[0];dest[1]=mat[3];dest[2]=mat[6];dest[3]=mat[1];dest[4]=mat[4];dest[5]=mat[7];dest[6]=mat[2];dest[7]=mat[5];dest[8]=mat[8];return dest};mat3.toMat4=function(mat,dest){if(!dest){dest=mat4.create()}dest[15]=1;dest[14]=0;dest[13]=0;dest[12]=0;dest[11]=0;dest[10]=mat[8];dest[9]=mat[7];dest[8]=mat[6];dest[7]=0;dest[6]=mat[5];dest[5]=mat[4];dest[4]=mat[3];dest[3]=0;dest[2]=mat[2];dest[1]=mat[1];dest[0]=mat[0];return dest};mat3.str=function(mat){return"["+mat[0]+", "+mat[1]+", "+mat[2]+", "+mat[3]+", "+mat[4]+", "+mat[5]+", "+mat[6]+", "+mat[7]+", "+mat[8]+"]"};mat4.create=function(mat){var dest=new MatrixArray(16);if(mat){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}return dest};mat4.set=function(mat,dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15];return dest};mat4.identity=function(dest){if(!dest){dest=mat4.create()}dest[0]=1;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=1;dest[6]=0;dest[7]=0;dest[8]=0;dest[9]=0;dest[10]=1;dest[11]=0;dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};mat4.transpose=function(mat,dest){if(!dest||mat===dest){var a01=mat[1],a02=mat[2],a03=mat[3],a12=mat[6],a13=mat[7],a23=mat[11];mat[1]=mat[4];mat[2]=mat[8];mat[3]=mat[12];mat[4]=a01;mat[6]=mat[9];mat[7]=mat[13];mat[8]=a02;mat[9]=a12;mat[11]=mat[14];mat[12]=a03;mat[13]=a13;mat[14]=a23;return mat}dest[0]=mat[0];dest[1]=mat[4];dest[2]=mat[8];dest[3]=mat[12];dest[4]=mat[1];dest[5]=mat[5];dest[6]=mat[9];dest[7]=mat[13];dest[8]=mat[2];dest[9]=mat[6];dest[10]=mat[10];dest[11]=mat[14];dest[12]=mat[3];dest[13]=mat[7];dest[14]=mat[11];dest[15]=mat[15];return dest};mat4.determinant=function(mat){var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15];return a30*a21*a12*a03-a20*a31*a12*a03-a30*a11*a22*a03+a10*a31*a22*a03+a20*a11*a32*a03-a10*a21*a32*a03-a30*a21*a02*a13+a20*a31*a02*a13+a30*a01*a22*a13-a00*a31*a22*a13-a20*a01*a32*a13+a00*a21*a32*a13+a30*a11*a02*a23-a10*a31*a02*a23-a30*a01*a12*a23+a00*a31*a12*a23+a10*a01*a32*a23-a00*a11*a32*a23-a20*a11*a02*a33+a10*a21*a02*a33+a20*a01*a12*a33-a00*a21*a12*a33-a10*a01*a22*a33+a00*a11*a22*a33};mat4.inverse=function(mat,dest){if(!dest){dest=mat}var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,d=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06,invDet;if(!d){return null}invDet=1/d;dest[0]=(a11*b11-a12*b10+a13*b09)*invDet;dest[1]=(-a01*b11+a02*b10-a03*b09)*invDet;dest[2]=(a31*b05-a32*b04+a33*b03)*invDet;dest[3]=(-a21*b05+a22*b04-a23*b03)*invDet;dest[4]=(-a10*b11+a12*b08-a13*b07)*invDet;dest[5]=(a00*b11-a02*b08+a03*b07)*invDet;dest[6]=(-a30*b05+a32*b02-a33*b01)*invDet;dest[7]=(a20*b05-a22*b02+a23*b01)*invDet;dest[8]=(a10*b10-a11*b08+a13*b06)*invDet;dest[9]=(-a00*b10+a01*b08-a03*b06)*invDet;dest[10]=(a30*b04-a31*b02+a33*b00)*invDet;dest[11]=(-a20*b04+a21*b02-a23*b00)*invDet;dest[12]=(-a10*b09+a11*b07-a12*b06)*invDet;dest[13]=(a00*b09-a01*b07+a02*b06)*invDet;dest[14]=(-a30*b03+a31*b01-a32*b00)*invDet;dest[15]=(a20*b03-a21*b01+a22*b00)*invDet;return dest};mat4.toRotationMat=function(mat,dest){if(!dest){dest=mat4.create()}dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};mat4.toMat3=function(mat,dest){if(!dest){dest=mat3.create()}dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[4];dest[4]=mat[5];dest[5]=mat[6];dest[6]=mat[8];dest[7]=mat[9];dest[8]=mat[10];return dest};mat4.toInverseMat3=function(mat,dest){var a00=mat[0],a01=mat[1],a02=mat[2],a10=mat[4],a11=mat[5],a12=mat[6],a20=mat[8],a21=mat[9],a22=mat[10],b01=a22*a11-a12*a21,b11=-a22*a10+a12*a20,b21=a21*a10-a11*a20,d=a00*b01+a01*b11+a02*b21,id;if(!d){return null}id=1/d;if(!dest){dest=mat3.create()}dest[0]=b01*id;dest[1]=(-a22*a01+a02*a21)*id;dest[2]=(a12*a01-a02*a11)*id;dest[3]=b11*id;dest[4]=(a22*a00-a02*a20)*id;dest[5]=(-a12*a00+a02*a10)*id;dest[6]=b21*id;dest[7]=(-a21*a00+a01*a20)*id;dest[8]=(a11*a00-a01*a10)*id;return dest};mat4.multiply=function(mat,mat2,dest){if(!dest){dest=mat}var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15],b00=mat2[0],b01=mat2[1],b02=mat2[2],b03=mat2[3],b10=mat2[4],b11=mat2[5],b12=mat2[6],b13=mat2[7],b20=mat2[8],b21=mat2[9],b22=mat2[10],b23=mat2[11],b30=mat2[12],b31=mat2[13],b32=mat2[14],b33=mat2[15];dest[0]=b00*a00+b01*a10+b02*a20+b03*a30;dest[1]=b00*a01+b01*a11+b02*a21+b03*a31;dest[2]=b00*a02+b01*a12+b02*a22+b03*a32;dest[3]=b00*a03+b01*a13+b02*a23+b03*a33;dest[4]=b10*a00+b11*a10+b12*a20+b13*a30;dest[5]=b10*a01+b11*a11+b12*a21+b13*a31;dest[6]=b10*a02+b11*a12+b12*a22+b13*a32;dest[7]=b10*a03+b11*a13+b12*a23+b13*a33;dest[8]=b20*a00+b21*a10+b22*a20+b23*a30;dest[9]=b20*a01+b21*a11+b22*a21+b23*a31;dest[10]=b20*a02+b21*a12+b22*a22+b23*a32;dest[11]=b20*a03+b21*a13+b22*a23+b23*a33;dest[12]=b30*a00+b31*a10+b32*a20+b33*a30;dest[13]=b30*a01+b31*a11+b32*a21+b33*a31;dest[14]=b30*a02+b31*a12+b32*a22+b33*a32;dest[15]=b30*a03+b31*a13+b32*a23+b33*a33;return dest};mat4.multiplyVec3=function(mat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2];dest[0]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12];dest[1]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13];dest[2]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14];return dest};mat4.multiplyVec4=function(mat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],w=vec[3];dest[0]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12]*w;dest[1]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13]*w;dest[2]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14]*w;dest[3]=mat[3]*x+mat[7]*y+mat[11]*z+mat[15]*w;return dest};mat4.translate=function(mat,vec,dest){var x=vec[0],y=vec[1],z=vec[2],a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23;if(!dest||mat===dest){mat[12]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12];mat[13]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13];mat[14]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14];mat[15]=mat[3]*x+mat[7]*y+mat[11]*z+mat[15];return mat}a00=mat[0];a01=mat[1];a02=mat[2];a03=mat[3];a10=mat[4];a11=mat[5];a12=mat[6];a13=mat[7];a20=mat[8];a21=mat[9];a22=mat[10];a23=mat[11];dest[0]=a00;dest[1]=a01;dest[2]=a02;dest[3]=a03;dest[4]=a10;dest[5]=a11;dest[6]=a12;dest[7]=a13;dest[8]=a20;dest[9]=a21;dest[10]=a22;dest[11]=a23;dest[12]=a00*x+a10*y+a20*z+mat[12];dest[13]=a01*x+a11*y+a21*z+mat[13];dest[14]=a02*x+a12*y+a22*z+mat[14];dest[15]=a03*x+a13*y+a23*z+mat[15];return dest};mat4.scale=function(mat,vec,dest){var x=vec[0],y=vec[1],z=vec[2];if(!dest||mat===dest){mat[0]*=x;mat[1]*=x;mat[2]*=x;mat[3]*=x;mat[4]*=y;mat[5]*=y;mat[6]*=y;mat[7]*=y;mat[8]*=z;mat[9]*=z;mat[10]*=z;mat[11]*=z;return mat}dest[0]=mat[0]*x;dest[1]=mat[1]*x;dest[2]=mat[2]*x;dest[3]=mat[3]*x;dest[4]=mat[4]*y;dest[5]=mat[5]*y;dest[6]=mat[6]*y;dest[7]=mat[7]*y;dest[8]=mat[8]*z;dest[9]=mat[9]*z;dest[10]=mat[10]*z;dest[11]=mat[11]*z;dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15];return dest};mat4.rotate=function(mat,angle,axis,dest){var x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z),s,c,t,a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,b00,b01,b02,b10,b11,b12,b20,b21,b22;if(!len){return null}if(len!==1){len=1/len;x*=len;y*=len;z*=len}s=Math.sin(angle);c=Math.cos(angle);t=1-c;a00=mat[0];a01=mat[1];a02=mat[2];a03=mat[3];a10=mat[4];a11=mat[5];a12=mat[6];a13=mat[7];a20=mat[8];a21=mat[9];a22=mat[10];a23=mat[11];b00=x*x*t+c;b01=y*x*t+z*s;b02=z*x*t-y*s;b10=x*y*t-z*s;b11=y*y*t+c;b12=z*y*t+x*s;b20=x*z*t+y*s;b21=y*z*t-x*s;b22=z*z*t+c;if(!dest){dest=mat}else if(mat!==dest){dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*b00+a10*b01+a20*b02;dest[1]=a01*b00+a11*b01+a21*b02;dest[2]=a02*b00+a12*b01+a22*b02;dest[3]=a03*b00+a13*b01+a23*b02;dest[4]=a00*b10+a10*b11+a20*b12;dest[5]=a01*b10+a11*b11+a21*b12;dest[6]=a02*b10+a12*b11+a22*b12;dest[7]=a03*b10+a13*b11+a23*b12;dest[8]=a00*b20+a10*b21+a20*b22;dest[9]=a01*b20+a11*b21+a21*b22;dest[10]=a02*b20+a12*b21+a22*b22;dest[11]=a03*b20+a13*b21+a23*b22;return dest};mat4.rotateX=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11];if(!dest){dest=mat}else if(mat!==dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[4]=a10*c+a20*s;dest[5]=a11*c+a21*s;dest[6]=a12*c+a22*s;dest[7]=a13*c+a23*s;dest[8]=a10*-s+a20*c;dest[9]=a11*-s+a21*c;dest[10]=a12*-s+a22*c;dest[11]=a13*-s+a23*c;return dest};mat4.rotateY=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11];if(!dest){dest=mat}else if(mat!==dest){dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*c+a20*-s;dest[1]=a01*c+a21*-s;dest[2]=a02*c+a22*-s;dest[3]=a03*c+a23*-s;dest[8]=a00*s+a20*c;dest[9]=a01*s+a21*c;dest[10]=a02*s+a22*c;dest[11]=a03*s+a23*c;return dest};mat4.rotateZ=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7];if(!dest){dest=mat}else if(mat!==dest){dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*c+a10*s;dest[1]=a01*c+a11*s;dest[2]=a02*c+a12*s;dest[3]=a03*c+a13*s;dest[4]=a00*-s+a10*c;dest[5]=a01*-s+a11*c;dest[6]=a02*-s+a12*c;dest[7]=a03*-s+a13*c;return dest};mat4.frustum=function(left,right,bottom,top,near,far,dest){if(!dest){dest=mat4.create()}var rl=right-left,tb=top-bottom,fn=far-near;dest[0]=near*2/rl;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=near*2/tb;dest[6]=0;dest[7]=0;dest[8]=(right+left)/rl;dest[9]=(top+bottom)/tb;dest[10]=-(far+near)/fn;dest[11]=-1;dest[12]=0;dest[13]=0;dest[14]=-(far*near*2)/fn;dest[15]=0;return dest};mat4.perspective=function(fovy,aspect,near,far,dest){var top=near*Math.tan(fovy*Math.PI/360),right=top*aspect;return mat4.frustum(-right,right,-top,top,near,far,dest)};mat4.ortho=function(left,right,bottom,top,near,far,dest){if(!dest){dest=mat4.create()}var rl=right-left,tb=top-bottom,fn=far-near;dest[0]=2/rl;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=2/tb;dest[6]=0;dest[7]=0;dest[8]=0;dest[9]=0;dest[10]=-2/fn;dest[11]=0;dest[12]=-(left+right)/rl;dest[13]=-(top+bottom)/tb;dest[14]=-(far+near)/fn;dest[15]=1;return dest};mat4.lookAt=function(eye,center,up,dest){if(!dest){dest=mat4.create()}var x0,x1,x2,y0,y1,y2,z0,z1,z2,len,eyex=eye[0],eyey=eye[1],eyez=eye[2],upx=up[0],upy=up[1],upz=up[2],centerx=center[0],centery=center[1],centerz=center[2];if(eyex===centerx&&eyey===centery&&eyez===centerz){return mat4.identity(dest)}z0=eyex-centerx;z1=eyey-centery;z2=eyez-centerz;len=1/Math.sqrt(z0*z0+z1*z1+z2*z2);z0*=len;z1*=len;z2*=len;x0=upy*z2-upz*z1;x1=upz*z0-upx*z2;x2=upx*z1-upy*z0;len=Math.sqrt(x0*x0+x1*x1+x2*x2);if(!len){x0=0;x1=0;x2=0}else{len=1/len;x0*=len;x1*=len;x2*=len}y0=z1*x2-z2*x1;y1=z2*x0-z0*x2;y2=z0*x1-z1*x0;len=Math.sqrt(y0*y0+y1*y1+y2*y2);if(!len){y0=0;y1=0;y2=0}else{len=1/len;y0*=len;y1*=len;y2*=len}dest[0]=x0;dest[1]=y0;dest[2]=z0;dest[3]=0;dest[4]=x1;dest[5]=y1;dest[6]=z1;dest[7]=0;dest[8]=x2;dest[9]=y2;dest[10]=z2;dest[11]=0;dest[12]=-(x0*eyex+x1*eyey+x2*eyez);dest[13]=-(y0*eyex+y1*eyey+y2*eyez);dest[14]=-(z0*eyex+z1*eyey+z2*eyez);dest[15]=1;return dest};mat4.fromRotationTranslation=function(quat,vec,dest){if(!dest){dest=mat4.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=0;dest[4]=xy-wz;dest[5]=1-(xx+zz);dest[6]=yz+wx;dest[7]=0;dest[8]=xz+wy;dest[9]=yz-wx;dest[10]=1-(xx+yy);dest[11]=0;dest[12]=vec[0];dest[13]=vec[1];dest[14]=vec[2];dest[15]=1;return dest};mat4.str=function(mat){return"["+mat[0]+", "+mat[1]+", "+mat[2]+", "+mat[3]+", "+mat[4]+", "+mat[5]+", "+mat[6]+", "+mat[7]+", "+mat[8]+", "+mat[9]+", "+mat[10]+", "+mat[11]+", "+mat[12]+", "+mat[13]+", "+mat[14]+", "+mat[15]+"]"};quat4.create=function(quat){var dest=new MatrixArray(4);if(quat){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3]}return dest};quat4.set=function(quat,dest){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3];return dest};quat4.calculateW=function(quat,dest){var x=quat[0],y=quat[1],z=quat[2];if(!dest||quat===dest){quat[3]=-Math.sqrt(Math.abs(1-x*x-y*y-z*z));return quat}dest[0]=x;dest[1]=y;dest[2]=z;dest[3]=-Math.sqrt(Math.abs(1-x*x-y*y-z*z));return dest};quat4.dot=function(quat,quat2){return quat[0]*quat2[0]+quat[1]*quat2[1]+quat[2]*quat2[2]+quat[3]*quat2[3]};quat4.inverse=function(quat,dest){var q0=quat[0],q1=quat[1],q2=quat[2],q3=quat[3],dot=q0*q0+q1*q1+q2*q2+q3*q3,invDot=dot?1/dot:0;if(!dest||quat===dest){quat[0]*=-invDot;quat[1]*=-invDot;quat[2]*=-invDot;quat[3]*=invDot;return quat}dest[0]=-quat[0]*invDot;dest[1]=-quat[1]*invDot;dest[2]=-quat[2]*invDot;dest[3]=quat[3]*invDot;return dest};quat4.conjugate=function(quat,dest){if(!dest||quat===dest){quat[0]*=-1;quat[1]*=-1;quat[2]*=-1;return quat}dest[0]=-quat[0];dest[1]=-quat[1];dest[2]=-quat[2];dest[3]=quat[3];return dest};quat4.length=function(quat){var x=quat[0],y=quat[1],z=quat[2],w=quat[3];return Math.sqrt(x*x+y*y+z*z+w*w)};quat4.normalize=function(quat,dest){if(!dest){dest=quat}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],len=Math.sqrt(x*x+y*y+z*z+w*w);if(len===0){dest[0]=0;dest[1]=0;dest[2]=0;dest[3]=0;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;dest[3]=w*len;return dest};quat4.add=function(quat,quat2,dest){if(!dest||quat===dest){quat[0]+=quat2[0];quat[1]+=quat2[1];quat[2]+=quat2[2];quat[3]+=quat2[3];return quat}dest[0]=quat[0]+quat2[0];dest[1]=quat[1]+quat2[1];dest[2]=quat[2]+quat2[2];dest[3]=quat[3]+quat2[3];return dest};quat4.multiply=function(quat,quat2,dest){if(!dest){dest=quat}var qax=quat[0],qay=quat[1],qaz=quat[2],qaw=quat[3],qbx=quat2[0],qby=quat2[1],qbz=quat2[2],qbw=quat2[3];dest[0]=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;dest[1]=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;dest[2]=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;dest[3]=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;return dest};quat4.multiplyVec3=function(quat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],qx=quat[0],qy=quat[1],qz=quat[2],qw=quat[3],ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;dest[0]=ix*qw+iw*-qx+iy*-qz-iz*-qy;dest[1]=iy*qw+iw*-qy+iz*-qx-ix*-qz;dest[2]=iz*qw+iw*-qz+ix*-qy-iy*-qx;return dest};quat4.scale=function(quat,val,dest){if(!dest||quat===dest){quat[0]*=val;quat[1]*=val;quat[2]*=val;quat[3]*=val;return quat}dest[0]=quat[0]*val;dest[1]=quat[1]*val;dest[2]=quat[2]*val;dest[3]=quat[3]*val;return dest};quat4.toMat3=function(quat,dest){if(!dest){dest=mat3.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=xy-wz;dest[4]=1-(xx+zz);dest[5]=yz+wx;dest[6]=xz+wy;dest[7]=yz-wx;dest[8]=1-(xx+yy);return dest};quat4.toMat4=function(quat,dest){if(!dest){dest=mat4.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=0;dest[4]=xy-wz;dest[5]=1-(xx+zz);dest[6]=yz+wx;dest[7]=0;dest[8]=xz+wy;dest[9]=yz-wx;dest[10]=1-(xx+yy);dest[11]=0;dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};quat4.slerp=function(quat,quat2,slerp,dest){if(!dest){dest=quat}var cosHalfTheta=quat[0]*quat2[0]+quat[1]*quat2[1]+quat[2]*quat2[2]+quat[3]*quat2[3],halfTheta,sinHalfTheta,ratioA,ratioB;if(Math.abs(cosHalfTheta)>=1){if(dest!==quat){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3]}return dest}halfTheta=Math.acos(cosHalfTheta);sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){dest[0]=quat[0]*.5+quat2[0]*.5;dest[1]=quat[1]*.5+quat2[1]*.5;dest[2]=quat[2]*.5+quat2[2]*.5;dest[3]=quat[3]*.5+quat2[3]*.5;return dest}ratioA=Math.sin((1-slerp)*halfTheta)/sinHalfTheta;ratioB=Math.sin(slerp*halfTheta)/sinHalfTheta;dest[0]=quat[0]*ratioA+quat2[0]*ratioB;dest[1]=quat[1]*ratioA+quat2[1]*ratioB;dest[2]=quat[2]*ratioA+quat2[2]*ratioB;dest[3]=quat[3]*ratioA+quat2[3]*ratioB;return dest};quat4.str=function(quat){return"["+quat[0]+", "+quat[1]+", "+quat[2]+", "+quat[3]+"]"};return{vec3,mat3,mat4,quat4}})();var _emscripten_glBegin=mode=>{GLImmediate.enabledClientAttributes_preBegin=GLImmediate.enabledClientAttributes;GLImmediate.enabledClientAttributes=[];GLImmediate.clientAttributes_preBegin=GLImmediate.clientAttributes;GLImmediate.clientAttributes=[];for(var i=0;i{GLctx.beginQuery(target,GL.queries[id])};var _emscripten_glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBeginTransformFeedback=x0=>GLctx.beginTransformFeedback(x0);var _emscripten_glBindBufferBase=(target,index,buffer)=>{GLctx.bindBufferBase(target,index,GL.buffers[buffer])};var _emscripten_glBindBufferRange=(target,index,buffer,offset,ptrsize)=>{GLctx.bindBufferRange(target,index,GL.buffers[buffer],offset,ptrsize)};var _emscripten_glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindProgram=(type,id)=>{assert(id==0)};var _emscripten_glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindSampler=(unit,sampler)=>{GLctx.bindSampler(unit,GL.samplers[sampler])};var _emscripten_glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTransformFeedback=(target,id)=>{GLctx.bindTransformFeedback(target,GL.transformFeedbacks[id])};var _emscripten_glEnableClientState=cap=>{var attrib=GLEmulation.getAttributeFromCapability(cap);if(attrib===null){err(`WARNING: unhandled clientstate: ${cap}`);return}if(!GLImmediate.enabledClientAttributes[attrib]){GLImmediate.enabledClientAttributes[attrib]=true;GLImmediate.totalEnabledClientAttributes++;GLImmediate.currentRenderer=null;if(GLEmulation.currentVao)GLEmulation.currentVao.enabledClientStates[cap]=1;GLImmediate.modifiedClientAttributes=true}};var _glEnableClientState=_emscripten_glEnableClientState;var emulGlBindVertexArray=vao=>{GLEmulation.currentVao=null;GLImmediate.lastRenderer?.cleanup();_glBindBuffer(GLctx.ARRAY_BUFFER,0);_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,0);for(var vaa in GLEmulation.enabledVertexAttribArrays){GLctx.disableVertexAttribArray(vaa)}GLEmulation.enabledVertexAttribArrays={};GLImmediate.enabledClientAttributes=[0,0];GLImmediate.totalEnabledClientAttributes=0;GLImmediate.modifiedClientAttributes=true;if(vao){var info=GLEmulation.vaos[vao];_glBindBuffer(GLctx.ARRAY_BUFFER,info.arrayBuffer);_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,info.elementArrayBuffer);for(var vaa in info.enabledVertexAttribArrays){_glEnableVertexAttribArray(vaa)}for(var vaa in info.vertexAttribPointers){_glVertexAttribPointer(...info.vertexAttribPointers[vaa])}for(var attrib in info.enabledClientStates){_glEnableClientState(attrib|0)}GLEmulation.currentVao=info}};var _emscripten_glBindVertexArray=vao=>{emulGlBindVertexArray(vao);var ibo=GLctx.getParameter(34965);GLctx.currentElementArrayBufferBinding=ibo?ibo.name|0:0};var _glBindVertexArray=_emscripten_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);var _emscripten_glBlendEquation=x0=>GLctx.blendEquation(x0);var _emscripten_glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);var _emscripten_glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);var _emscripten_glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);var _emscripten_glBlitFramebuffer=(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)=>GLctx.blitFramebuffer(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);var _emscripten_glBufferData=(target,size,data,usage)=>{switch(usage){case 35041:case 35042:usage=35040;break;case 35045:case 35046:usage=35044;break;case 35049:case 35050:usage=35048;break}if(GL.currentContext.version>=2){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}return}GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferSubData=(target,offset,size,data)=>{if(GL.currentContext.version>=2){size&&GLctx.bufferSubData(target,offset,HEAPU8,data,size);return}GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);var _emscripten_glClear=x0=>GLctx.clear(x0);var _emscripten_glClearBufferfi=(x0,x1,x2,x3)=>GLctx.clearBufferfi(x0,x1,x2,x3);var _emscripten_glClearBufferfv=(buffer,drawbuffer,value)=>{GLctx.clearBufferfv(buffer,drawbuffer,HEAPF32,value>>2)};var _emscripten_glClearBufferiv=(buffer,drawbuffer,value)=>{GLctx.clearBufferiv(buffer,drawbuffer,HEAP32,value>>2)};var _emscripten_glClearBufferuiv=(buffer,drawbuffer,value)=>{GLctx.clearBufferuiv(buffer,drawbuffer,HEAPU32,value>>2)};var _emscripten_glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);var _emscripten_glClearDepthf=x0=>GLctx.clearDepth(x0);var _emscripten_glClearStencil=x0=>GLctx.clearStencil(x0);var _emscripten_glClientActiveTexture=texture=>{GLImmediate.clientActiveTexture=texture-33984};var _emscripten_glClientWaitSync=(sync,flags,timeout)=>{timeout=Number(timeout);return GLctx.clientWaitSync(GL.syncs[sync],flags,timeout)};var _emscripten_glClipControlEXT=(origin,depth)=>{GLctx.extClipControl["clipControlEXT"](origin,depth)};var _emscripten_glClipPlane=(pname,param)=>{if(pname>=12288&&pname<12294){var clipPlaneId=pname-12288;GLEmulation.clipPlaneEquation[clipPlaneId][0]=HEAPF64[param>>3];GLEmulation.clipPlaneEquation[clipPlaneId][1]=HEAPF64[param+8>>3];GLEmulation.clipPlaneEquation[clipPlaneId][2]=HEAPF64[param+16>>3];GLEmulation.clipPlaneEquation[clipPlaneId][3]=HEAPF64[param+24>>3];var tmpMV=GLImmediate.matrixLib.mat4.create(GLImmediate.matrix[0]);GLImmediate.matrixLib.mat4.inverse(tmpMV);GLImmediate.matrixLib.mat4.transpose(tmpMV);GLImmediate.matrixLib.mat4.multiplyVec4(tmpMV,GLEmulation.clipPlaneEquation[clipPlaneId])}};var _emscripten_glColor4f=(r,g,b,a)=>{r=Math.max(Math.min(r,1),0);g=Math.max(Math.min(g,1),0);b=Math.max(Math.min(b,1),0);a=Math.max(Math.min(a,1),0);if(GLImmediate.mode>=0){var start=GLImmediate.vertexCounter<<2;GLImmediate.vertexDataU8[start+0]=r*255;GLImmediate.vertexDataU8[start+1]=g*255;GLImmediate.vertexDataU8[start+2]=b*255;GLImmediate.vertexDataU8[start+3]=a*255;GLImmediate.vertexCounter++;GLImmediate.addRendererComponent(GLImmediate.COLOR,4,GLctx.UNSIGNED_BYTE)}else{GLImmediate.clientColor[0]=r;GLImmediate.clientColor[1]=g;GLImmediate.clientColor[2]=b;GLImmediate.clientColor[3]=a}};var _glColor4f=_emscripten_glColor4f;var _emscripten_glColor3f=(r,g,b)=>_glColor4f(r,g,b,1);var _glColor3f=_emscripten_glColor3f;var _emscripten_glColor3d=_glColor3f;var _emscripten_glColor3fv=p=>_glColor3f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2]);var _emscripten_glColor4ub=(r,g,b,a)=>_glColor4f((r&255)/255,(g&255)/255,(b&255)/255,(a&255)/255);var _glColor4ub=_emscripten_glColor4ub;var _emscripten_glColor3ub=(r,g,b)=>_glColor4ub(r,g,b,255);var _glColor3ub=_emscripten_glColor3ub;var _emscripten_glColor3ubv=p=>_glColor3ub(HEAP8[p],HEAP8[p+1],HEAP8[p+2]);var _emscripten_glColor4ui=(r,g,b,a)=>_glColor4f((r>>>0)/4294967295,(g>>>0)/4294967295,(b>>>0)/4294967295,(a>>>0)/4294967295);var _glColor4ui=_emscripten_glColor4ui;var _emscripten_glColor3ui=(r,g,b)=>_glColor4ui(r,g,b,4294967295);var _glColor3ui=_emscripten_glColor3ui;var _emscripten_glColor3uiv=p=>_glColor3ui(HEAP32[p>>2],HEAP32[p+4>>2],HEAP32[p+8>>2]);var _emscripten_glColor4us=(r,g,b,a)=>_glColor4f((r&65535)/65535,(g&65535)/65535,(b&65535)/65535,(a&65535)/65535);var _glColor4us=_emscripten_glColor4us;var _emscripten_glColor3us=(r,g,b)=>_glColor4us(r,g,b,65535);var _glColor3us=_emscripten_glColor3us;var _emscripten_glColor3usv=p=>_glColor3us(HEAP16[p>>1],HEAP16[p+2>>1],HEAP16[p+4>>1]);var _emscripten_glColor4d=_glColor4f;var _emscripten_glColor4fv=p=>_glColor4f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2],HEAPF32[p+12>>2]);var _emscripten_glColor4ubv=p=>_glColor4ub(HEAP8[p],HEAP8[p+1],HEAP8[p+2],HEAP8[p+3]);var _emscripten_glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.COLOR,size,type,stride,pointer)};var _emscripten_glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data);return}GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8,data,imageSize);return}GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexImage3D=(target,level,internalFormat,width,height,depth,border,imageSize,data)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.compressedTexImage3D(target,level,internalFormat,width,height,depth,border,imageSize,data)}else{GLctx.compressedTexImage3D(target,level,internalFormat,width,height,depth,border,HEAPU8,data,imageSize)}};var _emscripten_glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data);return}GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8,data,imageSize);return}GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexSubImage3D=(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.compressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)}else{GLctx.compressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,HEAPU8,data,imageSize)}};var _emscripten_glCopyBufferSubData=(x0,x1,x2,x3,x4)=>GLctx.copyBufferSubData(x0,x1,x2,x3,x4);var _emscripten_glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage3D=(x0,x1,x2,x3,x4,x5,x6,x7,x8)=>GLctx.copyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8);var _emscripten_glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCullFace=x0=>GLctx.cullFace(x0);var _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==GLctx.currentArrayBufferBinding)GLctx.currentArrayBufferBinding=0;if(id==GLctx.currentElementArrayBufferBinding)GLctx.currentElementArrayBufferBinding=0;if(id==GLctx.currentPixelPackBufferBinding)GLctx.currentPixelPackBufferBinding=0;if(id==GLctx.currentPixelUnpackBufferBinding)GLctx.currentPixelUnpackBufferBinding=0}};var _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}};var _emscripten_glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _glDeleteShader=_emscripten_glDeleteShader;var _emscripten_glDeleteObject=id=>{if(GL.programs[id]){_glDeleteProgram(id)}else if(GL.shaders[id]){_glDeleteShader(id)}else{err(`WARNING: deleteObject received invalid id: ${id}`)}};var _emscripten_glDeleteQueries=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.deleteQuery(query);GL.queries[id]=null}};var _emscripten_glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _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}};var _emscripten_glDeleteSamplers=(n,samplers)=>{for(var i=0;i>2];var sampler=GL.samplers[id];if(!sampler)continue;GLctx.deleteSampler(sampler);sampler.name=0;GL.samplers[id]=null}};var _emscripten_glDeleteSync=id=>{if(!id)return;var sync=GL.syncs[id];if(!sync){GL.recordError(1281);return}GLctx.deleteSync(sync);sync.name=0;GL.syncs[id]=null};var _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}};var _emscripten_glDeleteTransformFeedbacks=(n,ids)=>{for(var i=0;i>2];var transformFeedback=GL.transformFeedbacks[id];if(!transformFeedback)continue;GLctx.deleteTransformFeedback(transformFeedback);transformFeedback.name=0;GL.transformFeedbacks[id]=null}};var emulGlDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLEmulation.vaos[id]=null;if(GLEmulation.currentVao?.id==id)GLEmulation.currentVao=null}};var _emscripten_glDeleteVertexArrays=(n,vaos)=>{emulGlDeleteVertexArrays(n,vaos)};var _glDeleteVertexArrays=_emscripten_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDepthFunc=x0=>GLctx.depthFunc(x0);var _emscripten_glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);var _emscripten_glDisableClientState=cap=>{var attrib=GLEmulation.getAttributeFromCapability(cap);if(attrib===null){err(`WARNING: unhandled clientstate: ${cap}`);return}if(GLImmediate.enabledClientAttributes[attrib]){GLImmediate.enabledClientAttributes[attrib]=false;GLImmediate.totalEnabledClientAttributes--;GLImmediate.currentRenderer=null;if(GLEmulation.currentVao)delete GLEmulation.currentVao.enabledClientStates[cap];GLImmediate.modifiedClientAttributes=true}};var _emscripten_glDrawArrays=(mode,first,count)=>{if(GLImmediate.totalEnabledClientAttributes==0&&mode<=6){GLctx.drawArrays(mode,first,count);return}GLImmediate.prepareClientAttributes(count,false);GLImmediate.mode=mode;if(!GLctx.currentArrayBufferBinding){GLImmediate.vertexData=HEAPF32.subarray(GLImmediate.vertexPointer>>2,GLImmediate.vertexPointer+(first+count)*GLImmediate.stride>>2);GLImmediate.firstVertex=first;GLImmediate.lastVertex=first+count}GLImmediate.flush(null,first);GLImmediate.mode=-1};var _emscripten_glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstanced=_emscripten_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedARB=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedEXT=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedNV=_glDrawArraysInstanced;var _emscripten_glDrawBuffer=()=>{abort("glDrawBuffer: TODO")};var tempFixedLengthArray=[];var _emscripten_glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffers=_emscripten_glDrawBuffers;var _emscripten_glDrawBuffersEXT=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawElements=(mode,count,type,indices,start,end)=>{if(GLImmediate.totalEnabledClientAttributes==0&&mode<=6&&GLctx.currentElementArrayBufferBinding){GLctx.drawElements(mode,count,type,indices);return}if(!GLctx.currentElementArrayBufferBinding){assert(type==GLctx.UNSIGNED_SHORT)}warnOnce("DrawElements doesn't actually prepareClientAttributes properly.");GLImmediate.prepareClientAttributes(count,false);GLImmediate.mode=mode;if(!GLctx.currentArrayBufferBinding){GLImmediate.firstVertex=end?start:HEAP8.length;GLImmediate.lastVertex=end?end+1:0;start=GLImmediate.vertexPointer;if(end){end=GLImmediate.vertexPointer+(end+1)*GLImmediate.stride;GLImmediate.vertexData=HEAPF32.subarray(start>>2,end>>2)}else{GLImmediate.vertexData=HEAPF32.subarray(start>>2)}}GLImmediate.flush(count,0,indices);GLImmediate.mode=-1};var _emscripten_glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstanced=_emscripten_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedARB=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedEXT=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedNV=_glDrawElementsInstanced;var _glDrawElements=_emscripten_glDrawElements;var _emscripten_glDrawRangeElements=(mode,start,end,count,type,indices)=>{_glDrawElements(mode,count,type,indices,start,end)};var _emscripten_glEnd=()=>{GLImmediate.prepareClientAttributes(GLImmediate.rendererComponents[GLImmediate.VERTEX],true);GLImmediate.firstVertex=0;GLImmediate.lastVertex=GLImmediate.vertexCounter/(GLImmediate.stride>>2);GLImmediate.flush();GLImmediate.disableBeginEndClientAttributes();GLImmediate.mode=-1;GLImmediate.enabledClientAttributes=GLImmediate.enabledClientAttributes_preBegin;GLImmediate.clientAttributes=GLImmediate.clientAttributes_preBegin;GLImmediate.currentRenderer=null;GLImmediate.modifiedClientAttributes=true};var _emscripten_glEndQuery=x0=>GLctx.endQuery(x0);var _emscripten_glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glEndTransformFeedback=()=>GLctx.endTransformFeedback();var _emscripten_glFenceSync=(condition,flags)=>{var sync=GLctx.fenceSync(condition,flags);if(sync){var id=GL.getNewId(GL.syncs);sync.name=id;GL.syncs[id]=sync;return id}return 0};var _emscripten_glFinish=()=>GLctx.finish();var _emscripten_glFlush=()=>GLctx.flush();var _emscripten_glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFramebufferTextureLayer=(target,attachment,texture,level,layer)=>{GLctx.framebufferTextureLayer(target,attachment,GL.textures[texture],level,layer)};var _emscripten_glFrontFace=x0=>GLctx.frontFace(x0);var _emscripten_glFrustum=(left,right,bottom,top_,nearVal,farVal)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],GLImmediate.matrixLib.mat4.frustum(left,right,bottom,top_,nearVal,farVal))};var _emscripten_glGenBuffers=(n,buffers)=>{GL.genObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenFramebuffers=(n,ids)=>{GL.genObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenQueries=(n,ids)=>{GL.genObject(n,ids,"createQuery",GL.queries)};var _emscripten_glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;checkInt32(0);return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id;checkInt32(id)}};var _emscripten_glGenRenderbuffers=(n,renderbuffers)=>{GL.genObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenSamplers=(n,samplers)=>{GL.genObject(n,samplers,"createSampler",GL.samplers)};var _emscripten_glGenTextures=(n,textures)=>{GL.genObject(n,textures,"createTexture",GL.textures)};var _emscripten_glGenTransformFeedbacks=(n,ids)=>{GL.genObject(n,ids,"createTransformFeedback",GL.transformFeedbacks)};var emulGlGenVertexArrays=(n,vaos)=>{for(var i=0;i>2]=id;checkInt32(id)}};var _emscripten_glGenVertexArrays=(n,arrays)=>{emulGlGenVertexArrays(n,arrays)};var _glGenVertexArrays=_emscripten_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenerateMipmap=x0=>GLctx.generateMipmap(x0);var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;checkInt32(numBytesWrittenExclNull);if(size)HEAP32[size>>2]=info.size;checkInt32(info.size);if(type)HEAP32[type>>2]=info.type;checkInt32(info.type)}};var _emscripten_glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveUniformBlockName=(program,uniformBlockIndex,bufSize,length,uniformBlockName)=>{program=GL.programs[program];var result=GLctx.getActiveUniformBlockName(program,uniformBlockIndex);if(!result)return;if(uniformBlockName&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(result,uniformBlockName,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;checkInt32(numBytesWrittenExclNull)}else{if(length)HEAP32[length>>2]=0;checkInt32(0)}};var _emscripten_glGetActiveUniformBlockiv=(program,uniformBlockIndex,pname,params)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];if(pname==35393){var name=GLctx.getActiveUniformBlockName(program,uniformBlockIndex);HEAP32[params>>2]=name.length+1;checkInt32(name.length+1);return}var result=GLctx.getActiveUniformBlockParameter(program,uniformBlockIndex,pname);if(result===null)return;if(pname==35395){for(var i=0;i>2]=result[i];checkInt32(result[i])}}else{HEAP32[params>>2]=result;checkInt32(result)}};var _emscripten_glGetActiveUniformsiv=(program,uniformCount,uniformIndices,pname,params)=>{if(!params){GL.recordError(1281);return}if(uniformCount>0&&uniformIndices==0){GL.recordError(1281);return}program=GL.programs[program];var ids=[];for(var i=0;i>2])}var result=GLctx.getActiveUniforms(program,ids,pname);if(!result)return;var len=result.length;for(var i=0;i>2]=result[i];checkInt32(result[i])}};var _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;checkInt32(len);for(var i=0;i>2]=id;checkInt32(id)}};var _emscripten_glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetBufferParameteri64v=(target,value,data)=>{if(!data){GL.recordError(1281);return}writeI53ToI64(data,GLctx.getBufferParameter(target,value))};var _emscripten_glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value);checkInt32(GLctx.getBufferParameter(target,value))};var _emscripten_glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetFragDataLocation=(program,name)=>GLctx.getFragDataLocation(GL.programs[program],UTF8ToString(name));var _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;checkInt32(result)};var _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;checkInt32(numBytesWrittenExclNull)};var _glGetProgramInfoLog=_emscripten_glGetProgramInfoLog;var _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;checkInt32(numBytesWrittenExclNull)};var _glGetShaderInfoLog=_emscripten_glGetShaderInfoLog;var _emscripten_glGetInfoLog=(id,maxLength,length,infoLog)=>{if(GL.programs[id]){_glGetProgramInfoLog(id,maxLength,length,infoLog)}else if(GL.shaders[id]){_glGetShaderInfoLog(id,maxLength,length,infoLog)}else{err(`WARNING: glGetInfoLog received invalid id: ${id}`)}};var emscriptenWebGLGetIndexed=(target,index,data,type)=>{if(!data){GL.recordError(1281);return}var result=GLctx.getIndexedParameter(target,index);var ret;switch(typeof result){case"boolean":ret=result?1:0;break;case"number":ret=result;break;case"object":if(result===null){switch(target){case 35983:case 35368:ret=0;break;default:{GL.recordError(1280);return}}}else if(result instanceof WebGLBuffer){ret=result.name|0}else{GL.recordError(1280);return}break;default:GL.recordError(1280);return}switch(type){case 1:writeI53ToI64(data,ret);break;case 0:HEAP32[data>>2]=ret;checkInt32(ret);break;case 2:HEAPF32[data>>2]=ret;break;case 4:HEAP8[data]=ret?1:0;checkInt8(ret?1:0);break;default:abort("internal emscriptenWebGLGetIndexed() error, bad type: "+type)}};var _emscripten_glGetInteger64i_v=(target,index,data)=>emscriptenWebGLGetIndexed(target,index,data,1);var _emscripten_glGetInteger64v=(name_,p)=>{emscriptenWebGLGet(name_,p,1)};var _emscripten_glGetIntegeri_v=(target,index,data)=>emscriptenWebGLGetIndexed(target,index,data,0);var _emscripten_glGetInternalformativ=(target,internalformat,pname,bufSize,params)=>{if(bufSize<0){GL.recordError(1281);return}if(!params){GL.recordError(1281);return}var ret=GLctx.getInternalformatParameter(target,internalformat,pname);if(ret===null)return;for(var i=0;i>2]=ret[i];checkInt32(ret[i])}};var _emscripten_glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1;checkInt32(log.length+1)}else if(pname==35719){if(!program.maxUniformLength){var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(var i=0;i>2]=program.maxUniformLength;checkInt32(program.maxUniformLength)}else if(pname==35722){if(!program.maxAttributeLength){var numActiveAttributes=GLctx.getProgramParameter(program,35721);for(var i=0;i>2]=program.maxAttributeLength;checkInt32(program.maxAttributeLength)}else if(pname==35381){if(!program.maxUniformBlockNameLength){var numActiveUniformBlocks=GLctx.getProgramParameter(program,35382);for(var i=0;i>2]=program.maxUniformBlockNameLength;checkInt32(program.maxUniformBlockNameLength)}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname);checkInt32(GLctx.getProgramParameter(program,pname))}};var _glGetProgramiv=_emscripten_glGetProgramiv;var _emscripten_glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength;checkInt32(logLength)}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength;checkInt32(sourceLength)}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname);checkInt32(GLctx.getShaderParameter(GL.shaders[shader],pname))}};var _glGetShaderiv=_emscripten_glGetShaderiv;var _emscripten_glGetObjectParameteriv=(id,type,result)=>{if(GL.programs[id]){if(type==35716){var log=GLctx.getProgramInfoLog(GL.programs[id]);if(log===null)log="(unknown error)";HEAP32[result>>2]=log.length;checkInt32(log.length);return}_glGetProgramiv(id,type,result)}else if(GL.shaders[id]){if(type==35716){var log=GLctx.getShaderInfoLog(GL.shaders[id]);if(log===null)log="(unknown error)";HEAP32[result>>2]=log.length;checkInt32(log.length);return}else if(type==35720){var source=GLctx.getShaderSource(GL.shaders[id]);if(source===null)return;HEAP32[result>>2]=source.length;checkInt32(source.length);return}_glGetShaderiv(id,type,result)}else{err(`WARNING: getObjectParameteriv received invalid id: ${id}`)}};var _emscripten_glGetPointerv=(name,p)=>{var attribute;switch(name){case 32910:attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];break;case 32912:attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];break;case 32914:attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];break;default:GL.recordError(1280);return}HEAP32[p>>2]=attribute?attribute.pointer:0;checkInt32(attribute?attribute.pointer:0)};var _emscripten_glGetProgramBinary=(program,bufSize,length,binaryFormat,binary)=>{GL.recordError(1282)};var _emscripten_glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;if(GL.currentContext.version<2){param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}else{param=GLctx.getQueryParameter(query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[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;checkInt32(ret)};var _glGetQueryObjecti64vEXT=_emscripten_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectuiv=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.getQueryParameter(query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret;checkInt32(ret)};var _glGetQueryObjectivEXT=_emscripten_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryiv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getQuery(target,pname);checkInt32(GLctx.getQuery(target,pname))};var _emscripten_glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname);checkInt32(GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname))};var _emscripten_glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname);checkInt32(GLctx.getRenderbufferParameter(target,pname))};var _emscripten_glGetSamplerParameterfv=(sampler,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)};var _emscripten_glGetSamplerParameteriv=(sampler,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname);checkInt32(GLctx.getSamplerParameter(GL.samplers[sampler],pname))};var _emscripten_glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;checkInt32(result.rangeMin);HEAP32[range+4>>2]=result.rangeMax;checkInt32(result.rangeMax);HEAP32[precision>>2]=result.precision;checkInt32(result.precision)};var _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;checkInt32(numBytesWrittenExclNull)};var _emscripten_glGetStringi=(name,index)=>{if(GL.currentContext.version<2){GL.recordError(1282);return 0}var stringiCache=GL.stringiCache[name];if(stringiCache){if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index]}switch(name){case 7939:var exts=webglGetExtensions().map(stringToNewUTF8);stringiCache=GL.stringiCache[name]=exts;if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index];default:GL.recordError(1280);return 0}};var _emscripten_glGetSynciv=(sync,pname,bufSize,length,values)=>{if(bufSize<0){GL.recordError(1281);return}if(!values){GL.recordError(1281);return}var ret=GLctx.getSyncParameter(GL.syncs[sync],pname);if(ret!==null){HEAP32[values>>2]=ret;checkInt32(ret);if(length)HEAP32[length>>2]=1;checkInt32(1)}};var _emscripten_glGetTexEnvfv=(target,pname,param)=>abort("GL emulation not initialized!");var _emscripten_glGetTexEnviv=(target,pname,param)=>abort("GL emulation not initialized!");var _emscripten_glGetTexLevelParameteriv=(target,level,pname,params)=>abort("glGetTexLevelParameteriv: TODO");var _emscripten_glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname);checkInt32(GLctx.getTexParameter(target,pname))};var _emscripten_glGetTransformFeedbackVarying=(program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx.getTransformFeedbackVarying(program,index);if(!info)return;if(name&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;checkInt32(numBytesWrittenExclNull)}else{if(length)HEAP32[length>>2]=0;checkInt32(0)}if(size)HEAP32[size>>2]=info.size;checkInt32(info.size);if(type)HEAP32[type>>2]=info.type;checkInt32(info.type)};var _emscripten_glGetUniformBlockIndex=(program,uniformBlockName)=>GLctx.getUniformBlockIndex(GL.programs[program],UTF8ToString(uniformBlockName));var _emscripten_glGetUniformIndices=(program,uniformCount,uniformNames,uniformIndices)=>{if(!uniformIndices){GL.recordError(1281);return}if(uniformCount>0&&(uniformNames==0||uniformIndices==0)){GL.recordError(1281);return}program=GL.programs[program];var names=[];for(var i=0;i>2]));var result=GLctx.getUniformIndices(program,names);if(!result)return;var len=result.length;for(var i=0;i>2]=result[i];checkInt32(result[i])}};var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;checkInt32(data);break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];checkInt32(data[i]);break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _emscripten_glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetUniformuiv=(program,location,params)=>emscriptenWebGLGetUniform(program,location,params,0);var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"];checkInt32(data&&data["name"])}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;checkInt32(data);break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);checkInt32(Math.fround(data));break}}else{for(var i=0;i>2]=data[i];checkInt32(data[i]);break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);checkInt32(Math.fround(data[i]));break}}}};var _emscripten_glGetVertexAttribIiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,0)};var _glGetVertexAttribIiv=_emscripten_glGetVertexAttribIiv;var _emscripten_glGetVertexAttribIuiv=_glGetVertexAttribIiv;var _emscripten_glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname);checkInt32(GLctx.getVertexAttribOffset(index,pname))};var _emscripten_glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glInvalidateFramebuffer=(target,numAttachments,attachments)=>{var list=tempFixedLengthArray[numAttachments];for(var i=0;i>2]}GLctx.invalidateFramebuffer(target,list)};var _emscripten_glInvalidateSubFramebuffer=(target,numAttachments,attachments,x,y,width,height)=>{var list=tempFixedLengthArray[numAttachments];for(var i=0;i>2]}GLctx.invalidateSubFramebuffer(target,list,x,y,width,height)};var _emscripten_glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsQuery=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.isQuery(query)};var _emscripten_glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsSampler=id=>{var sampler=GL.samplers[id];if(!sampler)return 0;return GLctx.isSampler(sampler)};var _emscripten_glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsSync=sync=>GLctx.isSync(GL.syncs[sync]);var _emscripten_glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsTransformFeedback=id=>GLctx.isTransformFeedback(GL.transformFeedbacks[id]);var emulGlIsVertexArray=array=>{var vao=GLEmulation.vaos[array];if(!vao)return 0;return 1};var _emscripten_glIsVertexArray=array=>emulGlIsVertexArray(array);var _glIsVertexArray=_emscripten_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glLightModelf=(pname,param)=>{if(pname==2898){GLEmulation.lightModelTwoSide=param!=0?true:false}else{abort("glLightModelf: TODO: "+pname)}};var _emscripten_glLightModelfv=(pname,param)=>{if(pname==2899){GLEmulation.lightModelAmbient[0]=HEAPF32[param>>2];GLEmulation.lightModelAmbient[1]=HEAPF32[param+4>>2];GLEmulation.lightModelAmbient[2]=HEAPF32[param+8>>2];GLEmulation.lightModelAmbient[3]=HEAPF32[param+12>>2]}else{abort("glLightModelfv: TODO: "+pname)}};var _emscripten_glLightfv=(light,pname,param)=>{if(light>=16384&&light<16392){var lightId=light-16384;if(pname==4608){GLEmulation.lightAmbient[lightId][0]=HEAPF32[param>>2];GLEmulation.lightAmbient[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightAmbient[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightAmbient[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4609){GLEmulation.lightDiffuse[lightId][0]=HEAPF32[param>>2];GLEmulation.lightDiffuse[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightDiffuse[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightDiffuse[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4610){GLEmulation.lightSpecular[lightId][0]=HEAPF32[param>>2];GLEmulation.lightSpecular[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightSpecular[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightSpecular[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4611){GLEmulation.lightPosition[lightId][0]=HEAPF32[param>>2];GLEmulation.lightPosition[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightPosition[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightPosition[lightId][3]=HEAPF32[param+12>>2];GLImmediate.matrixLib.mat4.multiplyVec4(GLImmediate.matrix[0],GLEmulation.lightPosition[lightId])}else{abort("glLightfv: TODO: "+pname)}}};var _emscripten_glLineWidth=x0=>GLctx.lineWidth(x0);var _emscripten_glLoadIdentity=()=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.identity(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadTransposeMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),GLImmediate.matrix[GLImmediate.currentMatrix]);GLImmediate.matrixLib.mat4.transpose(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadTransposeMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),GLImmediate.matrix[GLImmediate.currentMatrix]);GLImmediate.matrixLib.mat4.transpose(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glMaterialfv=(face,pname,param)=>{if(face!=1028&&face!=1032){abort("glMaterialfv: TODO"+face)}if(pname==4608){GLEmulation.materialAmbient[0]=HEAPF32[param>>2];GLEmulation.materialAmbient[1]=HEAPF32[param+4>>2];GLEmulation.materialAmbient[2]=HEAPF32[param+8>>2];GLEmulation.materialAmbient[3]=HEAPF32[param+12>>2]}else if(pname==4609){GLEmulation.materialDiffuse[0]=HEAPF32[param>>2];GLEmulation.materialDiffuse[1]=HEAPF32[param+4>>2];GLEmulation.materialDiffuse[2]=HEAPF32[param+8>>2];GLEmulation.materialDiffuse[3]=HEAPF32[param+12>>2]}else if(pname==4610){GLEmulation.materialSpecular[0]=HEAPF32[param>>2];GLEmulation.materialSpecular[1]=HEAPF32[param+4>>2];GLEmulation.materialSpecular[2]=HEAPF32[param+8>>2];GLEmulation.materialSpecular[3]=HEAPF32[param+12>>2]}else if(pname==5633){GLEmulation.materialShininess[0]=HEAPF32[param>>2]}else{abort("glMaterialfv: TODO: "+pname)}};var _emscripten_glMatrixMode=mode=>{if(mode==5888){GLImmediate.currentMatrix=0}else if(mode==5889){GLImmediate.currentMatrix=1}else if(mode==5890){GLImmediate.useTextureMatrix=true;GLImmediate.currentMatrix=2+GLImmediate.TexEnvJIT.getActiveTexture()}else{throw`Wrong mode ${mode} passed to glMatrixMode`}};var _emscripten_glMultMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],HEAPF64.subarray(matrix>>3,matrix+128>>3))};var _emscripten_glMultMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],HEAPF32.subarray(matrix>>2,matrix+64>>2))};var _emscripten_glMultTransposeMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;var colMajor=GLImmediate.matrixLib.mat4.create();GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),colMajor);GLImmediate.matrixLib.mat4.transpose(colMajor);GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],colMajor)};var _emscripten_glMultTransposeMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;var colMajor=GLImmediate.matrixLib.mat4.create();GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),colMajor);GLImmediate.matrixLib.mat4.transpose(colMajor);GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],colMajor)};var _emscripten_glNormal3f=(x,y,z)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;assert(GLImmediate.vertexCounter<<2{GLImmediate.setClientAttribute(GLImmediate.NORMAL,3,type,stride,pointer)};var _emscripten_glOrtho=(left,right,bottom,top_,nearVal,farVal)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],GLImmediate.matrixLib.mat4.ortho(left,right,bottom,top_,nearVal,farVal))};var _emscripten_glPauseTransformFeedback=()=>GLctx.pauseTransformFeedback();var _emscripten_glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}else if(pname==3314){GL.unpackRowLength=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPolygonMode=()=>{};var _emscripten_glPolygonModeWEBGL=(face,mode)=>{GLctx.webglPolygonMode["polygonModeWEBGL"](face,mode)};var _emscripten_glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);var _emscripten_glPolygonOffsetClampEXT=(factor,units,clamp)=>{GLctx.extPolygonOffsetClamp["polygonOffsetClampEXT"](factor,units,clamp)};var _emscripten_glPopMatrix=()=>{if(GLImmediate.matrixStack[GLImmediate.currentMatrix].length==0){GL.recordError(1284);return}GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrix[GLImmediate.currentMatrix]=GLImmediate.matrixStack[GLImmediate.currentMatrix].pop()};var _emscripten_glProgramBinary=(program,binaryFormat,binary,length)=>{GL.recordError(1280)};var _emscripten_glProgramParameteri=(program,pname,value)=>{GL.recordError(1280)};var _emscripten_glPushMatrix=()=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixStack[GLImmediate.currentMatrix].push(Array.prototype.slice.call(GLImmediate.matrix[GLImmediate.currentMatrix]))};var _emscripten_glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var _emscripten_glReadBuffer=x0=>GLctx.readBuffer(x0);var computeUnpackAlignedImageSize=(width,height,sizePerPixel)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=(GL.unpackRowLength||width)*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,GL.unpackAlignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16};var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel);return heap.subarray(toTypedArrayIndex(pixels,heap),toTypedArrayIndex(pixels+bytes,heap))};var _emscripten_glReadPixels=(x,y,width,height,format,type,pixels)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels);return}var heap=heapObjectForWebGLType(type);var target=toTypedArrayIndex(pixels,heap);GLctx.readPixels(x,y,width,height,format,type,heap,target);return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReleaseShaderCompiler=()=>{};var _emscripten_glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);var _emscripten_glRenderbufferStorageMultisample=(x0,x1,x2,x3,x4)=>GLctx.renderbufferStorageMultisample(x0,x1,x2,x3,x4);var _emscripten_glResumeTransformFeedback=()=>GLctx.resumeTransformFeedback();var _emscripten_glRotated=(angle,x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.rotate(GLImmediate.matrix[GLImmediate.currentMatrix],angle*Math.PI/180,[x,y,z])};var _glRotated=_emscripten_glRotated;var _emscripten_glRotatef=_glRotated;var _emscripten_glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glSamplerParameterf=(sampler,pname,param)=>{GLctx.samplerParameterf(GL.samplers[sampler],pname,param)};var _emscripten_glSamplerParameterfv=(sampler,pname,params)=>{var param=HEAPF32[params>>2];GLctx.samplerParameterf(GL.samplers[sampler],pname,param)};var _emscripten_glSamplerParameteri=(sampler,pname,param)=>{GLctx.samplerParameteri(GL.samplers[sampler],pname,param)};var _emscripten_glSamplerParameteriv=(sampler,pname,params)=>{var param=HEAP32[params>>2];GLctx.samplerParameteri(GL.samplers[sampler],pname,param)};var _emscripten_glScaled=(x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.scale(GLImmediate.matrix[GLImmediate.currentMatrix],[x,y,z])};var _glScaled=_emscripten_glScaled;var _emscripten_glScalef=_glScaled;var _emscripten_glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);var _emscripten_glShadeModel=()=>warnOnce("TODO: glShadeModel");var _emscripten_glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);var _emscripten_glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);var _emscripten_glStencilMask=x0=>GLctx.stencilMask(x0);var _emscripten_glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);var _emscripten_glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);var _emscripten_glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);var _emscripten_glTexCoord2i=(u,v)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=u;GLImmediate.vertexData[GLImmediate.vertexCounter++]=v;GLImmediate.addRendererComponent(GLImmediate.TEXTURE0,2,GLctx.FLOAT)};var _glTexCoord2i=_emscripten_glTexCoord2i;var _emscripten_glTexCoord2f=_glTexCoord2i;var _emscripten_glTexCoord2fv=v=>_glTexCoord2i(HEAPF32[v>>2],HEAPF32[v+4>>2]);var _emscripten_glTexCoord3f=(target,level,internalformat,width,border,format,type,data)=>abort("glTexCoord3f: TODO");var _emscripten_glTexCoord4f=()=>{abort("glTexCoord4f: TODO")};var _emscripten_glTexCoordPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture,size,type,stride,pointer)};var _emscripten_glTexGenfv=(coord,pname,param)=>abort("glTexGenfv: TODO");var _emscripten_glTexGeni=(coord,pname,param)=>abort("glTexGeni: TODO");var _emscripten_glTexImage1D=(target,level,internalformat,width,border,format,type,data)=>abort("glTexImage1D: TODO");var _emscripten_glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels);return}if(pixels){var heap=heapObjectForWebGLType(type);var index=toTypedArrayIndex(pixels,heap);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,index);return}}var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)};var _emscripten_glTexImage3D=(target,level,internalFormat,width,height,depth,border,format,type,pixels)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,heap,toTypedArrayIndex(pixels,heap))}else{GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,null)}};var _emscripten_glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);var _emscripten_glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);var _emscripten_glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexStorage2D=(x0,x1,x2,x3,x4)=>GLctx.texStorage2D(x0,x1,x2,x3,x4);var _emscripten_glTexStorage3D=(x0,x1,x2,x3,x4,x5)=>GLctx.texStorage3D(x0,x1,x2,x3,x4,x5);var _emscripten_glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);return}if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,heap,toTypedArrayIndex(pixels,heap));return}}var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTexSubImage3D=(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,heap,toTypedArrayIndex(pixels,heap))}else{GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,null)}};var _emscripten_glTransformFeedbackVaryings=(program,count,varyings,bufferMode)=>{program=GL.programs[program];var vars=[];for(var i=0;i>2]));GLctx.transformFeedbackVaryings(program,vars,bufferMode)};var _emscripten_glTranslated=(x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.translate(GLImmediate.matrix[GLImmediate.currentMatrix],[x,y,z])};var _glTranslated=_emscripten_glTranslated;var _emscripten_glTranslatef=_glTranslated;var _emscripten_glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var miniTempWebGLFloatBuffers=[];var _emscripten_glUniform1fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform1fv(webglGetUniformLocation(location),HEAPF32,value>>2,count);return}if(count<=288){var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var miniTempWebGLIntBuffers=[];var _emscripten_glUniform1iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform1iv(webglGetUniformLocation(location),HEAP32,value>>2,count);return}if(count<=288){var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1ui=(location,v0)=>{GLctx.uniform1ui(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1uiv=(location,count,value)=>{count&&GLctx.uniform1uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count)};var _emscripten_glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform2fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*2);return}if(count<=144){count*=2;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform2iv(webglGetUniformLocation(location),HEAP32,value>>2,count*2);return}if(count<=144){count*=2;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2ui=(location,v0,v1)=>{GLctx.uniform2ui(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2uiv=(location,count,value)=>{count&&GLctx.uniform2uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*2)};var _emscripten_glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform3fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*3);return}if(count<=96){count*=3;var view=miniTempWebGLFloatBuffers[count];for(var i=0;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(webglGetUniformLocation(location),view)};var _emscripten_glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform3iv(webglGetUniformLocation(location),HEAP32,value>>2,count*3);return}if(count<=96){count*=3;var view=miniTempWebGLIntBuffers[count];for(var i=0;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(webglGetUniformLocation(location),view)};var _emscripten_glUniform3ui=(location,v0,v1,v2)=>{GLctx.uniform3ui(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3uiv=(location,count,value)=>{count&&GLctx.uniform3uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*3)};var _emscripten_glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform4fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*4);return}if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];var heap=HEAPF32;value=value>>2;count*=4;for(var i=0;i>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform4iv(webglGetUniformLocation(location),HEAP32,value>>2,count*4);return}if(count<=72){count*=4;var view=miniTempWebGLIntBuffers[count];for(var i=0;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(webglGetUniformLocation(location),view)};var _emscripten_glUniform4ui=(location,v0,v1,v2,v3)=>{GLctx.uniform4ui(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4uiv=(location,count,value)=>{count&&GLctx.uniform4uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*4)};var _emscripten_glUniformBlockBinding=(program,uniformBlockIndex,uniformBlockBinding)=>{program=GL.programs[program];GLctx.uniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding)};var _emscripten_glUniformMatrix2fv=(location,count,transpose,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*4);return}if(count<=72){count*=4;var view=miniTempWebGLFloatBuffers[count];for(var i=0;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(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix2x3fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix2x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)};var _emscripten_glUniformMatrix2x4fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix2x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)};var _emscripten_glUniformMatrix3fv=(location,count,transpose,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*9);return}if(count<=32){count*=9;var view=miniTempWebGLFloatBuffers[count];for(var i=0;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(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3x2fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix3x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)};var _emscripten_glUniformMatrix3x4fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix3x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)};var _emscripten_glUniformMatrix4fv=(location,count,transpose,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*16);return}if(count<=18){var view=miniTempWebGLFloatBuffers[16*count];var heap=HEAPF32;value=value>>2;count*=16;for(var i=0;i>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4x2fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix4x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)};var _emscripten_glUniformMatrix4x3fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix4x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)};var _emscripten_glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glVertex2f=(x,y)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=0;GLImmediate.vertexData[GLImmediate.vertexCounter++]=1;assert(GLImmediate.vertexCounter<<2_glVertex2f(HEAPF32[p>>2],HEAPF32[p+4>>2]);var _emscripten_glVertex2i=_glVertex2f;var _emscripten_glVertex3f=(x,y,z)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;GLImmediate.vertexData[GLImmediate.vertexCounter++]=1;assert(GLImmediate.vertexCounter<<2_glVertex3f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2]);var _emscripten_glVertex3i=_glVertex3f;var _emscripten_glVertex4f=(x,y,z,w)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;GLImmediate.vertexData[GLImmediate.vertexCounter++]=w;assert(GLImmediate.vertexCounter<<2_glVertex4f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2],HEAPF32[p+12>>2]);var _emscripten_glVertex4i=_glVertex4f;var _emscripten_glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);var _emscripten_glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);var _emscripten_glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);var _emscripten_glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);var _emscripten_glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisor=_emscripten_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorARB=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorEXT=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorNV=_glVertexAttribDivisor;var _emscripten_glVertexAttribI4i=(x0,x1,x2,x3,x4)=>GLctx.vertexAttribI4i(x0,x1,x2,x3,x4);var _emscripten_glVertexAttribI4iv=(index,v)=>{GLctx.vertexAttribI4i(index,HEAP32[v>>2],HEAP32[v+4>>2],HEAP32[v+8>>2],HEAP32[v+12>>2])};var _emscripten_glVertexAttribI4ui=(x0,x1,x2,x3,x4)=>GLctx.vertexAttribI4ui(x0,x1,x2,x3,x4);var _emscripten_glVertexAttribI4uiv=(index,v)=>{GLctx.vertexAttribI4ui(index,HEAPU32[v>>2],HEAPU32[v+4>>2],HEAPU32[v+8>>2],HEAPU32[v+12>>2])};var _emscripten_glVertexAttribIPointer=(index,size,type,stride,ptr)=>{GLctx.vertexAttribIPointer(index,size,type,stride,ptr)};var _emscripten_glVertexPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.VERTEX,size,type,stride,pointer)};var _emscripten_glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);var _emscripten_glWaitSync=(sync,flags,timeout)=>{timeout=Number(timeout);GLctx.waitSync(GL.syncs[sync],flags,timeout)};var _emscripten_has_asyncify=()=>0;var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}if(!JSEvents.canPerformEventHandlerRequests()){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};var _emscripten_request_fullscreen_strategy=(target,deferUntilInEventHandler,fullscreenStrategy)=>{var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)};var _emscripten_request_pointerlock=(target,deferUntilInEventHandler)=>{target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}if(!JSEvents.canPerformEventHandlerRequests()){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)};var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var t0=_emscripten_get_now();var replacement=growMemory(newSize);var t1=_emscripten_get_now();dbg(`Heap resize call from ${oldSize} to ${newSize} took ${t1-t0} msecs. Success: ${!!replacement}`);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){err(`navigator.getGamepads() exists, but failed to execute with exception ${e}. Disabling Gamepad access.`);navigator.getGamepads=null}return-1};var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=e=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_beforeunload_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")};var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=256;JSEvents.focusEvent||=_malloc(eventSize);var focusEventHandlerFunc=e=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_blur_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);var _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};var _emscripten_set_focus_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=getFullscreenElement();var isFullscreen=!!fullscreenElement;HEAP8[eventStruct]=isFullscreen;checkInt8(isFullscreen);HEAP8[eventStruct+1]=JSEvents.fullscreenEnabled();checkInt8(JSEvents.fullscreenEnabled());var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+2,128);stringToUTF8(id,eventStruct+130,128);HEAP32[eventStruct+260>>2]=reportedElement?reportedElement.clientWidth:0;checkInt32(reportedElement?reportedElement.clientWidth:0);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientHeight:0;checkInt32(reportedElement?reportedElement.clientHeight:0);HEAP32[eventStruct+268>>2]=screen.width;checkInt32(screen.width);HEAP32[eventStruct+272>>2]=screen.height;checkInt32(screen.height);if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=276;JSEvents.fullscreenChangeEvent||=_malloc(eventSize);var fullscreenChangeEventHandlerFunc=e=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:fullscreenChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _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,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1240;JSEvents.gamepadEvent||=_malloc(eventSize);var gamepadEventHandlerFunc=e=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)};var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)};var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=160;JSEvents.keyEvent||=_malloc(eventSize);var keyEventHandlerFunc=e=>{assert(e);var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP8[keyEventData+12]=e.ctrlKey;HEAP8[keyEventData+13]=e.shiftKey;HEAP8[keyEventData+14]=e.altKey;HEAP8[keyEventData+15]=e.metaKey;HEAP8[keyEventData+16]=e.repeat;HEAP32[idx+5]=e.charCode;HEAP32[idx+6]=e.keyCode;HEAP32[idx+7]=e.which;stringToUTF8(e.key||"",keyEventData+32,32);stringToUTF8(e.code||"",keyEventData+64,32);stringToUTF8(e.char||"",keyEventData+96,32);stringToUTF8(e.locale||"",keyEventData+128,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_keydown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);var _emscripten_set_keypress_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);var _emscripten_set_keyup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var iterFunc=getWasmTableEntry(func);setMainLoop(iterFunc,fps,simulateInfiniteLoop)};var fillMouseEventData=(eventStruct,e,target)=>{assert(eventStruct%4==0);HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP8[eventStruct+24]=e.ctrlKey;HEAP8[eventStruct+25]=e.shiftKey;HEAP8[eventStruct+26]=e.altKey;HEAP8[eventStruct+27]=e.metaKey;HEAP16[idx*2+14]=e.button;HEAP16[idx*2+15]=e.buttons;HEAP32[idx+8]=e["movementX"];HEAP32[idx+9]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+10]=e.clientX-(rect.left|0);HEAP32[idx+11]=e.clientY-(rect.top|0)};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=64;JSEvents.mouseEvent||=_malloc(eventSize);target=findEventTarget(target);var mouseEventHandlerFunc=e=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_mousedown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);var _emscripten_set_mouseenter_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);var _emscripten_set_mouseleave_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);var _emscripten_set_mousemove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);var _emscripten_set_mouseup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP8[eventStruct]=isPointerlocked;checkInt8(isPointerlocked);var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+1,128);stringToUTF8(id,eventStruct+129,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=257;JSEvents.pointerlockChangeEvent||=_malloc(eventSize);var pointerlockChangeEventHandlerFunc=e=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_pointerlockchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!document.body?.requestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)};var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=36;JSEvents.uiEvent||=_malloc(eventSize);target=findEventTarget(target);var uiEventHandlerFunc=e=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=0;checkInt32(0);HEAP32[uiEvent+4>>2]=b.clientWidth;checkInt32(b.clientWidth);HEAP32[uiEvent+8>>2]=b.clientHeight;checkInt32(b.clientHeight);HEAP32[uiEvent+12>>2]=innerWidth;checkInt32(innerWidth);HEAP32[uiEvent+16>>2]=innerHeight;checkInt32(innerHeight);HEAP32[uiEvent+20>>2]=outerWidth;checkInt32(outerWidth);HEAP32[uiEvent+24>>2]=outerHeight;checkInt32(outerHeight);HEAP32[uiEvent+28>>2]=pageXOffset|0;checkInt32(pageXOffset|0);HEAP32[uiEvent+32>>2]=pageYOffset|0;checkInt32(pageYOffset|0);if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1552;JSEvents.touchEvent||=_malloc(eventSize);target=findEventTarget(target);var touchEventHandlerFunc=e=>{assert(e);var t,touches={},et=e.touches;for(let t of et){t.isChanged=t.onTarget=0;touches[t.identifier]=t}for(let t of e.changedTouches){t.isChanged=1;touches[t.identifier]=t}for(let t of e.targetTouches){touches[t.identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;HEAPF64[touchEvent>>3]=e.timeStamp;HEAP8[touchEvent+12]=e.ctrlKey;HEAP8[touchEvent+13]=e.shiftKey;HEAP8[touchEvent+14]=e.altKey;HEAP8[touchEvent+15]=e.metaKey;var idx=touchEvent+16;var targetRect=getBoundingClientRect(target);var numTouches=0;for(let t of Object.values(touches)){var idx32=idx>>2;HEAP32[idx32+0]=t.identifier;HEAP32[idx32+1]=t.screenX;HEAP32[idx32+2]=t.screenY;HEAP32[idx32+3]=t.clientX;HEAP32[idx32+4]=t.clientY;HEAP32[idx32+5]=t.pageX;HEAP32[idx32+6]=t.pageY;HEAP8[idx+28]=t.isChanged;HEAP8[idx+29]=t.onTarget;HEAP32[idx32+8]=t.clientX-(targetRect.left|0);HEAP32[idx32+9]=t.clientY-(targetRect.top|0);idx+=48;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;checkInt32(numTouches);if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP8[eventStruct]=document.hidden;checkInt8(document.hidden);HEAP32[eventStruct+4>>2]=visibilityState;checkInt32(visibilityState)};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=8;JSEvents.visibilityChangeEvent||=_malloc(eventSize);var visibilityChangeEventHandlerFunc=e=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_visibilitychange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!specialHTMLTargets[1]){return-4}return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread)};var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=96;JSEvents.wheelEvent||=_malloc(eventSize);var wheelHandlerFunc=e=>{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"];checkInt32(e["deltaMode"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:true,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:wheelHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_wheel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}};var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);var _emscripten_sleep=()=>{abort("Please compile your program with async support in order to use asynchronous operations like emscripten_sleep")};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;checkInt32(strings.length);var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;checkInt32(bufSize);return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);checkInt64(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _glAlphaFunc=_emscripten_glAlphaFunc;var _glBindTexture=_emscripten_glBindTexture;var _glBlendFunc=_emscripten_glBlendFunc;var _glBufferData=_emscripten_glBufferData;var _glClear=_emscripten_glClear;var _glClearColor=_emscripten_glClearColor;var _glColorMask=_emscripten_glColorMask;var _glColorPointer=_emscripten_glColorPointer;var _glCullFace=_emscripten_glCullFace;var _glDeleteBuffers=_emscripten_glDeleteBuffers;var _glDeleteTextures=_emscripten_glDeleteTextures;var _glDepthFunc=_emscripten_glDepthFunc;var _glDepthMask=_emscripten_glDepthMask;var _glDepthRangef=_emscripten_glDepthRangef;var _glDisableClientState=_emscripten_glDisableClientState;var _glDrawArrays=_emscripten_glDrawArrays;var _emscripten_glFogf=(pname,param)=>{switch(pname){case 2915:GLEmulation.fogStart=param;break;case 2916:GLEmulation.fogEnd=param;break;case 2914:GLEmulation.fogDensity=param;break;case 2917:switch(param){case 2049:case 9729:if(GLEmulation.fogMode!=param){GLImmediate.currentRenderer=null;GLEmulation.fogMode=param}break;default:if(GLEmulation.fogMode!=2048){GLImmediate.currentRenderer=null;GLEmulation.fogMode=2048}break}break}};var _glFogf=_emscripten_glFogf;var _emscripten_glFogfv=(pname,param)=>{switch(pname){case 2918:GLEmulation.fogColor[0]=HEAPF32[param>>2];GLEmulation.fogColor[1]=HEAPF32[param+4>>2];GLEmulation.fogColor[2]=HEAPF32[param+8>>2];GLEmulation.fogColor[3]=HEAPF32[param+12>>2];break;case 2915:case 2916:_glFogf(pname,HEAPF32[param>>2]);break}};var _glFogfv=_emscripten_glFogfv;var _emscripten_glFogi=(pname,param)=>_glFogf(pname,param);var _glFogi=_emscripten_glFogi;var _emscripten_glFogx=_glFogi;var _glFogx=_emscripten_glFogx;var _glGenBuffers=_emscripten_glGenBuffers;var _glGenTextures=_emscripten_glGenTextures;var _glLineWidth=_emscripten_glLineWidth;var _glLoadIdentity=_emscripten_glLoadIdentity;var _glMatrixMode=_emscripten_glMatrixMode;var _glMultMatrixf=_emscripten_glMultMatrixf;var _glNormal3f=_emscripten_glNormal3f;var _glOrtho=_emscripten_glOrtho;var _emscripten_glOrthof=_glOrtho;var _glOrthof=_emscripten_glOrthof;var _glPolygonOffset=_emscripten_glPolygonOffset;var _glPopMatrix=_emscripten_glPopMatrix;var _glPushMatrix=_emscripten_glPushMatrix;var _glRotatef=_emscripten_glRotatef;var _glScalef=_emscripten_glScalef;var _glScissor=_emscripten_glScissor;var _glShadeModel=_emscripten_glShadeModel;var _glTexCoordPointer=_emscripten_glTexCoordPointer;var _glTexImage2D=_emscripten_glTexImage2D;var _glTexParameteri=_emscripten_glTexParameteri;var _glTexSubImage2D=_emscripten_glTexSubImage2D;var _glTranslatef=_emscripten_glTranslatef;var _glVertexPointer=_emscripten_glVertexPointer;var _glViewport=_emscripten_glViewport;function _mcGetWorldResult(){var r=window._mcWorldResult;if(!r)return 0;window._mcWorldResult=null;window._mcWorldStatus=-1;var len=lengthBytesUTF8(r)+1;var buf=_malloc(len);stringToUTF8(r,buf,len);return buf}function _mcGetWorldStatus(){if(window._mcWorldStatus===undefined)return-1;return window._mcWorldStatus}function _mcShowCreateWorldDialog(){var overlay=document.createElement("div");overlay.id="mc-create-world";overlay.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;"+"background:rgba(0,0,0,0.8);display:flex;align-items:center;"+"justify-content:center;z-index:9999;font-family:monospace";var box=document.createElement("div");box.style.cssText="background:#3c3c3c;border:2px solid #888;padding:28px;"+"min-width:320px;color:#eee;text-align:center";box.innerHTML='

Create New World

'+'
'+'
'+''+"
"+'
'+'
'+'"+"
"+'
'+''+''+"
";overlay.appendChild(box);document.body.appendChild(overlay);setTimeout(function(){var input=document.getElementById("mc-worldname");if(input){input.focus();input.select()}},50);window._mcWorldStatus=-1;window._mcWorldResult=null;document.getElementById("mc-create-btn").onclick=function(){var nm=(document.getElementById("mc-worldname").value||"My World").trim();var mode=document.getElementById("mc-gamemode").value;window._mcWorldStatus=1;window._mcWorldResult=nm+"|"+mode;document.body.removeChild(overlay)};document.getElementById("mc-cancel-btn").onclick=function(){window._mcWorldStatus=0;window._mcWorldResult=null;document.body.removeChild(overlay)};document.getElementById("mc-worldname").onkeydown=function(e){if(e.key==="Enter")document.getElementById("mc-create-btn").click();if(e.key==="Escape")document.getElementById("mc-cancel-btn").click()}}function _mcSyncSaves(){if(typeof FS!=="undefined"){FS.syncfs(false,function(err){if(err)console.error("FS sync error:",err)})}}var dynCall=(sig,ptr,args=[],promising=false)=>{assert(ptr,`null function pointer in dynCall`);assert(!promising,"async dynCall is not supported in this mode");assert(getWasmTableEntry(ptr),`missing table entry in dynCall: ${ptr}`);var func=getWasmTableEntry(ptr);var rtn=func(...args);function convert(rtn){return rtn}return convert(rtn)};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);var FS_createPath=(...args)=>FS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);var createContext=Browser.createContext;FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();registerPreMainLoop(()=>GL.newRenderingFrameStarted());GLImmediate.setupFuncs();Browser.moduleContextCreatedCallbacks.push(()=>GLImmediate.init());GLEmulation.init();for(let i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<=288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<=288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i)}{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];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");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 emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");assert(typeof Module["ENVIRONMENT"]=="undefined","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");assert(typeof Module["STACK_SIZE"]=="undefined","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Module["wasmMemory"]=="undefined","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(typeof Module["INITIAL_MEMORY"]=="undefined","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}consumedModuleProp("preInit")}Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["createContext"]=createContext;Module["FS_preloadFile"]=FS_preloadFile;Module["FS_unlink"]=FS_unlink;Module["FS_createPath"]=FS_createPath;Module["FS_createDevice"]=FS_createDevice;Module["FS"]=FS;Module["FS_createDataFile"]=FS_createDataFile;Module["FS_createLazyFile"]=FS_createLazyFile;var missingLibrarySymbols=["writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","setTempRet0","createNamedFunction","withStackSave","getDynCaller","runtimeKeepalivePush","runtimeKeepalivePop","asmjsMangle","HandleAllocator","addOnInit","addOnPostCtor","addOnPreMain","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","hideEverythingExceptGivenElement","restoreHiddenElements","softFullscreenResizeWebGLRenderTarget","registerPointerlockErrorEventCallback","fillBatteryEventData","registerBatteryEventCallback","jsStackTrace","getCallstack","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","FS_mkdirTree","_setNetworkCallback","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","out","err","callMain","abort","wasmExports","HEAPF32","HEAPF64","HEAP8","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","writeI53ToI64","readI53FromI64","readI53FromU64","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","ptrToString","zeroMemory","exitJS","getHeapMax","growMemory","ENV","setStackLimits","ERRNO_CODES","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","runMainThreadEmAsm","jstoi_q","getExecutableName","autoResumeAudioContext","dynCall","handleException","keepRuntimeAlive","callUserCallback","maybeExit","asyncLoad","alignMemory","mmapAlloc","wasmTable","wasmMemory","getUniqueRunDependency","noExitRuntime","addOnPreRun","addOnExit","addOnPostRun","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","intArrayFromString","UTF16Decoder","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","JSEvents","registerKeyEventCallback","specialHTMLTargets","maybeCStringToJsString","findEventTarget","findCanvasEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","setLetterbox","currentFullscreenStrategy","restoreOldWindowedStyle","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","setCanvasElementSize","getCanvasElementSize","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","safeSetTimeout","emSetImmediate","emClearImmediate_deps","emClearImmediate","registerPreMainLoop","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","getSocketFromFD","getSocketAddress","preloadPlugins","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_readFile","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_forceLoadFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","GL","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","AL","GLUT","EGL","GLEW","IDBStore","emscriptenWebGLGetIndexed","webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance","webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance","GLEmulation","GLImmediate","GLImmediateSetup","emulGlGenVertexArrays","emulGlDeleteVertexArrays","emulGlIsVertexArray","emulGlBindVertexArray","print","printErr","jstoi_s","IDBFS"];unexportedSymbols.forEach(unexportedRuntimeSymbol);function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings");ignoredModuleProp("logReadFiles");ignoredModuleProp("loadSplitModule")}var ASM_CONSTS={6463912:()=>window.innerWidth,6463942:()=>window.innerHeight,6463973:()=>{if(typeof FS!=="undefined"){FS.syncfs(false,function(err){if(err)console.error("FS.syncfs save error:",err)})}},6464103:()=>{var canvas=document.querySelector("canvas");if(canvas&&canvas.requestPointerLock){canvas.requestPointerLock()}},6464228:()=>document.pointerLockElement!=null?1:0,6464286:()=>window.innerWidth,6464316:()=>window.innerHeight,6464347:()=>{FS.mkdir("/games",511);FS.mount(IDBFS,{},"/games");FS.syncfs(true,function(err){if(err)console.warn("FS.syncfs load error:",err);Module._idbfsReady()})},6464519:()=>{document.addEventListener("pointerlockchange",function(){})},6464587:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},6464734:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},6464968:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){if(typeof navigator.userActivation==="undefined"){autoResumeAudioContext(SDL2.audioContext)}}}return SDL2.audioContext===undefined?-1:0},6465520:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},6465588:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined;SDL2.capture.silenceBuffer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vp",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vp",$2,[$3])};SDL2.capture.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},6467281:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}if(SDL2.audio.silenceTimer!==undefined){clearInterval(SDL2.audio.silenceTimer);SDL2.audio.silenceTimer=undefined;SDL2.audio.silenceBuffer=undefined}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vp",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"]);if(SDL2.audioContext.state==="suspended"){SDL2.audio.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.audio.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){if(typeof navigator.userActivation!=="undefined"){if(navigator.userActivation.hasBeenActive){SDL2.audioContext.resume()}}SDL2.audio.currentOutputBuffer=SDL2.audio.silenceBuffer;dynCall("vp",$2,[$3]);SDL2.audio.currentOutputBuffer=undefined};SDL2.audio.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3)}},6468456:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var buf=$0>>>2;var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{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=Browser.createContext(Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},6473010:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},6473093:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},6473162:()=>window.innerWidth,6473192:()=>window.innerHeight};var _free=Module["_free"]=makeInvalidEarlyAccess("_free");var _emscripten_is_pointer_locked=Module["_emscripten_is_pointer_locked"]=makeInvalidEarlyAccess("_emscripten_is_pointer_locked");var _syncSaves=Module["_syncSaves"]=makeInvalidEarlyAccess("_syncSaves");var _main=Module["_main"]=makeInvalidEarlyAccess("_main");var _idbfsReady=Module["_idbfsReady"]=makeInvalidEarlyAccess("_idbfsReady");var _htons=makeInvalidEarlyAccess("_htons");var _ntohs=makeInvalidEarlyAccess("_ntohs");var _fflush=makeInvalidEarlyAccess("_fflush");var _malloc=Module["_malloc"]=makeInvalidEarlyAccess("_malloc");var _strerror=makeInvalidEarlyAccess("_strerror");var _emscripten_stack_get_end=makeInvalidEarlyAccess("_emscripten_stack_get_end");var _emscripten_stack_get_base=makeInvalidEarlyAccess("_emscripten_stack_get_base");var _setThrew=makeInvalidEarlyAccess("_setThrew");var _emscripten_stack_init=makeInvalidEarlyAccess("_emscripten_stack_init");var _emscripten_stack_get_free=makeInvalidEarlyAccess("_emscripten_stack_get_free");var __emscripten_stack_restore=makeInvalidEarlyAccess("__emscripten_stack_restore");var __emscripten_stack_alloc=makeInvalidEarlyAccess("__emscripten_stack_alloc");var _emscripten_stack_get_current=makeInvalidEarlyAccess("_emscripten_stack_get_current");var ___set_stack_limits=Module["___set_stack_limits"]=makeInvalidEarlyAccess("___set_stack_limits");var memory=makeInvalidEarlyAccess("memory");var __indirect_function_table=makeInvalidEarlyAccess("__indirect_function_table");var wasmMemory=makeInvalidEarlyAccess("wasmMemory");var wasmTable=makeInvalidEarlyAccess("wasmTable");function assignWasmExports(wasmExports){assert(typeof wasmExports["free"]!="undefined","missing Wasm export: free");assert(typeof wasmExports["emscripten_is_pointer_locked"]!="undefined","missing Wasm export: emscripten_is_pointer_locked");assert(typeof wasmExports["syncSaves"]!="undefined","missing Wasm export: syncSaves");assert(typeof wasmExports["__main_argc_argv"]!="undefined","missing Wasm export: __main_argc_argv");assert(typeof wasmExports["idbfsReady"]!="undefined","missing Wasm export: idbfsReady");assert(typeof wasmExports["htons"]!="undefined","missing Wasm export: htons");assert(typeof wasmExports["ntohs"]!="undefined","missing Wasm export: ntohs");assert(typeof wasmExports["fflush"]!="undefined","missing Wasm export: fflush");assert(typeof wasmExports["malloc"]!="undefined","missing Wasm export: malloc");assert(typeof wasmExports["strerror"]!="undefined","missing Wasm export: strerror");assert(typeof wasmExports["emscripten_stack_get_end"]!="undefined","missing Wasm export: emscripten_stack_get_end");assert(typeof wasmExports["emscripten_stack_get_base"]!="undefined","missing Wasm export: emscripten_stack_get_base");assert(typeof wasmExports["setThrew"]!="undefined","missing Wasm export: setThrew");assert(typeof wasmExports["emscripten_stack_init"]!="undefined","missing Wasm export: emscripten_stack_init");assert(typeof wasmExports["emscripten_stack_get_free"]!="undefined","missing Wasm export: emscripten_stack_get_free");assert(typeof wasmExports["_emscripten_stack_restore"]!="undefined","missing Wasm export: _emscripten_stack_restore");assert(typeof wasmExports["_emscripten_stack_alloc"]!="undefined","missing Wasm export: _emscripten_stack_alloc");assert(typeof wasmExports["emscripten_stack_get_current"]!="undefined","missing Wasm export: emscripten_stack_get_current");assert(typeof wasmExports["__set_stack_limits"]!="undefined","missing Wasm export: __set_stack_limits");assert(typeof wasmExports["memory"]!="undefined","missing Wasm export: memory");assert(typeof wasmExports["__indirect_function_table"]!="undefined","missing Wasm export: __indirect_function_table");_free=Module["_free"]=createExportWrapper("free",1);_emscripten_is_pointer_locked=Module["_emscripten_is_pointer_locked"]=createExportWrapper("emscripten_is_pointer_locked",0);_syncSaves=Module["_syncSaves"]=createExportWrapper("syncSaves",0);_main=Module["_main"]=createExportWrapper("__main_argc_argv",2);_idbfsReady=Module["_idbfsReady"]=createExportWrapper("idbfsReady",0);_htons=createExportWrapper("htons",1);_ntohs=createExportWrapper("ntohs",1);_fflush=createExportWrapper("fflush",1);_malloc=Module["_malloc"]=createExportWrapper("malloc",1);_strerror=createExportWrapper("strerror",1);_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"];_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"];_setThrew=createExportWrapper("setThrew",2);_emscripten_stack_init=wasmExports["emscripten_stack_init"];_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];___set_stack_limits=Module["___set_stack_limits"]=createExportWrapper("__set_stack_limits",2);memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__assert_fail:___assert_fail,__cxa_throw:___cxa_throw,__handle_stack_overflow:___handle_stack_overflow,__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_faccessat:___syscall_faccessat,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getdents64:___syscall_getdents64,__syscall_getsockname:___syscall_getsockname,__syscall_getsockopt:___syscall_getsockopt,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_recvfrom:___syscall_recvfrom,__syscall_renameat:___syscall_renameat,__syscall_rmdir:___syscall_rmdir,__syscall_sendto:___syscall_sendto,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_abort_js:__abort_js,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,_tzset_js:__tzset_js,alBufferData:_alBufferData,alDeleteBuffers:_alDeleteBuffers,alDeleteSources:_alDeleteSources,alDistanceModel:_alDistanceModel,alGenBuffers:_alGenBuffers,alGenSources:_alGenSources,alGetError:_alGetError,alGetSourcei:_alGetSourcei,alListenerfv:_alListenerfv,alSource3f:_alSource3f,alSourcePlay:_alSourcePlay,alSourcef:_alSourcef,alSourcei:_alSourcei,alcCloseDevice:_alcCloseDevice,alcCreateContext:_alcCreateContext,alcDestroyContext:_alcDestroyContext,alcMakeContextCurrent:_alcMakeContextCurrent,alcOpenDevice:_alcOpenDevice,clock_time_get:_clock_time_get,eglBindAPI:_eglBindAPI,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetConfigAttrib:_eglGetConfigAttrib,eglGetDisplay:_eglGetDisplay,eglGetError:_eglGetError,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglQueryString:_eglQueryString,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,eglWaitGL:_eglWaitGL,eglWaitNative:_eglWaitNative,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_asm_const_int_sync_on_main_thread:_emscripten_asm_const_int_sync_on_main_thread,emscripten_asm_const_ptr_sync_on_main_thread:_emscripten_asm_const_ptr_sync_on_main_thread,emscripten_cancel_main_loop:_emscripten_cancel_main_loop,emscripten_date_now:_emscripten_date_now,emscripten_err:_emscripten_err,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_now:_emscripten_get_now,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_get_screen_size:_emscripten_get_screen_size,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAlphaFunc:_emscripten_glAlphaFunc,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBegin:_emscripten_glBegin,emscripten_glBeginQuery:_emscripten_glBeginQuery,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBeginTransformFeedback:_emscripten_glBeginTransformFeedback,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindBufferBase:_emscripten_glBindBufferBase,emscripten_glBindBufferRange:_emscripten_glBindBufferRange,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindProgram:_emscripten_glBindProgram,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindSampler:_emscripten_glBindSampler,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindTransformFeedback:_emscripten_glBindTransformFeedback,emscripten_glBindVertexArray:_emscripten_glBindVertexArray,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_glBlitFramebuffer:_emscripten_glBlitFramebuffer,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearBufferfi:_emscripten_glClearBufferfi,emscripten_glClearBufferfv:_emscripten_glClearBufferfv,emscripten_glClearBufferiv:_emscripten_glClearBufferiv,emscripten_glClearBufferuiv:_emscripten_glClearBufferuiv,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glClientActiveTexture:_emscripten_glClientActiveTexture,emscripten_glClientWaitSync:_emscripten_glClientWaitSync,emscripten_glClipControlEXT:_emscripten_glClipControlEXT,emscripten_glClipPlane:_emscripten_glClipPlane,emscripten_glColor3d:_emscripten_glColor3d,emscripten_glColor3f:_emscripten_glColor3f,emscripten_glColor3fv:_emscripten_glColor3fv,emscripten_glColor3ub:_emscripten_glColor3ub,emscripten_glColor3ubv:_emscripten_glColor3ubv,emscripten_glColor3ui:_emscripten_glColor3ui,emscripten_glColor3uiv:_emscripten_glColor3uiv,emscripten_glColor3us:_emscripten_glColor3us,emscripten_glColor3usv:_emscripten_glColor3usv,emscripten_glColor4d:_emscripten_glColor4d,emscripten_glColor4f:_emscripten_glColor4f,emscripten_glColor4fv:_emscripten_glColor4fv,emscripten_glColor4ub:_emscripten_glColor4ub,emscripten_glColor4ubv:_emscripten_glColor4ubv,emscripten_glColor4ui:_emscripten_glColor4ui,emscripten_glColor4us:_emscripten_glColor4us,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glColorPointer:_emscripten_glColorPointer,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexImage3D:_emscripten_glCompressedTexImage3D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCompressedTexSubImage3D:_emscripten_glCompressedTexSubImage3D,emscripten_glCopyBufferSubData:_emscripten_glCopyBufferSubData,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCopyTexSubImage3D:_emscripten_glCopyTexSubImage3D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteObject:_emscripten_glDeleteObject,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueries:_emscripten_glDeleteQueries,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteSamplers:_emscripten_glDeleteSamplers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteSync:_emscripten_glDeleteSync,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteTransformFeedbacks:_emscripten_glDeleteTransformFeedbacks,emscripten_glDeleteVertexArrays:_emscripten_glDeleteVertexArrays,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_glDisableClientState:_emscripten_glDisableClientState,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstanced:_emscripten_glDrawArraysInstanced,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawArraysInstancedARB:_emscripten_glDrawArraysInstancedARB,emscripten_glDrawArraysInstancedEXT:_emscripten_glDrawArraysInstancedEXT,emscripten_glDrawArraysInstancedNV:_emscripten_glDrawArraysInstancedNV,emscripten_glDrawBuffer:_emscripten_glDrawBuffer,emscripten_glDrawBuffers:_emscripten_glDrawBuffers,emscripten_glDrawBuffersEXT:_emscripten_glDrawBuffersEXT,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstanced:_emscripten_glDrawElementsInstanced,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glDrawElementsInstancedARB:_emscripten_glDrawElementsInstancedARB,emscripten_glDrawElementsInstancedEXT:_emscripten_glDrawElementsInstancedEXT,emscripten_glDrawElementsInstancedNV:_emscripten_glDrawElementsInstancedNV,emscripten_glDrawRangeElements:_emscripten_glDrawRangeElements,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableClientState:_emscripten_glEnableClientState,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEnd:_emscripten_glEnd,emscripten_glEndQuery:_emscripten_glEndQuery,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glEndTransformFeedback:_emscripten_glEndTransformFeedback,emscripten_glFenceSync:_emscripten_glFenceSync,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFramebufferTextureLayer:_emscripten_glFramebufferTextureLayer,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glFrustum:_emscripten_glFrustum,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueries:_emscripten_glGenQueries,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenSamplers:_emscripten_glGenSamplers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenTransformFeedbacks:_emscripten_glGenTransformFeedbacks,emscripten_glGenVertexArrays:_emscripten_glGenVertexArrays,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetActiveUniformBlockName:_emscripten_glGetActiveUniformBlockName,emscripten_glGetActiveUniformBlockiv:_emscripten_glGetActiveUniformBlockiv,emscripten_glGetActiveUniformsiv:_emscripten_glGetActiveUniformsiv,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteri64v:_emscripten_glGetBufferParameteri64v,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFragDataLocation:_emscripten_glGetFragDataLocation,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetInfoLog:_emscripten_glGetInfoLog,emscripten_glGetInteger64i_v:_emscripten_glGetInteger64i_v,emscripten_glGetInteger64v:_emscripten_glGetInteger64v,emscripten_glGetIntegeri_v:_emscripten_glGetIntegeri_v,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetInternalformativ:_emscripten_glGetInternalformativ,emscripten_glGetObjectParameteriv:_emscripten_glGetObjectParameteriv,emscripten_glGetPointerv:_emscripten_glGetPointerv,emscripten_glGetProgramBinary:_emscripten_glGetProgramBinary,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuiv:_emscripten_glGetQueryObjectuiv,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryiv:_emscripten_glGetQueryiv,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetSamplerParameterfv:_emscripten_glGetSamplerParameterfv,emscripten_glGetSamplerParameteriv:_emscripten_glGetSamplerParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetStringi:_emscripten_glGetStringi,emscripten_glGetSynciv:_emscripten_glGetSynciv,emscripten_glGetTexEnvfv:_emscripten_glGetTexEnvfv,emscripten_glGetTexEnviv:_emscripten_glGetTexEnviv,emscripten_glGetTexLevelParameteriv:_emscripten_glGetTexLevelParameteriv,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetTransformFeedbackVarying:_emscripten_glGetTransformFeedbackVarying,emscripten_glGetUniformBlockIndex:_emscripten_glGetUniformBlockIndex,emscripten_glGetUniformIndices:_emscripten_glGetUniformIndices,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetUniformuiv:_emscripten_glGetUniformuiv,emscripten_glGetVertexAttribIiv:_emscripten_glGetVertexAttribIiv,emscripten_glGetVertexAttribIuiv:_emscripten_glGetVertexAttribIuiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glInvalidateFramebuffer:_emscripten_glInvalidateFramebuffer,emscripten_glInvalidateSubFramebuffer:_emscripten_glInvalidateSubFramebuffer,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQuery:_emscripten_glIsQuery,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsSampler:_emscripten_glIsSampler,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsSync:_emscripten_glIsSync,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsTransformFeedback:_emscripten_glIsTransformFeedback,emscripten_glIsVertexArray:_emscripten_glIsVertexArray,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLightModelf:_emscripten_glLightModelf,emscripten_glLightModelfv:_emscripten_glLightModelfv,emscripten_glLightfv:_emscripten_glLightfv,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glLoadIdentity:_emscripten_glLoadIdentity,emscripten_glLoadMatrixd:_emscripten_glLoadMatrixd,emscripten_glLoadMatrixf:_emscripten_glLoadMatrixf,emscripten_glLoadTransposeMatrixd:_emscripten_glLoadTransposeMatrixd,emscripten_glLoadTransposeMatrixf:_emscripten_glLoadTransposeMatrixf,emscripten_glMaterialfv:_emscripten_glMaterialfv,emscripten_glMatrixMode:_emscripten_glMatrixMode,emscripten_glMultMatrixd:_emscripten_glMultMatrixd,emscripten_glMultMatrixf:_emscripten_glMultMatrixf,emscripten_glMultTransposeMatrixd:_emscripten_glMultTransposeMatrixd,emscripten_glMultTransposeMatrixf:_emscripten_glMultTransposeMatrixf,emscripten_glNormal3f:_emscripten_glNormal3f,emscripten_glNormalPointer:_emscripten_glNormalPointer,emscripten_glOrtho:_emscripten_glOrtho,emscripten_glPauseTransformFeedback:_emscripten_glPauseTransformFeedback,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonMode:_emscripten_glPolygonMode,emscripten_glPolygonModeWEBGL:_emscripten_glPolygonModeWEBGL,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glPolygonOffsetClampEXT:_emscripten_glPolygonOffsetClampEXT,emscripten_glPopMatrix:_emscripten_glPopMatrix,emscripten_glProgramBinary:_emscripten_glProgramBinary,emscripten_glProgramParameteri:_emscripten_glProgramParameteri,emscripten_glPushMatrix:_emscripten_glPushMatrix,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadBuffer:_emscripten_glReadBuffer,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glRenderbufferStorageMultisample:_emscripten_glRenderbufferStorageMultisample,emscripten_glResumeTransformFeedback:_emscripten_glResumeTransformFeedback,emscripten_glRotated:_emscripten_glRotated,emscripten_glRotatef:_emscripten_glRotatef,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glSamplerParameterf:_emscripten_glSamplerParameterf,emscripten_glSamplerParameterfv:_emscripten_glSamplerParameterfv,emscripten_glSamplerParameteri:_emscripten_glSamplerParameteri,emscripten_glSamplerParameteriv:_emscripten_glSamplerParameteriv,emscripten_glScaled:_emscripten_glScaled,emscripten_glScalef:_emscripten_glScalef,emscripten_glScissor:_emscripten_glScissor,emscripten_glShadeModel:_emscripten_glShadeModel,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_glTexCoord2f:_emscripten_glTexCoord2f,emscripten_glTexCoord2fv:_emscripten_glTexCoord2fv,emscripten_glTexCoord2i:_emscripten_glTexCoord2i,emscripten_glTexCoord3f:_emscripten_glTexCoord3f,emscripten_glTexCoord4f:_emscripten_glTexCoord4f,emscripten_glTexCoordPointer:_emscripten_glTexCoordPointer,emscripten_glTexGenfv:_emscripten_glTexGenfv,emscripten_glTexGeni:_emscripten_glTexGeni,emscripten_glTexImage1D:_emscripten_glTexImage1D,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexImage3D:_emscripten_glTexImage3D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexStorage2D:_emscripten_glTexStorage2D,emscripten_glTexStorage3D:_emscripten_glTexStorage3D,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glTexSubImage3D:_emscripten_glTexSubImage3D,emscripten_glTransformFeedbackVaryings:_emscripten_glTransformFeedbackVaryings,emscripten_glTranslated:_emscripten_glTranslated,emscripten_glTranslatef:_emscripten_glTranslatef,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform1ui:_emscripten_glUniform1ui,emscripten_glUniform1uiv:_emscripten_glUniform1uiv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform2ui:_emscripten_glUniform2ui,emscripten_glUniform2uiv:_emscripten_glUniform2uiv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform3ui:_emscripten_glUniform3ui,emscripten_glUniform3uiv:_emscripten_glUniform3uiv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniform4ui:_emscripten_glUniform4ui,emscripten_glUniform4uiv:_emscripten_glUniform4uiv,emscripten_glUniformBlockBinding:_emscripten_glUniformBlockBinding,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix2x3fv:_emscripten_glUniformMatrix2x3fv,emscripten_glUniformMatrix2x4fv:_emscripten_glUniformMatrix2x4fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix3x2fv:_emscripten_glUniformMatrix3x2fv,emscripten_glUniformMatrix3x4fv:_emscripten_glUniformMatrix3x4fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUniformMatrix4x2fv:_emscripten_glUniformMatrix4x2fv,emscripten_glUniformMatrix4x3fv:_emscripten_glUniformMatrix4x3fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertex2f:_emscripten_glVertex2f,emscripten_glVertex2fv:_emscripten_glVertex2fv,emscripten_glVertex2i:_emscripten_glVertex2i,emscripten_glVertex3f:_emscripten_glVertex3f,emscripten_glVertex3fv:_emscripten_glVertex3fv,emscripten_glVertex3i:_emscripten_glVertex3i,emscripten_glVertex4f:_emscripten_glVertex4f,emscripten_glVertex4fv:_emscripten_glVertex4fv,emscripten_glVertex4i:_emscripten_glVertex4i,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_glVertexAttribDivisor:_emscripten_glVertexAttribDivisor,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribDivisorARB:_emscripten_glVertexAttribDivisorARB,emscripten_glVertexAttribDivisorEXT:_emscripten_glVertexAttribDivisorEXT,emscripten_glVertexAttribDivisorNV:_emscripten_glVertexAttribDivisorNV,emscripten_glVertexAttribI4i:_emscripten_glVertexAttribI4i,emscripten_glVertexAttribI4iv:_emscripten_glVertexAttribI4iv,emscripten_glVertexAttribI4ui:_emscripten_glVertexAttribI4ui,emscripten_glVertexAttribI4uiv:_emscripten_glVertexAttribI4uiv,emscripten_glVertexAttribIPointer:_emscripten_glVertexAttribIPointer,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glVertexPointer:_emscripten_glVertexPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_glWaitSync:_emscripten_glWaitSync,emscripten_has_asyncify:_emscripten_has_asyncify,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_set_window_title:_emscripten_set_window_title,emscripten_sleep:_emscripten_sleep,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,glAlphaFunc:_glAlphaFunc,glBindBuffer:_glBindBuffer,glBindTexture:_glBindTexture,glBlendFunc:_glBlendFunc,glBufferData:_glBufferData,glClear:_glClear,glClearColor:_glClearColor,glColor4f:_glColor4f,glColorMask:_glColorMask,glColorPointer:_glColorPointer,glCullFace:_glCullFace,glDeleteBuffers:_glDeleteBuffers,glDeleteTextures:_glDeleteTextures,glDepthFunc:_glDepthFunc,glDepthMask:_glDepthMask,glDepthRangef:_glDepthRangef,glDisable:_glDisable,glDisableClientState:_glDisableClientState,glDrawArrays:_glDrawArrays,glEnable:_glEnable,glEnableClientState:_glEnableClientState,glFogf:_glFogf,glFogfv:_glFogfv,glFogx:_glFogx,glGenBuffers:_glGenBuffers,glGenTextures:_glGenTextures,glGetFloatv:_glGetFloatv,glHint:_glHint,glLineWidth:_glLineWidth,glLoadIdentity:_glLoadIdentity,glMatrixMode:_glMatrixMode,glMultMatrixf:_glMultMatrixf,glNormal3f:_glNormal3f,glOrthof:_glOrthof,glPolygonOffset:_glPolygonOffset,glPopMatrix:_glPopMatrix,glPushMatrix:_glPushMatrix,glRotatef:_glRotatef,glScalef:_glScalef,glScissor:_glScissor,glShadeModel:_glShadeModel,glTexCoordPointer:_glTexCoordPointer,glTexImage2D:_glTexImage2D,glTexParameteri:_glTexParameteri,glTexSubImage2D:_glTexSubImage2D,glTranslatef:_glTranslatef,glVertexPointer:_glVertexPointer,glViewport:_glViewport,invoke_iii,invoke_vii,invoke_viiii,mcGetWorldResult:_mcGetWorldResult,mcGetWorldStatus:_mcGetWorldStatus,mcShowCreateWorldDialog:_mcShowCreateWorldDialog,mcSyncSaves:_mcSyncSaves};function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}var calledRun;function callMain(args=[]){assert(runDependencies==0,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])');assert(typeof onPreRuns==="undefined"||onPreRuns.length==0,"cannot call main when preRun functions remain to be called");var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;for(var arg of args){HEAPU32[argv_ptr>>2]=stringToUTF8OnStack(arg);argv_ptr+=4}HEAPU32[argv_ptr>>2]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(args=arguments_){if(runDependencies>0){dependenciesFulfilled=run;return}stackCheckInit();preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){assert(!calledRun);calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();Module["onRuntimeInitialized"]?.();consumedModuleProp("onRuntimeInitialized");var noInitialRun=Module["noInitialRun"]||false;if(!noInitialRun)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{_fflush(0);for(var name of["stdout","stderr"]){var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty?.output?.length){has=true}}}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.")}}var wasmExports;createWasm();run(); +(function(){function humanReadableVersionToPacked(str){str=str.split("-")[0];var vers=str.split(".").slice(0,3);while(vers.length<3)vers.push("00");vers=vers.map((n,i,arr)=>n.padStart(2,"0"));return vers.join("")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(".");var TARGET_NOT_SUPPORTED=2147483647;var currentNodeVersion=typeof process!=="undefined"&&process.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<16e4){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(16e4)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}var userAgent=typeof navigator!=="undefined"&&navigator.userAgent;if(!userAgent){return}var currentSafariVersion=userAgent.includes("Safari/")&&!userAgent.includes("Chrome/")&&userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)?humanReadableVersionToPacked(userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(!Module["expectedDataFileDownloads"])Module["expectedDataFileDownloads"]=0;Module["expectedDataFileDownloads"]++;(()=>{var isPthread=typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD;var isWasmWorker=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;if(isPthread||isWasmWorker)return;var isNode=globalThis.process&&globalThis.process.versions&&globalThis.process.versions.node&&globalThis.process.type!="renderer";async function loadPackage(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/")}var PACKAGE_NAME="index.data";var REMOTE_PACKAGE_BASE="index.data";var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];async function fetchRemotePackage(packageName,packageSize){if(isNode){var contents=require("fs").readFileSync(packageName);return new Uint8Array(contents).buffer}if(!Module["dataFileDownloads"])Module["dataFileDownloads"]={};try{var response=await fetch(packageName)}catch(e){throw new Error(`Network Error: ${packageName}`,{e})}if(!response.ok){throw new Error(`${response.status}: ${response.url}`)}const chunks=[];const headers=response.headers;const total=Number(headers.get("Content-Length")||packageSize);let loaded=0;Module["setStatus"]&&Module["setStatus"]("Downloading data...");const reader=response.body.getReader();while(1){var{done,value}=await reader.read();if(done)break;chunks.push(value);loaded+=value.length;Module["dataFileDownloads"][packageName]={loaded,total};let totalLoaded=0;let totalSize=0;for(const download of Object.values(Module["dataFileDownloads"])){totalLoaded+=download.loaded;totalSize+=download.total}Module["setStatus"]&&Module["setStatus"](`Downloading data... (${totalLoaded}/${totalSize})`)}const packageData=new Uint8Array(chunks.map(c=>c.length).reduce((a,b)=>a+b,0));let offset=0;for(const chunk of chunks){packageData.set(chunk,offset);offset+=chunk.length}return packageData.buffer}var fetchPromise;var fetched=Module["getPreloadedPackage"]&&Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE);if(!fetched){fetchPromise=fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE)}async function runWithFS(Module){function assert(check,msg){if(!check)throw new Error(msg)}Module["FS_createPath"]("/","data",true,true);Module["FS_createPath"]("/data","app",true,true);Module["FS_createPath"]("/data/app","ios",true,true);Module["FS_createPath"]("/data/app/ios","dialog",true,true);Module["FS_createPath"]("/data/app/ios/dialog","ipad",true,true);Module["FS_createPath"]("/data/app/ios","dialog2",true,true);Module["FS_createPath"]("/data/app/ios","icons",true,true);Module["FS_createPath"]("/data/app","launch",true,true);Module["FS_createPath"]("/data","fonts",true,true);Module["FS_createPath"]("/data","images",true,true);Module["FS_createPath"]("/data/images","armor",true,true);Module["FS_createPath"]("/data/images","art",true,true);Module["FS_createPath"]("/data/images","environment",true,true);Module["FS_createPath"]("/data/images","font",true,true);Module["FS_createPath"]("/data/images","gui",true,true);Module["FS_createPath"]("/data/images/gui","badge",true,true);Module["FS_createPath"]("/data/images/gui","logo",true,true);Module["FS_createPath"]("/data/images","item",true,true);Module["FS_createPath"]("/data/images","mob",true,true);Module["FS_createPath"]("/data","lang",true,true);Module["FS_createPath"]("/data","sound",true,true);Module["FS_createPath"]("/data/sound","aac",true,true);Module["FS_createPath"]("/data/sound/aac","damage",true,true);Module["FS_createPath"]("/data/sound/aac","mob",true,true);Module["FS_createPath"]("/data/sound/aac","random",true,true);Module["FS_createPath"]("/data/sound/aac","step",true,true);for(var file of metadata["files"]){var name=file["filename"];Module["addRunDependency"](`fp ${name}`)}async function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer.constructor.name===ArrayBuffer.name,"bad input to processPackageData "+arrayBuffer.constructor.name);var byteArray=new Uint8Array(arrayBuffer);for(var file of metadata["files"]){var name=file["filename"];var data=byteArray.subarray(file["start"],file["end"]);Module["FS_createDataFile"](name,null,data,true,true,true);Module["removeRunDependency"](`fp ${name}`)}Module["removeRunDependency"]("datafile_index.data")}Module["addRunDependency"]("datafile_index.data");if(!Module["preloadResults"])Module["preloadResults"]={};Module["preloadResults"][PACKAGE_NAME]={fromCache:false};if(!fetched){fetched=await fetchPromise}processPackageData(fetched)}if(Module["calledRun"]){runWithFS(Module)}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}}loadPackage({files:[{filename:"/data/.DS_Store",start:0,end:14340},{filename:"/data/app/.DS_Store",start:14340,end:24584},{filename:"/data/app/ios/bg128.png",start:24584,end:26300},{filename:"/data/app/ios/bg64.png",start:26300,end:27045},{filename:"/data/app/ios/dialog/cancel_0.png",start:27045,end:28929},{filename:"/data/app/ios/dialog/cancel_0_1.png",start:28929,end:29566},{filename:"/data/app/ios/dialog/cancel_0_3.png",start:29566,end:30490},{filename:"/data/app/ios/dialog/cancel_1.png",start:30490,end:32433},{filename:"/data/app/ios/dialog/cancel_1_1.png",start:32433,end:33106},{filename:"/data/app/ios/dialog/cancel_1_3.png",start:33106,end:34078},{filename:"/data/app/ios/dialog/create_0.png",start:34078,end:36012},{filename:"/data/app/ios/dialog/create_0_1.png",start:36012,end:36664},{filename:"/data/app/ios/dialog/create_0_3.png",start:36664,end:37604},{filename:"/data/app/ios/dialog/create_1.png",start:37604,end:39600},{filename:"/data/app/ios/dialog/create_1_1.png",start:39600,end:40301},{filename:"/data/app/ios/dialog/create_1_3.png",start:40301,end:41313},{filename:"/data/app/ios/dialog/ipad/cancel_0_4.png",start:41313,end:42336},{filename:"/data/app/ios/dialog/ipad/cancel_1_4.png",start:42336,end:43391},{filename:"/data/app/ios/dialog/ipad/create_0_4.png",start:43391,end:44476},{filename:"/data/app/ios/dialog/ipad/create_1_4.png",start:44476,end:45606},{filename:"/data/app/ios/dialog/ipad/creative_0_4.png",start:45606,end:46776},{filename:"/data/app/ios/dialog/ipad/creative_1_4.png",start:46776,end:49453},{filename:"/data/app/ios/dialog/ipad/creative_3_4.png",start:49453,end:52042},{filename:"/data/app/ios/dialog/ipad/survival_0_4.png",start:52042,end:53174},{filename:"/data/app/ios/dialog/ipad/survival_1_4.png",start:53174,end:55763},{filename:"/data/app/ios/dialog/ipad/survival_3_4.png",start:55763,end:58264},{filename:"/data/app/ios/dialog/ipad/worldname_ipad_4.png",start:58264,end:59195},{filename:"/data/app/ios/dialog/save_0.png",start:59195,end:61016},{filename:"/data/app/ios/dialog/save_0_3.png",start:61016,end:62351},{filename:"/data/app/ios/dialog/save_1.png",start:62351,end:64232},{filename:"/data/app/ios/dialog/save_1_3.png",start:64232,end:65621},{filename:"/data/app/ios/dialog/worldname_ipad.png",start:65621,end:66160},{filename:"/data/app/ios/dialog/worldname_ipad_3.png",start:66160,end:67806},{filename:"/data/app/ios/dialog/worldname_iphone.png",start:67806,end:68327},{filename:"/data/app/ios/dialog/worldname_iphone_3.png",start:68327,end:69863},{filename:"/data/app/ios/dialog2/cancel_0_1.png",start:69863,end:70475},{filename:"/data/app/ios/dialog2/cancel_0_3.png",start:70475,end:73754},{filename:"/data/app/ios/dialog2/cancel_1_1.png",start:73754,end:74386},{filename:"/data/app/ios/dialog2/cancel_1_3.png",start:74386,end:77722},{filename:"/data/app/ios/dialog2/create_0_1.png",start:77722,end:78352},{filename:"/data/app/ios/dialog2/create_0_3.png",start:78352,end:81657},{filename:"/data/app/ios/dialog2/create_1_1.png",start:81657,end:82306},{filename:"/data/app/ios/dialog2/create_1_3.png",start:82306,end:85662},{filename:"/data/app/ios/dialog2/creative_0_3.png",start:85662,end:89044},{filename:"/data/app/ios/dialog2/creative_1_3.png",start:89044,end:92470},{filename:"/data/app/ios/dialog2/survival_0_3.png",start:92470,end:95828},{filename:"/data/app/ios/dialog2/survival_1_3.png",start:95828,end:99237},{filename:"/data/app/ios/dialog2/worldname.png",start:99237,end:99826},{filename:"/data/app/ios/dialog2/worldname_3.png",start:99826,end:101669},{filename:"/data/app/ios/dialog2/worldname_ipad.png",start:101669,end:102208},{filename:"/data/app/ios/dialog2/worldname_ipad_3.png",start:102208,end:103854},{filename:"/data/app/ios/dialog2/worldname_iphone.png",start:103854,end:106920},{filename:"/data/app/ios/dialog2/worldname_iphone5_3.png",start:106920,end:110143},{filename:"/data/app/ios/dialog2/worldname_iphone_3.png",start:110143,end:113331},{filename:"/data/app/ios/icons/Icon-72.png",start:113331,end:125786},{filename:"/data/app/ios/icons/Icon-72_lite.png",start:125786,end:139006},{filename:"/data/app/ios/icons/Icon-Small-50.png",start:139006,end:147395},{filename:"/data/app/ios/icons/Icon-Small-50_lite.png",start:147395,end:156101},{filename:"/data/app/ios/icons/Icon-Small.png",start:156101,end:161103},{filename:"/data/app/ios/icons/Icon-Small@2x.png",start:161103,end:170855},{filename:"/data/app/ios/icons/Icon-Small@2x_lite.png",start:170855,end:181085},{filename:"/data/app/ios/icons/Icon-Small_lite.png",start:181085,end:186162},{filename:"/data/app/ios/icons/Icon.png",start:186162,end:195743},{filename:"/data/app/ios/icons/Icon@2x.png",start:195743,end:216449},{filename:"/data/app/ios/icons/Icon@2x_lite.png",start:216449,end:239100},{filename:"/data/app/ios/icons/Icon_lite.png",start:239100,end:249138},{filename:"/data/app/ios/icons/mcpe_ios_icon.png",start:249138,end:326889},{filename:"/data/app/ios/icons/mcpe_lite_ios_icon.png",start:326889,end:419849},{filename:"/data/app/launch/Default-Landscape~ipad.png",start:419849,end:487606},{filename:"/data/app/launch/Default.png",start:487606,end:507878},{filename:"/data/app/launch/Default@2x.png",start:507878,end:576450},{filename:"/data/fonts/minecraft.ttf",start:576450,end:594126},{filename:"/data/images/armor/chain_1.png",start:594126,end:595090},{filename:"/data/images/armor/chain_2.png",start:595090,end:595613},{filename:"/data/images/armor/cloth_1.png",start:595613,end:596752},{filename:"/data/images/armor/cloth_2.png",start:596752,end:597462},{filename:"/data/images/armor/diamond_1.png",start:597462,end:598680},{filename:"/data/images/armor/diamond_2.png",start:598680,end:599404},{filename:"/data/images/armor/gold_1.png",start:599404,end:600602},{filename:"/data/images/armor/gold_2.png",start:600602,end:601310},{filename:"/data/images/armor/iron_1.png",start:601310,end:602443},{filename:"/data/images/armor/iron_2.png",start:602443,end:603129},{filename:"/data/images/art/kz.png",start:603129,end:688716},{filename:"/data/images/environment/clouds.png",start:688716,end:702428},{filename:"/data/images/font/default8.png",start:702428,end:704579},{filename:"/data/images/gui/background.png",start:704579,end:704947},{filename:"/data/images/gui/badge/minecon140.png",start:704947,end:708051},{filename:"/data/images/gui/bg32.png",start:708051,end:708559},{filename:"/data/images/gui/cursor.png",start:708559,end:708840},{filename:"/data/images/gui/default_world.png",start:708840,end:734078},{filename:"/data/images/gui/gui.png",start:734078,end:757630},{filename:"/data/images/gui/gui2.png",start:757630,end:771514},{filename:"/data/images/gui/gui_blocks.png",start:771514,end:949518},{filename:"/data/images/gui/icons.png",start:949518,end:951958},{filename:"/data/images/gui/itemframe.png",start:951958,end:957198},{filename:"/data/images/gui/items.png",start:957198,end:986953},{filename:"/data/images/gui/logo/raknet_high_72.png",start:986953,end:1008342},{filename:"/data/images/gui/logo/raknet_low_18.png",start:1008342,end:1010185},{filename:"/data/images/gui/pi_title.png",start:1010185,end:1016956},{filename:"/data/images/gui/spritesheet.png",start:1016956,end:1028558},{filename:"/data/images/gui/title.png",start:1028558,end:1034363},{filename:"/data/images/gui/touchgui.png",start:1034363,end:1054072},{filename:"/data/images/item/arrows.png",start:1054072,end:1054394},{filename:"/data/images/item/camera.png",start:1054394,end:1055076},{filename:"/data/images/item/sign.png",start:1055076,end:1056336},{filename:"/data/images/mob/char.png",start:1056336,end:1057696},{filename:"/data/images/mob/chicken.png",start:1057696,end:1058188},{filename:"/data/images/mob/cow.png",start:1058188,end:1059566},{filename:"/data/images/mob/creeper.png",start:1059566,end:1062566},{filename:"/data/images/mob/pig.png",start:1062566,end:1065871},{filename:"/data/images/mob/pigzombie.png",start:1065871,end:1068904},{filename:"/data/images/mob/sheep.png",start:1068904,end:1071346},{filename:"/data/images/mob/sheep_fur.png",start:1071346,end:1072997},{filename:"/data/images/mob/skeleton.png",start:1072997,end:1073891},{filename:"/data/images/mob/spider.png",start:1073891,end:1076445},{filename:"/data/images/mob/zombie.png",start:1076445,end:1077760},{filename:"/data/images/particles.png",start:1077760,end:1079673},{filename:"/data/images/terrain.png",start:1079673,end:1171271},{filename:"/data/images/terrain.pvr",start:1171271,end:1204091},{filename:"/data/images/terrain.pvr4",start:1204091,end:1236911},{filename:"/data/images/terrain.pvrtc",start:1236911,end:1269731},{filename:"/data/images/terrain_4444.h",start:1269731,end:1631903},{filename:"/data/images/terrain_5551.h",start:1631903,end:1994075},{filename:"/data/images/terrain_565.h",start:1994075,end:2356246},{filename:"/data/images/terrain_565_2.h",start:2356246,end:2718419},{filename:"/data/lang/en_US.lang",start:2718419,end:2756216},{filename:"/data/sound/.DS_Store",start:2756216,end:2764412},{filename:"/data/sound/aac/damage/fallbig1.m4a",start:2764412,end:2771329},{filename:"/data/sound/aac/damage/fallbig2.m4a",start:2771329,end:2777145},{filename:"/data/sound/aac/damage/fallsmall.m4a",start:2777145,end:2781964},{filename:"/data/sound/aac/mob/chicken1.m4a",start:2781964,end:2787979},{filename:"/data/sound/aac/mob/chicken2.m4a",start:2787979,end:2795373},{filename:"/data/sound/aac/mob/chicken3.m4a",start:2795373,end:2800546},{filename:"/data/sound/aac/mob/chickenhurt1.m4a",start:2800546,end:2806365},{filename:"/data/sound/aac/mob/chickenhurt2.m4a",start:2806365,end:2810816},{filename:"/data/sound/aac/mob/chickenplop.m4a",start:2810816,end:2813571},{filename:"/data/sound/aac/mob/cow1.m4a",start:2813571,end:2825845},{filename:"/data/sound/aac/mob/cow2.m4a",start:2825845,end:2838056},{filename:"/data/sound/aac/mob/cow3.m4a",start:2838056,end:2855100},{filename:"/data/sound/aac/mob/cow4.m4a",start:2855100,end:2868384},{filename:"/data/sound/aac/mob/cowhurt1.m4a",start:2868384,end:2873572},{filename:"/data/sound/aac/mob/cowhurt2.m4a",start:2873572,end:2878551},{filename:"/data/sound/aac/mob/cowhurt3.m4a",start:2878551,end:2884169},{filename:"/data/sound/aac/mob/creeper1.m4a",start:2884169,end:2888019},{filename:"/data/sound/aac/mob/creeper2.m4a",start:2888019,end:2891908},{filename:"/data/sound/aac/mob/creeper3.m4a",start:2891908,end:2895799},{filename:"/data/sound/aac/mob/creeper4.m4a",start:2895799,end:2899766},{filename:"/data/sound/aac/mob/creeperdeath.m4a",start:2899766,end:2906877},{filename:"/data/sound/aac/mob/pig1.m4a",start:2906877,end:2911148},{filename:"/data/sound/aac/mob/pig2.m4a",start:2911148,end:2916104},{filename:"/data/sound/aac/mob/pig3.m4a",start:2916104,end:2920075},{filename:"/data/sound/aac/mob/pigdeath.m4a",start:2920075,end:2926194},{filename:"/data/sound/aac/mob/sheep1.m4a",start:2926194,end:2935469},{filename:"/data/sound/aac/mob/sheep2.m4a",start:2935469,end:2943914},{filename:"/data/sound/aac/mob/sheep3.m4a",start:2943914,end:2952094},{filename:"/data/sound/aac/mob/skeleton1.m4a",start:2952094,end:2957722},{filename:"/data/sound/aac/mob/skeleton2.m4a",start:2957722,end:2962414},{filename:"/data/sound/aac/mob/skeleton3.m4a",start:2962414,end:2967551},{filename:"/data/sound/aac/mob/skeletonhurt1.m4a",start:2967551,end:2971896},{filename:"/data/sound/aac/mob/skeletonhurt2.m4a",start:2971896,end:2976535},{filename:"/data/sound/aac/mob/skeletonhurt3.m4a",start:2976535,end:2981111},{filename:"/data/sound/aac/mob/skeletonhurt4.m4a",start:2981111,end:2985796},{filename:"/data/sound/aac/mob/spider1.m4a",start:2985796,end:2991905},{filename:"/data/sound/aac/mob/spider2.m4a",start:2991905,end:2996463},{filename:"/data/sound/aac/mob/spider3.m4a",start:2996463,end:3001465},{filename:"/data/sound/aac/mob/spider4.m4a",start:3001465,end:3005617},{filename:"/data/sound/aac/mob/spiderdeath.m4a",start:3005617,end:3013255},{filename:"/data/sound/aac/mob/zombie1.m4a",start:3013255,end:3026739},{filename:"/data/sound/aac/mob/zombie2.m4a",start:3026739,end:3039205},{filename:"/data/sound/aac/mob/zombie3.m4a",start:3039205,end:3056820},{filename:"/data/sound/aac/mob/zombiedeath.m4a",start:3056820,end:3064099},{filename:"/data/sound/aac/mob/zombiehurt1.m4a",start:3064099,end:3072478},{filename:"/data/sound/aac/mob/zombiehurt2.m4a",start:3072478,end:3080793},{filename:"/data/sound/aac/mob/zpig1.m4a",start:3080793,end:3088379},{filename:"/data/sound/aac/mob/zpig2.m4a",start:3088379,end:3097330},{filename:"/data/sound/aac/mob/zpig3.m4a",start:3097330,end:3101303},{filename:"/data/sound/aac/mob/zpig4.m4a",start:3101303,end:3106511},{filename:"/data/sound/aac/mob/zpigangry1.m4a",start:3106511,end:3113819},{filename:"/data/sound/aac/mob/zpigangry2.m4a",start:3113819,end:3117737},{filename:"/data/sound/aac/mob/zpigangry3.m4a",start:3117737,end:3125714},{filename:"/data/sound/aac/mob/zpigangry4.m4a",start:3125714,end:3134754},{filename:"/data/sound/aac/mob/zpigdeath.m4a",start:3134754,end:3144308},{filename:"/data/sound/aac/mob/zpighurt1.m4a",start:3144308,end:3148941},{filename:"/data/sound/aac/mob/zpighurt2.m4a",start:3148941,end:3153231},{filename:"/data/sound/aac/random/bow.m4a",start:3153231,end:3157233},{filename:"/data/sound/aac/random/bowhit1.m4a",start:3157233,end:3164586},{filename:"/data/sound/aac/random/bowhit2.m4a",start:3164586,end:3171317},{filename:"/data/sound/aac/random/bowhit3.m4a",start:3171317,end:3179607},{filename:"/data/sound/aac/random/bowhit4.m4a",start:3179607,end:3189674},{filename:"/data/sound/aac/random/click.m4a",start:3189674,end:3193876},{filename:"/data/sound/aac/random/door_close.m4a",start:3193876,end:3198112},{filename:"/data/sound/aac/random/door_open.m4a",start:3198112,end:3203054},{filename:"/data/sound/aac/random/eat1.m4a",start:3203054,end:3205946},{filename:"/data/sound/aac/random/eat2.m4a",start:3205946,end:3208969},{filename:"/data/sound/aac/random/eat3.m4a",start:3208969,end:3211916},{filename:"/data/sound/aac/random/explode.m4a",start:3211916,end:3217471},{filename:"/data/sound/aac/random/fuse.m4a",start:3217471,end:3231623},{filename:"/data/sound/aac/random/glass1.m4a",start:3231623,end:3238357},{filename:"/data/sound/aac/random/glass2.m4a",start:3238357,end:3244964},{filename:"/data/sound/aac/random/glass3.m4a",start:3244964,end:3251178},{filename:"/data/sound/aac/random/hurt.m4a",start:3251178,end:3259614},{filename:"/data/sound/aac/random/pop.m4a",start:3259614,end:3261709},{filename:"/data/sound/aac/random/splash.m4a",start:3261709,end:3267225},{filename:"/data/sound/aac/random/water.m4a",start:3267225,end:3289388},{filename:"/data/sound/aac/step/cloth1.m4a",start:3289388,end:3292423},{filename:"/data/sound/aac/step/cloth2.m4a",start:3292423,end:3295474},{filename:"/data/sound/aac/step/cloth3.m4a",start:3295474,end:3298585},{filename:"/data/sound/aac/step/cloth4.m4a",start:3298585,end:3301629},{filename:"/data/sound/aac/step/grass1.m4a",start:3301629,end:3306302},{filename:"/data/sound/aac/step/grass2.m4a",start:3306302,end:3311611},{filename:"/data/sound/aac/step/grass3.m4a",start:3311611,end:3316428},{filename:"/data/sound/aac/step/grass4.m4a",start:3316428,end:3321286},{filename:"/data/sound/aac/step/gravel2.m4a",start:3321286,end:3326853},{filename:"/data/sound/aac/step/gravel3.m4a",start:3326853,end:3332192},{filename:"/data/sound/aac/step/gravel4.m4a",start:3332192,end:3337716},{filename:"/data/sound/aac/step/ladder1.m4a",start:3337716,end:3341741},{filename:"/data/sound/aac/step/ladder2.m4a",start:3341741,end:3345771},{filename:"/data/sound/aac/step/ladder3.m4a",start:3345771,end:3350022},{filename:"/data/sound/aac/step/ladder4.m4a",start:3350022,end:3354033},{filename:"/data/sound/aac/step/sand1.m4a",start:3354033,end:3357372},{filename:"/data/sound/aac/step/sand2.m4a",start:3357372,end:3360260},{filename:"/data/sound/aac/step/sand3.m4a",start:3360260,end:3363432},{filename:"/data/sound/aac/step/sand4.m4a",start:3363432,end:3366752},{filename:"/data/sound/aac/step/snow1.m4a",start:3366752,end:3371137},{filename:"/data/sound/aac/step/snow2.m4a",start:3371137,end:3375747},{filename:"/data/sound/aac/step/snow3.m4a",start:3375747,end:3380433},{filename:"/data/sound/aac/step/snow4.m4a",start:3380433,end:3384864},{filename:"/data/sound/aac/step/stone1.m4a",start:3384864,end:3390935},{filename:"/data/sound/aac/step/stone2.m4a",start:3390935,end:3396074},{filename:"/data/sound/aac/step/stone3.m4a",start:3396074,end:3400648},{filename:"/data/sound/aac/step/stone4.m4a",start:3400648,end:3406155},{filename:"/data/sound/aac/step/wood1.m4a",start:3406155,end:3412657},{filename:"/data/sound/aac/step/wood2.m4a",start:3412657,end:3420117},{filename:"/data/sound/aac/step/wood3.m4a",start:3420117,end:3427275},{filename:"/data/sound/aac/step/wood4.m4a",start:3427275,end:3434908}],remote_package_size:3434908})})();if(typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER||typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD||typeof ENVIRONMENT_IS_AUDIO_WORKLET!="undefined"&&ENVIRONMENT_IS_AUDIO_WORKLET)Module["preRun"]=[];var necessaryPreJSTasks=Module["preRun"].slice();if(!Module["preRun"])throw"Module.preRun should exist because file support used it; did a pre-js delete it?";necessaryPreJSTasks.forEach(task=>{if(Module["preRun"].indexOf(task)<0)throw"All preRun tasks that exist before user pre-js code should remain after; did you replace Module or modify Module.preRun?"});var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=globalThis.document?.currentScript?.src;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(!isNode)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var fs=require("node:fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");assert(binary?Buffer.isBuffer(ret):typeof ret=="string");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}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{throw new Error("environment detection error")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary;if(!globalThis.WebAssembly){err("no native wasm support detected")}var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var isFileURI=filename=>filename.startsWith("file://");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=34821223;checkInt32(34821223);HEAPU32[max+4>>2]=2310721022;checkInt32(2310721022);HEAPU32[0>>2]=1668509029;checkInt32(1668509029)}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}var runtimeDebug=true;function dbg(...args){if(!runtimeDebug&&typeof runtimeDebug!="undefined")return;console.warn(...args)}(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function consumedModuleProp(prop){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,set(){abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_preloadFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function hookGlobalSymbolAccess(sym,func){if(!Object.getOwnPropertyDescriptor(globalThis,sym)){Object.defineProperty(globalThis,sym,{configurable:true,get(){func();return undefined}})}}function missingGlobal(sym,msg){hookGlobalSymbolAccess(sym,()=>{warnOnce(`\`${sym}\` is no longer defined by emscripten. ${msg}`)})}missingGlobal("buffer","Please use HEAP8.buffer or wasmMemory.buffer");missingGlobal("asm","Please use wasmExports instead");function missingLibrarySymbol(sym){hookGlobalSymbolAccess(sym,()=>{var msg=`\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;var librarySymbol=sym;if(!librarySymbol.startsWith("_")){librarySymbol="$"+sym}msg+=` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}warnOnce(msg)});unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var MAX_UINT8=2**8-1;var MAX_UINT16=2**16-1;var MAX_UINT32=2**32-1;var MAX_UINT53=2**53-1;var MAX_UINT64=2**64-1;var MIN_INT8=-(2**(8-1));var MIN_INT16=-(2**(16-1));var MIN_INT32=-(2**(32-1));var MIN_INT53=-(2**(53-1));var MIN_INT64=-(2**(64-1));function checkInt(value,bits,min,max){assert(Number.isInteger(Number(value)),`attempt to write non-integer (${value}) into integer heap`);assert(value<=max,`value (${value}) too large to write as ${bits}-bit value`);assert(value>=min,`value (${value}) too small to write as ${bits}-bit value`)}var checkInt8=value=>checkInt(value,8,MIN_INT8,MAX_UINT8);var checkInt16=value=>checkInt(value,16,MIN_INT16,MAX_UINT16);var checkInt32=value=>checkInt(value,32,MIN_INT32,MAX_UINT32);var checkInt64=value=>checkInt(value,64,MIN_INT64,MAX_UINT64);var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}consumedModuleProp("preRun");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;setStackLimits();checkStackCookie();SOCKFS.root=FS.mount(SOCKFS,{},null);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function preMain(){checkStackCookie()}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}consumedModuleProp("postRun");callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);throw e}function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}var wasmBinaryFile;function findWasmBinary(){return locateFile("index.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{try{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);reject(e)}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var runDependencies=0;var dependenciesFulfilled=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"removeRunDependency requires an ID");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"addRunDependency requires an ID");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{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)")}},1e4);runDependencyWatcher.unref?.()}};var noExitRuntime=true;var ptrToString=ptr=>{assert(typeof ptr==="number",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var setStackLimits=()=>{var stackLow=_emscripten_stack_get_base();var stackHigh=_emscripten_stack_get_end();___set_stack_limits(stackLow,stackHigh)};function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;checkInt8(value);break;case"i8":HEAP8[ptr]=value;checkInt8(value);break;case"i16":HEAP16[ptr>>1]=value;checkInt16(value);break;case"i32":HEAP32[ptr>>2]=value;checkInt32(value);break;case"i64":HEAP64[ptr>>3]=BigInt(value);checkInt64(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught;checkInt8(caught)}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown;checkInt8(rethrown)}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var ___handle_stack_overflow=requested=>{var base=_emscripten_stack_get_base();var end=_emscripten_stack_get_end();abort(`stack overflow (Attempt to set SP to ${ptrToString(requested)}`+`, with stack limits [${ptrToString(end)} - ${ptrToString(base)}`+"]). If you require more stack space build with -sSTACK_SIZE=")};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var IDBFS={dbs:{},indexedDB:()=>{assert(typeof indexedDB!="undefined","IDBFS used, but indexedDB not supported");return indexedDB},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",queuePersist:mount=>{function onPersistComplete(){if(mount.idbPersistState==="again")startPersist();else mount.idbPersistState=0}function startPersist(){mount.idbPersistState="idb";IDBFS.syncfs(mount,false,onPersistComplete)}if(!mount.idbPersistState){mount.idbPersistState=setTimeout(startPersist,0)}else if(mount.idbPersistState==="idb"){mount.idbPersistState="again"}},mount:mount=>{var mnt=MEMFS.mount(mount);if(mount?.opts?.autoPersist){mount.idbPersistState=0;var memfs_node_ops=mnt.node_ops;mnt.node_ops={...mnt.node_ops};mnt.node_ops.mknod=(parent,name,mode,dev)=>{var node=memfs_node_ops.mknod(parent,name,mode,dev);node.node_ops=mnt.node_ops;node.idbfs_mount=mnt.mount;node.memfs_stream_ops=node.stream_ops;node.stream_ops={...node.stream_ops};node.stream_ops.write=(stream,buffer,offset,length,position,canOwn)=>{stream.node.isModified=true;return node.memfs_stream_ops.write(stream,buffer,offset,length,position,canOwn)};node.stream_ops.close=stream=>{var n=stream.node;if(n.isModified){IDBFS.queuePersist(n.idbfs_mount);n.isModified=false}if(n.memfs_stream_ops.close)return n.memfs_stream_ops.close(stream)};IDBFS.queuePersist(mnt.mount);return node};mnt.node_ops.rmdir=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rmdir(...args));mnt.node_ops.symlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.symlink(...args));mnt.node_ops.unlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.unlink(...args));mnt.node_ops.rename=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rename(...args))}return mnt},syncfs:(mount,populate,callback)=>{IDBFS.getLocalSet(mount,(err,local)=>{if(err)return callback(err);IDBFS.getRemoteSet(mount,(err,remote)=>{if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},quit:()=>{for(var value of Object.values(IDBFS.dbs)){value.close()}IDBFS.dbs={}},getDB:(name,callback)=>{var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=e=>{var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=()=>{db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=e=>{callback(e.target.error);e.preventDefault()}},getLocalSet:(mount,callback)=>{var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return p=>PATH.join2(root,p)}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push(...FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries})},getRemoteSet:(mount,callback)=>{var entries={};IDBFS.getDB(mount.mountpoint,(err,db)=>{if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=e=>{callback(e.target.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=event=>{var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db,entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:(path,callback)=>{var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:(path,entry,callback)=>{try{if(FS.isDir(entry["mode"])){FS.mkdirTree(path,entry["mode"])}else if(FS.isFile(entry["mode"])){FS.writeFile(path,entry["contents"],{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry["mode"]);FS.utime(path,entry["timestamp"],entry["timestamp"])}catch(e){return callback(e)}callback(null)},removeLocalEntry:(path,callback)=>{try{var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:(store,path,callback)=>{var req=store.get(path);req.onsuccess=event=>callback(null,event.target.result);req.onerror=e=>{callback(e.target.error);e.preventDefault()}},storeRemoteEntry:(store,path,entry,callback)=>{try{var req=store.put(entry,path)}catch(e){callback(e);return}req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},removeRemoteEntry:(store,path,callback)=>{var req=store.delete(path);req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},reconcile:(src,dst,callback)=>{var total=0;var create=[];for(var[key,e]of Object.entries(src.entries)){var e2=dst.entries[key];if(!e2||e["timestamp"].getTime()!=e2["timestamp"].getTime()){create.push(key);total++}}var remove=[];for(var key of Object.keys(dst.entries)){if(!src.entries[key]){remove.push(key);total++}}if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=transaction.onabort=e=>{done(e.target.error);e.preventDefault()};transaction.oncomplete=e=>{if(!errored){callback(null)}};for(const path of create.sort()){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(err,entry)=>{if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,(err,entry)=>{if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}}for(var path of remove.sort().reverse()){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}}};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){assert(plugin["handle"].constructor.name==="AsyncFunction","Filesystem plugin handlers must be async functions (See #24914)");return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class extends Error{name="ErrnoError";constructor(errno){super(runtimeInitialized?strError(errno):"");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}if(perms.includes("w")&&!(node.mode&146)){return 2}if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else if(FS.isDir(node.mode)){return 31}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(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,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS,IDBFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;var handleOpen=function(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,isBinary){if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){SOCKFS.emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){SOCKFS.emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;checkInt32(bytes);return 0;case 21537:var on=HEAP32[arg>>2];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",function(ws){if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",function(){SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",function(error){sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;wHEAPU8.fill(0,ptr,ptr+size);var writeSockaddr=(sa,family,addr,port,addrlen)=>{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16;checkInt32(16)}HEAP16[sa>>1]=family;checkInt16(family);HEAP32[sa+4>>2]=addr;checkInt32(addr);HEAP16[sa+2>>1]=_htons(port);checkInt16(_htons(port));break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28;checkInt32(28)}HEAP32[sa>>2]=family;checkInt32(family);HEAP32[sa+8>>2]=addr[0];checkInt32(addr[0]);HEAP32[sa+12>>2]=addr[1];checkInt32(addr[1]);HEAP32[sa+16>>2]=addr[2];checkInt32(addr[2]);HEAP32[sa+20>>2]=addr[3];checkInt32(addr[3]);HEAP16[sa+2>>1]=_htons(port);checkInt16(_htons(port));break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,"exceeded max address mappings of 65535");addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen);assert(!errno)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var SYSCALLS={calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;checkInt32(stat.dev);HEAPU32[buf+4>>2]=stat.mode;checkInt32(stat.mode);HEAPU32[buf+8>>2]=stat.nlink;checkInt32(stat.nlink);HEAPU32[buf+12>>2]=stat.uid;checkInt32(stat.uid);HEAPU32[buf+16>>2]=stat.gid;checkInt32(stat.gid);HEAPU32[buf+20>>2]=stat.rdev;checkInt32(stat.rdev);HEAP64[buf+24>>3]=BigInt(stat.size);checkInt64(stat.size);HEAP32[buf+32>>2]=4096;checkInt32(4096);HEAP32[buf+36>>2]=stat.blocks;checkInt32(stat.blocks);var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));checkInt64(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;checkInt32(atime%1e3*1e3*1e3);HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));checkInt64(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;checkInt32(mtime%1e3*1e3*1e3);HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));checkInt64(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;checkInt32(ctime%1e3*1e3*1e3);HEAP64[buf+88>>3]=BigInt(stat.ino);checkInt64(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;checkInt32(stats.bsize);HEAPU32[buf+60>>2]=stats.bsize;checkInt32(stats.bsize);HEAP64[buf+8>>3]=BigInt(stats.blocks);checkInt64(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);checkInt64(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);checkInt64(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);checkInt64(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);checkInt64(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;checkInt32(stats.fsid);HEAPU32[buf+64>>2]=stats.flags;checkInt32(stats.flags);HEAPU32[buf+56>>2]=stats.namelen;checkInt32(stats.namelen)},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);assert(!flags||flags==512);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;checkInt16(2);return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{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 ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var startIdx=Math.floor(off/struct_size);var endIdx=Math.min(stream.getdents.length,startIdx+Math.floor(count/struct_size));for(var idx=startIdx;idx>3]=BigInt(id);checkInt64(id);HEAP64[dirp+pos+8>>3]=BigInt((idx+1)*struct_size);checkInt64((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;checkInt16(280);HEAP8[dirp+pos+18]=type;checkInt8(type);stringToUTF8(name,dirp+pos+19,256);pos+=struct_size}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getsockname(fd,addr,addrlen,d1,d2,d3){try{var sock=getSocketFromFD(fd);var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);assert(!errno);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_getsockopt(fd,level,optname,optval,optlen,d1){try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;checkInt32(sock.error);HEAP32[optlen>>2]=4;checkInt32(4);sock.error=null;return 0}}return-50}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;checkInt32(termios.c_iflag||0);HEAP32[argp+4>>2]=termios.c_oflag||0;checkInt32(termios.c_oflag||0);HEAP32[argp+8>>2]=termios.c_cflag||0;checkInt32(termios.c_cflag||0);HEAP32[argp+12>>2]=termios.c_lflag||0;checkInt32(termios.c_lflag||0);for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0;checkInt8(termios.c_cc[i]||0)}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;checkInt32(0);return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];checkInt16(winsize[0]);HEAP16[argp+2>>1]=winsize[1];checkInt16(winsize[1])}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;assert(!flags,`unknown flags in __syscall_newfstatat: ${flags}`);path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen);assert(!errno)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_sendto(fd,message,length,flags,addr,addr_len){try{var sock=getSocketFromFD(fd);if(!addr){return FS.write(sock.stream,HEAP8,message,length)}var dest=getSocketAddress(addr,addr_len);return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);assert(sock.stream.fd<64);return sock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(!flags){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("native code called abort()");var __emscripten_lookup_name=name=>{var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))};var __emscripten_throw_longjmp=()=>{throw Infinity};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);checkInt32(Number(winterOffset!=summerOffset));var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffset{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func){err("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(!MainLoop.running){MainLoop.running=true}if(mode==0){MainLoop.scheduler=function MainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)}}else if(mode==1){MainLoop.scheduler=function MainLoop_scheduler_rAF(){MainLoop.requestAnimationFrame(MainLoop.runner)}}else{assert(mode==2);if(!MainLoop.setImmediate){if(globalThis.setImmediate){MainLoop.setImmediate=setImmediate}else{var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var MainLoop_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",MainLoop_setImmediate_messageHandler,true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}}MainLoop.scheduler=function MainLoop_scheduler_setImmediate(){MainLoop.setImmediate(MainLoop.runner)}}return 0};var _emscripten_get_now=()=>performance.now();var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=`program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;err(msg)}_proc_exit(status)};var _exit=exitJS;var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}checkStackCookie();if(e instanceof WebAssembly.RuntimeError){if(_emscripten_stack_get_current()<=0){err("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)")}}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{assert(!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.");MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){MainLoop.remainingBlockers=next}else{next=next+.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0){MainLoop.tickStartTime=_emscripten_get_now();if(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!")}}MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}MainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var callUserCallback=func=>{if(ABORT){err("user callback triggered after runtime exited or application aborted. Ignoring.");return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};var MainLoop={running:false,scheduler:null,currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining){if(remaining=MainLoop.nextRAF){MainLoop.nextRAF+=1e3/60}}var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(globalThis.requestAnimationFrame){requestAnimationFrame(func)}else{MainLoop.fakeRequestAnimationFrame(func)}}};var AL={QUEUE_INTERVAL:25,QUEUE_LOOKAHEAD:.1,DEVICE_NAME:"Emscripten OpenAL",CAPTURE_DEVICE_NAME:"Emscripten OpenAL capture",ALC_EXTENSIONS:{ALC_EXT_capture:true,ALC_SOFT_pause_device:true,ALC_SOFT_HRTF:true},AL_EXTENSIONS:{AL_EXT_float32:true,AL_SOFT_loop_points:true,AL_SOFT_source_length:true,AL_EXT_source_distance_model:true,AL_SOFT_source_spatialize:true},_alcErr:0,alcErr:0,deviceRefCounts:{},alcStringCache:{},paused:false,stringCache:{},contexts:{},currentCtx:null,buffers:{0:{id:0,refCount:0,audioBuf:null,frequency:0,bytesPerSample:2,channels:1,length:0}},paramArray:[],_nextId:1,newId:()=>AL.freeIds.length>0?AL.freeIds.pop():AL._nextId++,freeIds:[],scheduleContextAudio:ctx=>{if(MainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}for(var i in ctx.sources){AL.scheduleSourceAudio(ctx.sources[i])}},scheduleSourceAudio:(src,lookahead)=>{if(MainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}if(src.state!==4114){return}var currentTime=AL.updateSourceTime(src);var startTime=src.bufStartTime;var startOffset=src.bufOffset;var bufCursor=src.bufsProcessed;for(var i=0;i=src.bufQueue.length){if(src.looping){bufCursor%=src.bufQueue.length}else{break}}var buf=src.bufQueue[bufCursor%src.bufQueue.length];if(buf.length===0){skipCount++;if(skipCount===src.bufQueue.length){break}}else{var audioSrc=src.context.audioCtx.createBufferSource();audioSrc.buffer=buf.audioBuf;audioSrc.playbackRate.value=src.playbackRate;if(buf.audioBuf._loopStart||buf.audioBuf._loopEnd){audioSrc.loopStart=buf.audioBuf._loopStart;audioSrc.loopEnd=buf.audioBuf._loopEnd}var duration=0;if(src.type===4136&&src.looping){duration=Number.POSITIVE_INFINITY;audioSrc.loop=true;if(buf.audioBuf._loopStart){audioSrc.loopStart=buf.audioBuf._loopStart}if(buf.audioBuf._loopEnd){audioSrc.loopEnd=buf.audioBuf._loopEnd}}else{duration=(buf.audioBuf.duration-startOffset)/src.playbackRate}audioSrc._startOffset=startOffset;audioSrc._duration=duration;audioSrc._skipCount=skipCount;skipCount=0;audioSrc.connect(src.gain);if(typeof audioSrc.start!="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.start(startTime,startOffset)}else if(typeof audioSrc.noteOn!="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.noteOn(startTime)}audioSrc._startTime=startTime;src.audioQueue.push(audioSrc);startTime+=duration}startOffset=0;bufCursor++}},updateSourceTime:src=>{var currentTime=src.context.audioCtx.currentTime;if(src.state!==4114){return currentTime}if(!isFinite(src.bufStartTime)){src.bufStartTime=currentTime-src.bufOffset/src.playbackRate;src.bufOffset=0}var nextStartTime=0;while(src.audioQueue.length){var audioSrc=src.audioQueue[0];src.bufsProcessed+=audioSrc._skipCount;nextStartTime=audioSrc._startTime+audioSrc._duration;if(currentTime=src.bufQueue.length&&!src.looping){AL.setSourceState(src,4116)}else if(src.type===4136&&src.looping){var buf=src.bufQueue[0];if(buf.length===0){src.bufOffset=0}else{var delta=(currentTime-src.bufStartTime)*src.playbackRate;var loopStart=buf.audioBuf._loopStart||0;var loopEnd=buf.audioBuf._loopEnd||buf.audioBuf.duration;if(loopEnd<=loopStart){loopEnd=buf.audioBuf.duration}if(delta0){src.bufStartTime+=Math.floor((currentTime-src.bufStartTime)/srcDuration)*srcDuration}}for(var i=0;i=src.bufQueue.length){if(src.looping){src.bufsProcessed%=src.bufQueue.length}else{AL.setSourceState(src,4116);break}}var buf=src.bufQueue[src.bufsProcessed];if(buf.length>0){nextStartTime=src.bufStartTime+buf.audioBuf.duration/src.playbackRate;if(currentTime{AL.updateSourceTime(src);for(var i=1;i1){src.audioQueue.length=1}},stopSourceAudio:src=>{for(var i=0;i{if(state===4114){if(src.state===4114||src.state==4116){src.bufsProcessed=0;src.bufOffset=0}else{}AL.stopSourceAudio(src);src.state=4114;src.bufStartTime=Number.NEGATIVE_INFINITY;AL.scheduleSourceAudio(src)}else if(state===4115){if(src.state===4114){AL.updateSourceTime(src);AL.stopSourceAudio(src);src.state=4115}}else if(state===4116){if(src.state!==4113){src.state=4116;src.bufsProcessed=src.bufQueue.length;src.bufStartTime=Number.NEGATIVE_INFINITY;src.bufOffset=0;AL.stopSourceAudio(src)}}else if(state===4113){if(src.state!==4113){src.state=4113;src.bufsProcessed=0;src.bufStartTime=Number.NEGATIVE_INFINITY;src.bufOffset=0;AL.stopSourceAudio(src)}}},initSourcePanner:src=>{if(src.type===4144){return}var templateBuf=AL.buffers[0];for(var i=0;i{for(var i in ctx.sources){AL.updateSourceGlobal(ctx.sources[i])}},updateSourceGlobal:src=>{var panner=src.panner;if(!panner){return}panner.refDistance=src.refDistance;panner.maxDistance=src.maxDistance;panner.rolloffFactor=src.rolloffFactor;panner.panningModel=src.context.hrtf?"HRTF":"equalpower";var distanceModel=src.context.sourceDistanceModel?src.distanceModel:src.context.distanceModel;switch(distanceModel){case 0:panner.distanceModel="inverse";panner.refDistance=340282e33;break;case 53249:case 53250:panner.distanceModel="inverse";break;case 53251:case 53252:panner.distanceModel="linear";break;case 53253:case 53254:panner.distanceModel="exponential";break}},updateListenerSpace:ctx=>{var listener=ctx.audioCtx.listener;if(listener.positionX){listener.positionX.value=ctx.listener.position[0];listener.positionY.value=ctx.listener.position[1];listener.positionZ.value=ctx.listener.position[2]}else{listener.setPosition(ctx.listener.position[0],ctx.listener.position[1],ctx.listener.position[2])}if(listener.forwardX){listener.forwardX.value=ctx.listener.direction[0];listener.forwardY.value=ctx.listener.direction[1];listener.forwardZ.value=ctx.listener.direction[2];listener.upX.value=ctx.listener.up[0];listener.upY.value=ctx.listener.up[1];listener.upZ.value=ctx.listener.up[2]}else{listener.setOrientation(ctx.listener.direction[0],ctx.listener.direction[1],ctx.listener.direction[2],ctx.listener.up[0],ctx.listener.up[1],ctx.listener.up[2])}for(var i in ctx.sources){AL.updateSourceSpace(ctx.sources[i])}},updateSourceSpace:src=>{if(!src.panner){return}var panner=src.panner;var posX=src.position[0];var posY=src.position[1];var posZ=src.position[2];var dirX=src.direction[0];var dirY=src.direction[1];var dirZ=src.direction[2];var listener=src.context.listener;var lPosX=listener.position[0];var lPosY=listener.position[1];var lPosZ=listener.position[2];if(src.relative){var lBackX=-listener.direction[0];var lBackY=-listener.direction[1];var lBackZ=-listener.direction[2];var lUpX=listener.up[0];var lUpY=listener.up[1];var lUpZ=listener.up[2];var inverseMagnitude=(x,y,z)=>{var length=Math.sqrt(x*x+y*y+z*z);if(length{if(src.state===4114){AL.cancelPendingSourceAudio(src);var audioSrc=src.audioQueue[0];if(!audioSrc){return}var duration;if(src.type===4136&&src.looping){duration=Number.POSITIVE_INFINITY}else{duration=(audioSrc.buffer.duration-audioSrc._startOffset)/src.playbackRate}audioSrc._duration=duration;audioSrc.playbackRate.value=src.playbackRate;AL.scheduleSourceAudio(src)}},sourceDuration:src=>{var length=0;for(var i=0;i{AL.updateSourceTime(src);var offset=0;for(var i=0;i{var playing=src.state==4114;if(playing){AL.setSourceState(src,4113)}if(src.bufQueue[src.bufsProcessed].audioBuf!==null){src.bufsProcessed=0;while(offset>src.bufQueue[src.bufsProcessed].audioBuf.duration){offset-=src.bufQueue[src.bufsProcessed].audioBuf.duration;src.bufsProcessed++}src.bufOffset=offset}if(playing){AL.setSourceState(src,4114)}},getGlobalParam:(funcname,param)=>{if(!AL.currentCtx){return null}switch(param){case 49152:return AL.currentCtx.dopplerFactor;case 49155:return AL.currentCtx.speedOfSound;case 53248:return AL.currentCtx.distanceModel;default:AL.currentCtx.err=40962;return null}},setGlobalParam:(funcname,param,value)=>{if(!AL.currentCtx){return}switch(param){case 49152:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.dopplerFactor=value;AL.updateListenerSpace(AL.currentCtx);break;case 49155:if(!Number.isFinite(value)||value<=0){AL.currentCtx.err=40963;return}AL.currentCtx.speedOfSound=value;AL.updateListenerSpace(AL.currentCtx);break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:AL.currentCtx.distanceModel=value;AL.updateContextGlobal(AL.currentCtx);break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},getListenerParam:(funcname,param)=>{if(!AL.currentCtx){return null}switch(param){case 4100:return AL.currentCtx.listener.position;case 4102:return AL.currentCtx.listener.velocity;case 4111:return AL.currentCtx.listener.direction.concat(AL.currentCtx.listener.up);case 4106:return AL.currentCtx.gain.gain.value;default:AL.currentCtx.err=40962;return null}},setListenerParam:(funcname,param,value)=>{if(!AL.currentCtx){return}if(value===null){AL.currentCtx.err=40962;return}var listener=AL.currentCtx.listener;switch(param){case 4100:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.position[0]=value[0];listener.position[1]=value[1];listener.position[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4102:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.velocity[0]=value[0];listener.velocity[1]=value[1];listener.velocity[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.gain.gain.value=value;break;case 4111:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])||!Number.isFinite(value[3])||!Number.isFinite(value[4])||!Number.isFinite(value[5])){AL.currentCtx.err=40963;return}listener.direction[0]=value[0];listener.direction[1]=value[1];listener.direction[2]=value[2];listener.up[0]=value[3];listener.up[1]=value[4];listener.up[2]=value[5];AL.updateListenerSpace(AL.currentCtx);break;default:AL.currentCtx.err=40962;return}},getBufferParam:(funcname,bufferId,param)=>{if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}switch(param){case 8193:return buf.frequency;case 8194:return buf.bytesPerSample*8;case 8195:return buf.channels;case 8196:return buf.length*buf.bytesPerSample*buf.channels;case 8213:if(buf.length===0){return[0,0]}return[(buf.audioBuf._loopStart||0)*buf.frequency,(buf.audioBuf._loopEnd||buf.length)*buf.frequency];default:AL.currentCtx.err=40962;return null}},setBufferParam:(funcname,bufferId,param,value)=>{if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}if(value===null){AL.currentCtx.err=40962;return}switch(param){case 8196:if(value!==0){AL.currentCtx.err=40963;return}break;case 8213:if(value[0]<0||value[0]>buf.length||value[1]<0||value[1]>buf.Length||value[0]>=value[1]){AL.currentCtx.err=40963;return}if(buf.refCount>0){AL.currentCtx.err=40964;return}if(buf.audioBuf){buf.audioBuf._loopStart=value[0]/buf.frequency;buf.audioBuf._loopEnd=value[1]/buf.frequency}break;default:AL.currentCtx.err=40962;return}},getSourceParam:(funcname,sourceId,param)=>{if(!AL.currentCtx){return null}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return null}switch(param){case 514:return src.relative;case 4097:return src.coneInnerAngle;case 4098:return src.coneOuterAngle;case 4099:return src.pitch;case 4100:return src.position;case 4101:return src.direction;case 4102:return src.velocity;case 4103:return src.looping;case 4105:if(src.type===4136){return src.bufQueue[0].id}return 0;case 4106:return src.gain.gain.value;case 4109:return src.minGain;case 4110:return src.maxGain;case 4112:return src.state;case 4117:if(src.bufQueue.length===1&&src.bufQueue[0].id===0){return 0}return src.bufQueue.length;case 4118:if(src.bufQueue.length===1&&src.bufQueue[0].id===0||src.looping){return 0}return src.bufsProcessed;case 4128:return src.refDistance;case 4129:return src.rolloffFactor;case 4130:return src.coneOuterGain;case 4131:return src.maxDistance;case 4132:return AL.sourceTell(src);case 4133:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency}return offset;case 4134:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency*src.bufQueue[0].bytesPerSample}return offset;case 4135:return src.type;case 4628:return src.spatialize;case 8201:var length=0;var bytesPerFrame=0;for(var i=0;i{if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}if(value===null){AL.currentCtx.err=40962;return}switch(param){case 514:if(value===1){src.relative=true;AL.updateSourceSpace(src)}else if(value===0){src.relative=false;AL.updateSourceSpace(src)}else{AL.currentCtx.err=40963;return}break;case 4097:if(!Number.isFinite(value)){AL.currentCtx.err=40963;return}src.coneInnerAngle=value;if(src.panner){src.panner.coneInnerAngle=value%360}break;case 4098:if(!Number.isFinite(value)){AL.currentCtx.err=40963;return}src.coneOuterAngle=value;if(src.panner){src.panner.coneOuterAngle=value%360}break;case 4099:if(!Number.isFinite(value)||value<=0){AL.currentCtx.err=40963;return}if(src.pitch===value){break}src.pitch=value;AL.updateSourceRate(src);break;case 4100:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}src.position[0]=value[0];src.position[1]=value[1];src.position[2]=value[2];AL.updateSourceSpace(src);break;case 4101:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}src.direction[0]=value[0];src.direction[1]=value[1];src.direction[2]=value[2];AL.updateSourceSpace(src);break;case 4102:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}src.velocity[0]=value[0];src.velocity[1]=value[1];src.velocity[2]=value[2];AL.updateSourceSpace(src);break;case 4103:if(value===1){src.looping=true;AL.updateSourceTime(src);if(src.type===4136&&src.audioQueue.length>0){var audioSrc=src.audioQueue[0];audioSrc.loop=true;audioSrc._duration=Number.POSITIVE_INFINITY}}else if(value===0){src.looping=false;var currentTime=AL.updateSourceTime(src);if(src.type===4136&&src.audioQueue.length>0){var audioSrc=src.audioQueue[0];audioSrc.loop=false;audioSrc._duration=src.bufQueue[0].audioBuf.duration/src.playbackRate;audioSrc._startTime=currentTime-src.bufOffset/src.playbackRate}}else{AL.currentCtx.err=40963;return}break;case 4105:if(src.state===4114||src.state===4115){AL.currentCtx.err=40964;return}if(value===0){for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=1;src.bufQueue[0]=AL.buffers[0];src.bufsProcessed=0;src.type=4144}else{var buf=AL.buffers[value];if(!buf){AL.currentCtx.err=40963;return}for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=0;buf.refCount++;src.bufQueue=[buf];src.bufsProcessed=0;src.type=4136}AL.initSourcePanner(src);AL.scheduleSourceAudio(src);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.gain.gain.value=value;break;case 4109:if(!Number.isFinite(value)||value<0||value>Math.min(src.maxGain,1)){AL.currentCtx.err=40963;return}src.minGain=value;break;case 4110:if(!Number.isFinite(value)||value1){AL.currentCtx.err=40963;return}src.maxGain=value;break;case 4128:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.refDistance=value;if(src.panner){src.panner.refDistance=value}break;case 4129:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.rolloffFactor=value;if(src.panner){src.panner.rolloffFactor=value}break;case 4130:if(!Number.isFinite(value)||value<0||value>1){AL.currentCtx.err=40963;return}src.coneOuterGain=value;if(src.panner){src.panner.coneOuterGain=value}break;case 4131:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.maxDistance=value;if(src.panner){src.panner.maxDistance=value}break;case 4132:if(value<0||value>AL.sourceDuration(src)){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4133:var srcLen=AL.sourceDuration(src);if(srcLen>0){var frequency;for(var bufId in src.bufQueue){if(bufId){frequency=src.bufQueue[bufId].frequency;break}}value/=frequency}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4134:var srcLen=AL.sourceDuration(src);if(srcLen>0){var bytesPerSec;for(var bufId in src.bufQueue){if(bufId){var buf=src.bufQueue[bufId];bytesPerSec=buf.frequency*buf.bytesPerSample*buf.channels;break}}value/=bytesPerSec}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4628:if(value!==0&&value!==1&&value!==2){AL.currentCtx.err=40963;return}src.spatialize=value;AL.initSourcePanner(src);break;case 8201:case 8202:case 8203:AL.currentCtx.err=40964;break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:src.distanceModel=value;if(AL.currentCtx.sourceDistanceModel){AL.updateContextGlobal(AL.currentCtx)}break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},captures:{},sharedCaptureAudioCtx:null,requireValidCaptureDevice:(deviceId,funcname)=>{if(deviceId===0){AL.alcErr=40961;return null}var c=AL.captures[deviceId];if(!c){AL.alcErr=40961;return null}var err=c.mediaStreamError;if(err){AL.alcErr=40961;return null}return c}};var _alBufferData=(bufferId,format,pData,size,freq)=>{if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf){AL.currentCtx.err=40963;return}if(freq<=0){AL.currentCtx.err=40963;return}var audioBuf=null;try{switch(format){case 4352:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size,freq);var channel0=audioBuf.getChannelData(0);for(var i=0;i0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>1,freq);var channel0=audioBuf.getChannelData(0);pData>>=1;for(var i=0;i>1;++i){channel0[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=1;buf.length=size>>1;break;case 4354:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>1,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);for(var i=0;i>1;++i){channel0[i]=HEAPU8[pData++]*.0078125-1;channel1[i]=HEAPU8[pData++]*.0078125-1}}buf.bytesPerSample=1;buf.channels=2;buf.length=size>>1;break;case 4355:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>2,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=1;for(var i=0;i>2;++i){channel0[i]=HEAP16[pData++]*30517578125e-15;channel1[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=2;buf.length=size>>2;break;case 65552:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>2,freq);var channel0=audioBuf.getChannelData(0);pData>>=2;for(var i=0;i>2;++i){channel0[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=1;buf.length=size>>2;break;case 65553:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>3,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=2;for(var i=0;i>3;++i){channel0[i]=HEAPF32[pData++];channel1[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=2;buf.length=size>>3;break;default:AL.currentCtx.err=40963;return}buf.frequency=freq;buf.audioBuf=audioBuf}catch(e){AL.currentCtx.err=40963;return}};var _alDeleteBuffers=(count,pBufferIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2];if(bufId===0){continue}if(!AL.buffers[bufId]){AL.currentCtx.err=40961;return}if(AL.buffers[bufId].refCount){AL.currentCtx.err=40964;return}}for(var i=0;i>2];if(bufId===0){continue}AL.deviceRefCounts[AL.buffers[bufId].deviceId]--;delete AL.buffers[bufId];AL.freeIds.push(bufId)}};var _alSourcei=(sourceId,param,value)=>{switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4628:case 8201:case 8202:case 53248:AL.setSourceParam("alSourcei",sourceId,param,value);break;default:AL.setSourceParam("alSourcei",sourceId,param,null);break}};var _alDeleteSources=(count,pSourceIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2];if(!AL.currentCtx.sources[srcId]){AL.currentCtx.err=40961;return}}for(var i=0;i>2];AL.setSourceState(AL.currentCtx.sources[srcId],4116);_alSourcei(srcId,4105,0);delete AL.currentCtx.sources[srcId];AL.freeIds.push(srcId)}};var _alDistanceModel=model=>{AL.setGlobalParam("alDistanceModel",53248,model)};var _alGenBuffers=(count,pBufferIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2]=buf.id;checkInt32(buf.id)}};var _alGenSources=(count,pSourceIds)=>{if(!AL.currentCtx){return}for(var i=0;i>2]=src.id;checkInt32(src.id)}};var _alGetError=()=>{if(!AL.currentCtx){return 40964}var err=AL.currentCtx.err;AL.currentCtx.err=0;return err};var _alGetSourcei=(sourceId,param,pValue)=>{var val=AL.getSourceParam("alGetSourcei",sourceId,param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4112:case 4117:case 4118:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4135:case 4628:case 8201:case 8202:case 53248:HEAP32[pValue>>2]=val;checkInt32(val);break;default:AL.currentCtx.err=40962;return}};var _alListenerfv=(param,pValues)=>{if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;case 4111:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.paramArray[3]=HEAPF32[pValues+12>>2];AL.paramArray[4]=HEAPF32[pValues+16>>2];AL.paramArray[5]=HEAPF32[pValues+20>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;default:AL.setListenerParam("alListenerfv",param,null);break}};var _alSource3f=(sourceId,param,value0,value1,value2)=>{switch(param){case 4100:case 4101:case 4102:AL.paramArray[0]=value0;AL.paramArray[1]=value1;AL.paramArray[2]=value2;AL.setSourceParam("alSource3f",sourceId,param,AL.paramArray);break;default:AL.setSourceParam("alSource3f",sourceId,param,null);break}};var _alSourcePlay=sourceId=>{if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4114)};var _alSourcef=(sourceId,param,value)=>{switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:AL.setSourceParam("alSourcef",sourceId,param,value);break;default:AL.setSourceParam("alSourcef",sourceId,param,null);break}};var _alcCloseDevice=deviceId=>{if(!(deviceId in AL.deviceRefCounts)||AL.deviceRefCounts[deviceId]>0){return 0}delete AL.deviceRefCounts[deviceId];AL.freeIds.push(deviceId);return 1};var autoResumeAudioContext=ctx=>{for(var event of["keydown","mousedown","touchstart"]){for(var element of[document,document.getElementById("canvas")]){element?.addEventListener(event,()=>{if(ctx.state==="suspended")ctx.resume()},{once:true})}}};var _alcCreateContext=(deviceId,pAttrList)=>{if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return 0}var options=null;var attrs=[];var hrtf=null;pAttrList>>=2;if(pAttrList){var attr=0;var val=0;while(true){attr=HEAP32[pAttrList++];attrs.push(attr);if(attr===0){break}val=HEAP32[pAttrList++];attrs.push(val);switch(attr){case 4103:if(!options){options={}}options.sampleRate=val;break;case 4112:case 4113:break;case 6546:switch(val){case 0:hrtf=false;break;case 1:hrtf=true;break;case 2:break;default:AL.alcErr=40964;return 0}break;case 6550:if(val!==0){AL.alcErr=40964;return 0}break;default:AL.alcErr=40964;return 0}}}var AudioContext=window.AudioContext||window.webkitAudioContext;var ac=null;try{if(options){ac=new AudioContext(options)}else{ac=new AudioContext}}catch(e){if(e.name==="NotSupportedError"){AL.alcErr=40964}else{AL.alcErr=40961}return 0}autoResumeAudioContext(ac);if(typeof ac.createGain=="undefined"){ac.createGain=ac.createGainNode}var gain=ac.createGain();gain.connect(ac.destination);var ctx={deviceId,id:AL.newId(),attrs,audioCtx:ac,listener:{position:[0,0,0],velocity:[0,0,0],direction:[0,0,0],up:[0,0,0]},sources:[],interval:setInterval(()=>AL.scheduleContextAudio(ctx),AL.QUEUE_INTERVAL),gain,distanceModel:53250,speedOfSound:343.3,dopplerFactor:1,sourceDistanceModel:false,hrtf:hrtf||false,_err:0,get err(){return this._err},set err(val){if(this._err===0||val===0){this._err=val}}};AL.deviceRefCounts[deviceId]++;AL.contexts[ctx.id]=ctx;if(hrtf!==null){for(var ctxId in AL.contexts){var c=AL.contexts[ctxId];if(c.deviceId===deviceId){c.hrtf=hrtf;AL.updateContextGlobal(c)}}}return ctx.id};var _alcDestroyContext=contextId=>{var ctx=AL.contexts[contextId];if(AL.currentCtx===ctx){AL.alcErr=40962;return}if(AL.contexts[contextId].interval){clearInterval(AL.contexts[contextId].interval)}AL.deviceRefCounts[ctx.deviceId]--;delete AL.contexts[contextId];AL.freeIds.push(contextId)};var _alcMakeContextCurrent=contextId=>{if(contextId===0){AL.currentCtx=null}else{AL.currentCtx=AL.contexts[contextId]}return 1};var _alcOpenDevice=pDeviceName=>{if(pDeviceName){var name=UTF8ToString(pDeviceName);if(name!==AL.DEVICE_NAME){return 0}}if(globalThis.AudioContext||globalThis.webkitAudioContext){var deviceId=AL.newId();AL.deviceRefCounts[deviceId]=0;return deviceId}return 0};var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);checkInt64(nsec);return 0}function getFullscreenElement(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement||document.msFullscreenElement}var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);var Browser={useWebGL:false,isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],preloadedImages:{},preloadedAudios:{},getCanvas:()=>Module["canvas"],init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin["canHandle"]=name=>!Module["noImageDecoding"]&&/\.(jpg|jpeg|png|bmp|webp)$/i.test(name);imagePlugin["handle"]=async(byteArray,name)=>{var b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}var url=URL.createObjectURL(b);return new Promise((resolve,reject)=>{var img=new Image;img.onload=()=>{assert(img.complete,`Image ${name} could not be decoded`);var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Browser.preloadedImages[name]=canvas;URL.revokeObjectURL(url);resolve(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);reject()};img.src=url})};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=name=>!Module["noAudioDecoding"]&&name.slice(-4)in{".ogg":1,".wav":1,".mp3":1};audioPlugin["handle"]=async(byteArray,name)=>new Promise((resolve,reject)=>{var done=false;function finish(audio){if(done)return;done=true;Browser.preloadedAudios[name]=audio;resolve(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=event=>{if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.slice(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)});preloadPlugins.push(audioPlugin);function pointerLockChange(){var canvas=Browser.getCanvas();Browser.pointerLock=document.pointerLockElement===canvas}var canvas=Browser.getCanvas();if(canvas){document.addEventListener("pointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Browser.getCanvas().requestPointerLock){Browser.getCanvas().requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module["ctx"]&&canvas==Browser.getCanvas())return Module["ctx"];var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:typeof WebGL2RenderingContext!="undefined"?2: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);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(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=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if(getFullscreenElement()===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)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},requestFullScreen(){abort("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.slice(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(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:abort("unrecognized mouse wheel delta mode: "+event.deltaMode)}break;default:abort("unrecognized mouse wheel event: "+event.type)}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var canvas=Browser.getCanvas();var rect=canvas.getBoundingClientRect();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.");var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(canvas.width/rect.width);adjustedY=adjustedY*(canvas.height/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(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)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);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];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Browser.getCanvas();Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Browser.getCanvas();Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags;checkInt32(flags)}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags;checkInt32(flags)}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},updateCanvasDimensions(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"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1;checkInt32(1)}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};var _eglChooseConfig=(display,attrib_list,configs,config_size,numConfigs)=>EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);var GLctx;var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"));var webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"));var webgl_enable_EXT_polygon_offset_clamp=ctx=>!!(ctx.extPolygonOffsetClamp=ctx.getExtension("EXT_polygon_offset_clamp"));var webgl_enable_EXT_clip_control=ctx=>!!(ctx.extClipControl=ctx.getExtension("EXT_clip_control"));var webgl_enable_WEBGL_polygon_mode=ctx=>!!(ctx.webglPolygonMode=ctx.getExtension("WEBGL_polygon_mode"));var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_color_buffer_float","EXT_conservative_depth","EXT_disjoint_timer_query_webgl2","EXT_texture_norm16","NV_shader_noperspective_interpolation","WEBGL_clip_cull_distance","EXT_clip_control","EXT_color_buffer_half_float","EXT_depth_clamp","EXT_float_blend","EXT_polygon_offset_clamp","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_blend_func_extended","WEBGL_compressed_texture_astc","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw","WEBGL_polygon_mode"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var registerPreMainLoop=f=>{typeof MainLoop!="undefined"&&MainLoop.preMainLoop.push(f)};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],stringCache:{},stringiCache:{},unpackAlignment:4,unpackRowLength:0,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{for(var i=0;i>2]=id;checkInt32(id)}},MAX_TEMP_BUFFER_SIZE:2097152,numTempVertexBuffersPerSize:64,log2ceilLookup:i=>32-Math.clz32(i===0?0:i-1),generateTempBuffers:(quads,context)=>{var largestIndex=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);context.tempVertexBufferCounters1=[];context.tempVertexBufferCounters2=[];context.tempVertexBufferCounters1.length=context.tempVertexBufferCounters2.length=largestIndex+1;context.tempVertexBuffers1=[];context.tempVertexBuffers2=[];context.tempVertexBuffers1.length=context.tempVertexBuffers2.length=largestIndex+1;context.tempIndexBuffers=[];context.tempIndexBuffers.length=largestIndex+1;for(var i=0;i<=largestIndex;++i){context.tempIndexBuffers[i]=null;context.tempVertexBufferCounters1[i]=context.tempVertexBufferCounters2[i]=0;var ringbufferLength=GL.numTempVertexBuffersPerSize;context.tempVertexBuffers1[i]=[];context.tempVertexBuffers2[i]=[];var ringbuffer1=context.tempVertexBuffers1[i];var ringbuffer2=context.tempVertexBuffers2[i];ringbuffer1.length=ringbuffer2.length=ringbufferLength;for(var j=0;j>1;var quadIndexes=new Uint16Array(numIndexes);var i=0,v=0;while(1){quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+1;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v+3;if(i>=numIndexes)break;v+=4}context.GLctx.bufferData(34963,quadIndexes,35044);context.GLctx.bindBuffer(34963,null)}},getTempVertexBuffer:sizeBytes=>{var idx=GL.log2ceilLookup(sizeBytes);var ringbuffer=GL.currentContext.tempVertexBuffers1[idx];var nextFreeBufferIndex=GL.currentContext.tempVertexBufferCounters1[idx];GL.currentContext.tempVertexBufferCounters1[idx]=GL.currentContext.tempVertexBufferCounters1[idx]+1&GL.numTempVertexBuffersPerSize-1;var vbo=ringbuffer[nextFreeBufferIndex];if(vbo){return vbo}var prevVBO=GLctx.getParameter(34964);ringbuffer[nextFreeBufferIndex]=GLctx.createBuffer();GLctx.bindBuffer(34962,ringbuffer[nextFreeBufferIndex]);GLctx.bufferData(34962,1<{var idx=GL.log2ceilLookup(sizeBytes);var ibo=GL.currentContext.tempIndexBuffers[idx];if(ibo){return ibo}var prevIBO=GLctx.getParameter(34965);GL.currentContext.tempIndexBuffers[idx]=GLctx.createBuffer();GLctx.bindBuffer(34963,GL.currentContext.tempIndexBuffers[idx]);GLctx.bufferData(34963,1<{if(!GL.currentContext){return}var vb=GL.currentContext.tempVertexBuffers1;GL.currentContext.tempVertexBuffers1=GL.currentContext.tempVertexBuffers2;GL.currentContext.tempVertexBuffers2=vb;vb=GL.currentContext.tempVertexBufferCounters1;GL.currentContext.tempVertexBufferCounters1=GL.currentContext.tempVertexBufferCounters2;GL.currentContext.tempVertexBufferCounters2=vb;var largestIndex=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);for(var i=0;i<=largestIndex;++i){GL.currentContext.tempVertexBufferCounters1[i]=0}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}var type=GLctx.getShaderParameter(GL.shaders[shader],35663);if(type==35632){if(GLEmulation.findToken(source,"dFdx")||GLEmulation.findToken(source,"dFdy")||GLEmulation.findToken(source,"fwidth")){source="#extension GL_OES_standard_derivatives : enable\n"+source;var extension=GLctx.getExtension("OES_standard_derivatives")}}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=webGLContextAttributes.majorVersion>1?canvas.getContext("webgl2",webGLContextAttributes):canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={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:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module["ctx"]=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext: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]?.GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;context.compressionExt=GLctx.getExtension("WEBGL_compressed_texture_s3tc");context.anisotropicExt=GLctx.getExtension("EXT_texture_filter_anisotropic");webgl_enable_WEBGL_multi_draw(GLctx);webgl_enable_EXT_polygon_offset_clamp(GLctx);webgl_enable_EXT_clip_control(GLctx);webgl_enable_WEBGL_polygon_mode(GLctx);webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}for(var ext of getEmscriptenSupportedExtensions(GLctx)){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}}}};var _eglCreateContext=(display,config,hmm,contextAttribs)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Browser.getCanvas(),EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Browser.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}};var _eglCreateWindowSurface=(display,config,win,attrib_list)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006};var _eglDestroyContext=(display,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1};var _eglDestroySurface=(display,surface)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1};var _eglGetConfigAttrib=(display,config,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;checkInt32(EGL.contextAttributes.alpha?32:24);return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;checkInt32(EGL.contextAttributes.alpha?8:0);return 1;case 12322:HEAP32[value>>2]=8;checkInt32(8);return 1;case 12323:HEAP32[value>>2]=8;checkInt32(8);return 1;case 12324:HEAP32[value>>2]=8;checkInt32(8);return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;checkInt32(EGL.contextAttributes.depth?24:0);return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;checkInt32(EGL.contextAttributes.stencil?8:0);return 1;case 12327:HEAP32[value>>2]=12344;checkInt32(12344);return 1;case 12328:HEAP32[value>>2]=62002;checkInt32(62002);return 1;case 12329:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12330:HEAP32[value>>2]=4096;checkInt32(4096);return 1;case 12331:HEAP32[value>>2]=16777216;checkInt32(16777216);return 1;case 12332:HEAP32[value>>2]=4096;checkInt32(4096);return 1;case 12333:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12334:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12335:HEAP32[value>>2]=12344;checkInt32(12344);return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;checkInt32(EGL.contextAttributes.antialias?4:0);return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;checkInt32(EGL.contextAttributes.antialias?1:0);return 1;case 12339:HEAP32[value>>2]=4;checkInt32(4);return 1;case 12340:HEAP32[value>>2]=12344;checkInt32(12344);return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;checkInt32(-1);return 1;case 12345:case 12346:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12347:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12348:HEAP32[value>>2]=1;checkInt32(1);return 1;case 12349:case 12350:HEAP32[value>>2]=0;checkInt32(0);return 1;case 12351:HEAP32[value>>2]=12430;checkInt32(12430);return 1;case 12352:HEAP32[value>>2]=4;checkInt32(4);return 1;case 12354:HEAP32[value>>2]=0;checkInt32(0);return 1;default:EGL.setErrorCode(12292);return 0}};var _eglGetDisplay=nativeDisplayType=>{EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3};var _eglGetError=()=>EGL.errorCode;var _eglInitialize=(display,majorVersion,minorVersion)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1;checkInt32(1)}if(minorVersion){HEAP32[minorVersion>>2]=4;checkInt32(4)}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1};var _eglMakeCurrent=(display,draw,read,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1};var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var _eglQueryString=(display,name)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret};var _eglSwapBuffers=(dpy,surface)=>{if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!GLctx){EGL.setErrorCode(12290)}else if(GLctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0};var _eglSwapInterval=(display,interval)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1};var _eglTerminate=display=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1};var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};var _eglWaitGL=_eglWaitClient;var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var chr=String.fromCharCode(ch);var validChars=["d","f","i","p"];validChars.push("j");assert(validChars.includes(chr),`Invalid character ${ch}("${chr}") in readEmAsmArgs! Use only [${validChars}], and do not specify "v" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(emAsmAddr),`No EM_ASM constant found at address ${emAsmAddr}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[emAsmAddr](...args)};var _emscripten_asm_const_int_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var _emscripten_asm_const_ptr_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var _emscripten_cancel_main_loop=()=>{MainLoop.pause();MainLoop.func=null};var _emscripten_err=str=>err(UTF8ToString(str));var onExits=[];var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},inEventHandler:0,deferredCalls:[],deferCall(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 call of JSEvents.deferredCalls){if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction,precedence,argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedencecall.targetFunction!=targetFunction)},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}var deferredCalls=JSEvents.deferredCalls;JSEvents.deferredCalls=[];for(var call of deferredCalls){call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;icString>2?UTF8ToString(cString):cString;var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||globalThis.document?.querySelector(target);return domElement};var findCanvasEventTarget=findEventTarget;var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;checkInt32(canvas.width);HEAP32[height>>2]=canvas.height;checkInt32(canvas.height)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var getCanvasElementSize=target=>{var sp=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];stackRestore(sp);return size};var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{var sp=stackSave();var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(sp)}};var currentFullscreenStrategy={};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(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(){if(!getFullscreenElement()){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(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){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0};var 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=getCanvasElementSize(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{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(!document.exitPointerLock)return-1;document.exitPointerLock();return 0};var _emscripten_get_device_pixel_ratio=()=>globalThis.devicePixelRatio??1;var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var 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.index;checkInt32(e.index);HEAP32[eventStruct+8>>2]=e.axes.length;checkInt32(e.axes.length);HEAP32[eventStruct+12>>2]=e.buttons.length;checkInt32(e.buttons.length);stringToUTF8(e.id,eventStruct+1112,64);stringToUTF8(e.mapping,eventStruct+1176,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{assert(JSEvents.lastGamepadState,"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};var _emscripten_get_num_gamepads=()=>{assert(JSEvents.lastGamepadState,"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};var _emscripten_get_screen_size=(width,height)=>{HEAP32[width>>2]=screen.width;checkInt32(screen.width);HEAP32[height>>2]=screen.height;checkInt32(screen.height)};var _emscripten_glActiveTexture=x0=>GLctx.activeTexture(x0);var _emscripten_glAlphaFunc=(func,ref)=>{switch(func){case 512:case 513:case 514:case 515:case 516:case 517:case 518:case 519:GLEmulation.alphaTestRef=ref;if(GLEmulation.alphaTestFunc!=func){GLEmulation.alphaTestFunc=func;GLImmediate.currentRenderer=null}break;default:break}};var _emscripten_glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glEnable=x0=>GLctx.enable(x0);var _glEnable=_emscripten_glEnable;var _emscripten_glDisable=x0=>GLctx.disable(x0);var _glDisable=_emscripten_glDisable;var _emscripten_glIsEnabled=x0=>GLctx.isEnabled(x0);var _glIsEnabled=_emscripten_glIsEnabled;var readI53FromI64=ptr=>HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296;var readI53FromU64=ptr=>HEAPU32[ptr>>2]+HEAPU32[ptr+4>>2]*4294967296;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;checkInt32(num);var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296;checkInt32((num-lower)/4294967296);var deserialized=num>=0?readI53FromU64(ptr):readI53FromI64(ptr);var offset=ptr>>2;if(deserialized!=num)warnOnce(`writeI53ToI64() out of range: serialized JS Number ${num} to Wasm heap as bytes lo=${ptrToString(HEAPU32[offset])}, hi=${ptrToString(HEAPU32[offset+1])}, which deserializes back to ${deserialized} instead!`)};var webglGetExtensions=()=>{var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 34814:case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break;case 33309:if(GL.currentContext.version<2){GL.recordError(1282);return}ret=webglGetExtensions().length;break;case 33307:case 33308:if(GL.currentContext.version<2){GL.recordError(1280);return}ret=name_==33307?3: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(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];checkInt32(result[i]);break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i]=result[i]?1:0;checkInt8(result[i]?1:0);break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);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;checkInt32(ret);break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p]=ret?1:0;checkInt8(ret?1:0);break}};var _emscripten_glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _glGetBooleanv=_emscripten_glGetBooleanv;var _emscripten_glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _glGetIntegerv=_emscripten_glGetIntegerv;var _emscripten_glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var webGLVersion=GLctx.getParameter(7938);var glVersion=`OpenGL ES 2.0 (${webGLVersion})`;if(GL.currentContext.version>=2)glVersion=`OpenGL ES 3.0 (${webGLVersion})`;ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);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(1280)}GL.stringCache[name_]=ret}return ret};var _glGetString=_emscripten_glGetString;var _emscripten_glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _glCreateShader=_emscripten_glCreateShader;var _emscripten_glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _glShaderSource=_emscripten_glShaderSource;var _emscripten_glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _glCompileShader=_emscripten_glCompileShader;var _glAttachShader=_emscripten_glAttachShader;var _emscripten_glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _glDetachShader=_emscripten_glDetachShader;var _emscripten_glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _glUseProgram=_emscripten_glUseProgram;var _emscripten_glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _glDeleteProgram=_emscripten_glDeleteProgram;var _emscripten_glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _glBindAttribLocation=_emscripten_glBindAttribLocation;var _emscripten_glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _glLinkProgram=_emscripten_glLinkProgram;var _emscripten_glBindBuffer=(target,buffer)=>{if(target==34962){GLctx.currentArrayBufferBinding=buffer;GLImmediate.lastArrayBuffer=buffer}else if(target==34963){GLctx.currentElementArrayBufferBinding=buffer}if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])};var _glBindBuffer=_emscripten_glBindBuffer;var _emscripten_glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _glGetFloatv=_emscripten_glGetFloatv;var _emscripten_glHint=(x0,x1)=>GLctx.hint(x0,x1);var _glHint=_emscripten_glHint;var _emscripten_glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray;var _emscripten_glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray;var _emscripten_glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _glVertexAttribPointer=_emscripten_glVertexAttribPointer;var _glActiveTexture=_emscripten_glActiveTexture;var GLEmulation={fogStart:0,fogEnd:1,fogDensity:1,fogColor:null,fogMode:2048,fogEnabled:false,MAX_CLIP_PLANES:6,clipPlaneEnabled:[false,false,false,false,false,false],clipPlaneEquation:[],lightingEnabled:false,lightModelAmbient:null,lightModelLocalViewer:false,lightModelTwoSide:false,materialAmbient:null,materialDiffuse:null,materialSpecular:null,materialShininess:null,materialEmission:null,MAX_LIGHTS:8,lightEnabled:[false,false,false,false,false,false,false,false],lightAmbient:[],lightDiffuse:[],lightSpecular:[],lightPosition:[],alphaTestEnabled:false,alphaTestFunc:519,alphaTestRef:0,pointSize:1,vaos:[],currentVao:null,enabledVertexAttribArrays:{},hasRunInit:false,findToken(source,token){function isIdentChar(ch){if(ch>=48&&ch<=57)return true;if(ch>=65&&ch<=90)return true;if(ch>=97&&ch<=122)return true;return false}var i=-1;do{i=source.indexOf(token,i+1);if(i<0){break}if(i>0&&isIdentChar(source[i-1])){continue}i+=token.length;if(i{GLImmediate.lastRenderer?.cleanup();if(cap==2912){if(GLEmulation.fogEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.fogEnabled=true}return}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;if(GLEmulation.clipPlaneEnabled[clipPlaneId]!=true){GLImmediate.currentRenderer=null;GLEmulation.clipPlaneEnabled[clipPlaneId]=true}return}else if(cap>=16384&&cap<16392){var lightId=cap-16384;if(GLEmulation.lightEnabled[lightId]!=true){GLImmediate.currentRenderer=null;GLEmulation.lightEnabled[lightId]=true}return}else if(cap==2896){if(GLEmulation.lightingEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.lightingEnabled=true}return}else if(cap==3008){if(GLEmulation.alphaTestEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.alphaTestEnabled=true}return}else if(cap==3553){return}else if(!(cap in validCapabilities)){return}orig_glEnable(cap)};var orig_glDisable=_glDisable;_glDisable=_emscripten_glDisable=cap=>{GLImmediate.lastRenderer?.cleanup();if(cap==2912){if(GLEmulation.fogEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.fogEnabled=false}return}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;if(GLEmulation.clipPlaneEnabled[clipPlaneId]!=false){GLImmediate.currentRenderer=null;GLEmulation.clipPlaneEnabled[clipPlaneId]=false}return}else if(cap>=16384&&cap<16392){var lightId=cap-16384;if(GLEmulation.lightEnabled[lightId]!=false){GLImmediate.currentRenderer=null;GLEmulation.lightEnabled[lightId]=false}return}else if(cap==2896){if(GLEmulation.lightingEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.lightingEnabled=false}return}else if(cap==3008){if(GLEmulation.alphaTestEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.alphaTestEnabled=false}return}else if(cap==3553){return}else if(!(cap in validCapabilities)){return}orig_glDisable(cap)};_glIsEnabled=_emscripten_glIsEnabled=cap=>{if(cap==2912){return GLEmulation.fogEnabled?1:0}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;return GLEmulation.clipPlaneEnabled[clipPlaneId]?1:0}else if(cap>=16384&&cap<16392){var lightId=cap-16384;return GLEmulation.lightEnabled[lightId]?1:0}else if(cap==2896){return GLEmulation.lightingEnabled?1:0}else if(cap==3008){return GLEmulation.alphaTestEnabled?1:0}else if(!(cap in validCapabilities)){return 0}return GLctx.isEnabled(cap)};var orig_glGetBooleanv=_glGetBooleanv;_glGetBooleanv=_emscripten_glGetBooleanv=(pname,p)=>{var attrib=GLEmulation.getAttributeFromCapability(pname);if(attrib!==null){var result=GLImmediate.enabledClientAttributes[attrib];HEAP8[p]=result===true?1:0;checkInt8(result===true?1:0);return}orig_glGetBooleanv(pname,p)};var orig_glGetIntegerv=_glGetIntegerv;_glGetIntegerv=_emscripten_glGetIntegerv=(pname,params)=>{switch(pname){case 34018:pname=GLctx.MAX_TEXTURE_IMAGE_UNITS;break;case 35658:{var result=GLctx.getParameter(GLctx.MAX_VERTEX_UNIFORM_VECTORS);HEAP32[params>>2]=result*4;checkInt32(result*4);return}case 35657:{var result=GLctx.getParameter(GLctx.MAX_FRAGMENT_UNIFORM_VECTORS);HEAP32[params>>2]=result*4;checkInt32(result*4);return}case 35659:{var result=GLctx.getParameter(GLctx.MAX_VARYING_VECTORS);HEAP32[params>>2]=result*4;checkInt32(result*4);return}case 34929:pname=GLctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS;break;case 32890:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.size:0;checkInt32(attribute?attribute.size:0);return}case 32891:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.type:0;checkInt32(attribute?attribute.type:0);return}case 32892:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.stride:0;checkInt32(attribute?attribute.stride:0);return}case 32897:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.size:0;checkInt32(attribute?attribute.size:0);return}case 32898:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.type:0;checkInt32(attribute?attribute.type:0);return}case 32899:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.stride:0;checkInt32(attribute?attribute.stride:0);return}case 32904:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.size:0;checkInt32(attribute?attribute.size:0);return}case 32905:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.type:0;checkInt32(attribute?attribute.type:0);return}case 32906:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.stride:0;checkInt32(attribute?attribute.stride:0);return}case 3378:{HEAP32[params>>2]=GLEmulation.MAX_CLIP_PLANES;checkInt32(GLEmulation.MAX_CLIP_PLANES);return}case 2976:{HEAP32[params>>2]=GLImmediate.currentMatrix+5888;checkInt32(GLImmediate.currentMatrix+5888);return}case 3009:{HEAP32[params>>2]=GLEmulation.alphaTestFunc;checkInt32(GLEmulation.alphaTestFunc);return}}orig_glGetIntegerv(pname,params)};var orig_glGetString=_glGetString;_glGetString=_emscripten_glGetString=name_=>{if(GL.stringCache[name_])return GL.stringCache[name_];switch(name_){case 7939:var ret=stringToNewUTF8(getEmscriptenSupportedExtensions(GLctx).join(" ")+" GL_EXT_texture_env_combine GL_ARB_texture_env_crossbar GL_ATI_texture_env_combine3 GL_NV_texture_env_combine4 GL_EXT_texture_env_dot3 GL_ARB_multitexture GL_ARB_vertex_buffer_object GL_EXT_framebuffer_object GL_ARB_vertex_program GL_ARB_fragment_program GL_ARB_shading_language_100 GL_ARB_shader_objects GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_texture_cube_map GL_EXT_draw_range_elements"+(GL.currentContext.compressionExt?" GL_ARB_texture_compression GL_EXT_texture_compression_s3tc":"")+(GL.currentContext.anisotropicExt?" GL_EXT_texture_filter_anisotropic":""));return GL.stringCache[name_]=ret}return orig_glGetString(name_)};GL.shaderInfos={};var orig_glCreateShader=_glCreateShader;_glCreateShader=_emscripten_glCreateShader=shaderType=>{var id=orig_glCreateShader(shaderType);GL.shaderInfos[id]={type:shaderType,ftransform:false};return id};function ensurePrecision(source){if(!/precision +(low|medium|high)p +float *;/.test(source)){source="#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n"+source}return source}_glShaderSource=_emscripten_glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);if(GL.shaderInfos[shader].type==GLctx.VERTEX_SHADER){var has_pm=source.search(/u_projection/)>=0;var has_mm=source.search(/u_modelView/)>=0;var has_pv=source.search(/a_position/)>=0;var need_pm=0,need_mm=0,need_pv=0;var old=source;source=source.replace(/ftransform\(\)/g,"(u_projection * u_modelView * a_position)");if(old!=source)need_pm=need_mm=need_pv=1;old=source;source=source.replace(/gl_ProjectionMatrix/g,"u_projection");if(old!=source)need_pm=1;old=source;source=source.replace(/gl_ModelViewMatrixTranspose\[2\]/g,"vec4(u_modelView[0][2], u_modelView[1][2], u_modelView[2][2], u_modelView[3][2])");if(old!=source)need_mm=1;old=source;source=source.replace(/gl_ModelViewMatrix/g,"u_modelView");if(old!=source)need_mm=1;old=source;source=source.replace(/gl_Vertex/g,"a_position");if(old!=source)need_pv=1;old=source;source=source.replace(/gl_ModelViewProjectionMatrix/g,"(u_projection * u_modelView)");if(old!=source)need_pm=need_mm=1;if(need_pv&&!has_pv)source="attribute vec4 a_position; \n"+source;if(need_mm&&!has_mm)source="uniform mat4 u_modelView; \n"+source;if(need_pm&&!has_pm)source="uniform mat4 u_projection; \n"+source;GL.shaderInfos[shader].ftransform=need_pm||need_mm||need_pv;for(var i=0;i{GLctx.compileShader(GL.shaders[shader])};GL.programShaders={};var orig_glAttachShader=_glAttachShader;_glAttachShader=_emscripten_glAttachShader=(program,shader)=>{GL.programShaders[program]||=[];GL.programShaders[program].push(shader);orig_glAttachShader(program,shader)};var orig_glDetachShader=_glDetachShader;_glDetachShader=_emscripten_glDetachShader=(program,shader)=>{var programShader=GL.programShaders[program];if(!programShader){err(`WARNING: _glDetachShader received invalid program: ${program}`);return}var index=programShader.indexOf(shader);programShader.splice(index,1);orig_glDetachShader(program,shader)};var orig_glUseProgram=_glUseProgram;_glUseProgram=_emscripten_glUseProgram=program=>{if(GL.currProgram!=program){GLImmediate.currentRenderer=null;GL.currProgram=program;GLImmediate.fixedFunctionProgram=0;orig_glUseProgram(program)}};var orig_glDeleteProgram=_glDeleteProgram;_glDeleteProgram=_emscripten_glDeleteProgram=program=>{orig_glDeleteProgram(program);if(program==GL.currProgram){GLImmediate.currentRenderer=null;GL.currProgram=0}};var zeroUsedPrograms={};var orig_glBindAttribLocation=_glBindAttribLocation;_glBindAttribLocation=_emscripten_glBindAttribLocation=(program,index,name)=>{if(index==0)zeroUsedPrograms[program]=true;orig_glBindAttribLocation(program,index,name)};var orig_glLinkProgram=_glLinkProgram;_glLinkProgram=_emscripten_glLinkProgram=program=>{if(!(program in zeroUsedPrograms)){GLctx.bindAttribLocation(GL.programs[program],0,"a_position")}orig_glLinkProgram(program)};var orig_glBindBuffer=_glBindBuffer;_glBindBuffer=_emscripten_glBindBuffer=(target,buffer)=>{orig_glBindBuffer(target,buffer);if(target==GLctx.ARRAY_BUFFER){if(GLEmulation.currentVao){assert(GLEmulation.currentVao.arrayBuffer==buffer||GLEmulation.currentVao.arrayBuffer==0||buffer==0,"TODO: support for multiple array buffers in vao");GLEmulation.currentVao.arrayBuffer=buffer}}else if(target==GLctx.ELEMENT_ARRAY_BUFFER){if(GLEmulation.currentVao)GLEmulation.currentVao.elementArrayBuffer=buffer}};var orig_glGetFloatv=_glGetFloatv;_glGetFloatv=_emscripten_glGetFloatv=(pname,params)=>{if(pname==2982){HEAPF32.set(GLImmediate.matrix[0],params>>2)}else if(pname==2983){HEAPF32.set(GLImmediate.matrix[1],params>>2)}else if(pname==2984){HEAPF32.set(GLImmediate.matrix[2+GLImmediate.clientActiveTexture],params>>2)}else if(pname==2918){HEAPF32.set(GLEmulation.fogColor,params>>2)}else if(pname==2915){HEAPF32[params>>2]=GLEmulation.fogStart}else if(pname==2916){HEAPF32[params>>2]=GLEmulation.fogEnd}else if(pname==2914){HEAPF32[params>>2]=GLEmulation.fogDensity}else if(pname==2917){HEAPF32[params>>2]=GLEmulation.fogMode}else if(pname==2899){HEAPF32[params>>2]=GLEmulation.lightModelAmbient[0];HEAPF32[params+4>>2]=GLEmulation.lightModelAmbient[1];HEAPF32[params+8>>2]=GLEmulation.lightModelAmbient[2];HEAPF32[params+12>>2]=GLEmulation.lightModelAmbient[3]}else if(pname==3010){HEAPF32[params>>2]=GLEmulation.alphaTestRef}else{orig_glGetFloatv(pname,params)}};var orig_glHint=_glHint;_glHint=_emscripten_glHint=(target,mode)=>{if(target==34031){return}orig_glHint(target,mode)};var orig_glEnableVertexAttribArray=_glEnableVertexAttribArray;_glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray=index=>{orig_glEnableVertexAttribArray(index);GLEmulation.enabledVertexAttribArrays[index]=1;if(GLEmulation.currentVao)GLEmulation.currentVao.enabledVertexAttribArrays[index]=1};var orig_glDisableVertexAttribArray=_glDisableVertexAttribArray;_glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray=index=>{orig_glDisableVertexAttribArray(index);delete GLEmulation.enabledVertexAttribArrays[index];if(GLEmulation.currentVao)delete GLEmulation.currentVao.enabledVertexAttribArrays[index]};var orig_glVertexAttribPointer=_glVertexAttribPointer;_glVertexAttribPointer=_emscripten_glVertexAttribPointer=(index,size,type,normalized,stride,pointer)=>{orig_glVertexAttribPointer(index,size,type,normalized,stride,pointer);if(GLEmulation.currentVao){GLEmulation.currentVao.vertexAttribPointers[index]=[index,size,type,normalized,stride,pointer]}}},getAttributeFromCapability(cap){var attrib=null;switch(cap){case 3553:abort("GL_TEXTURE_2D is not a spec-defined capability for gl{Enable,Disable}ClientState.");case 32888:attrib=GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture;break;case 32884:attrib=GLImmediate.VERTEX;break;case 32885:attrib=GLImmediate.NORMAL;break;case 32886:attrib=GLImmediate.COLOR;break}return attrib}};var GLImmediate={MapTreeLib:null,spawnMapTreeLib:()=>{function CNaiveListMap(){var list=[];this.insert=function CNaiveListMap_insert(key,val){if(this.contains(key|0))return false;list.push([key,val]);return true};var __contains_i;this.contains=function CNaiveListMap_contains(key){for(__contains_i=0;__contains_inew CMapTree}},TexEnvJIT:null,spawnTexEnvJIT:()=>{var GL_TEXTURE0=33984;var GL_TEXTURE_1D=3552;var GL_TEXTURE_2D=3553;var GL_TEXTURE_3D=32879;var GL_TEXTURE_CUBE_MAP=34067;var GL_TEXTURE_ENV=8960;var GL_TEXTURE_ENV_MODE=8704;var GL_TEXTURE_ENV_COLOR=8705;var GL_SRC0_RGB=34176;var GL_SRC1_RGB=34177;var GL_SRC2_RGB=34178;var GL_SRC0_ALPHA=34184;var GL_SRC1_ALPHA=34185;var GL_SRC2_ALPHA=34186;var GL_OPERAND0_RGB=34192;var GL_OPERAND1_RGB=34193;var GL_OPERAND2_RGB=34194;var GL_OPERAND0_ALPHA=34200;var GL_OPERAND1_ALPHA=34201;var GL_OPERAND2_ALPHA=34202;var GL_COMBINE_RGB=34161;var GL_COMBINE_ALPHA=34162;var GL_RGB_SCALE=34163;var GL_ALPHA_SCALE=3356;var GL_ADD=260;var GL_BLEND=3042;var GL_REPLACE=7681;var GL_MODULATE=8448;var GL_DECAL=8449;var GL_COMBINE=34160;var GL_SUBTRACT=34023;var GL_INTERPOLATE=34165;var GL_TEXTURE=5890;var GL_CONSTANT=34166;var GL_PRIMARY_COLOR=34167;var GL_PREVIOUS=34168;var GL_SRC_COLOR=768;var GL_ONE_MINUS_SRC_COLOR=769;var GL_SRC_ALPHA=770;var GL_ONE_MINUS_SRC_ALPHA=771;var TEXENVJIT_NAMESPACE_PREFIX="tej_";var TEX_UNIT_UNIFORM_PREFIX="uTexUnit";var TEX_COORD_VARYING_PREFIX="vTexCoord";var PRIM_COLOR_VARYING="vPrimColor";var TEX_MATRIX_UNIFORM_PREFIX="uTexMatrix";var s_texUnits=null;var s_activeTexture=0;var s_requiredTexUnitsForPass=[];function abort_noSupport(info){abort("[TexEnvJIT] ABORT: No support: "+info)}function abort_sanity(info){abort("[TexEnvJIT] ABORT: Sanity failure: "+info)}function genTexUnitSampleExpr(texUnitID){var texUnit=s_texUnits[texUnitID];var texType=texUnit.getTexType();var func=null;switch(texType){case GL_TEXTURE_1D:func="texture2D";break;case GL_TEXTURE_2D:func="texture2D";break;case GL_TEXTURE_3D:return abort_noSupport("No support for 3D textures.");case GL_TEXTURE_CUBE_MAP:func="textureCube";break;default:return abort_sanity(`Unknown texType: ${ptrToString(texType)}`)}var texCoordExpr=TEX_COORD_VARYING_PREFIX+texUnitID;if(TEX_MATRIX_UNIFORM_PREFIX!=null){texCoordExpr=`(${TEX_MATRIX_UNIFORM_PREFIX}${texUnitID} * ${texCoordExpr})`}return`${func}(${TEX_UNIT_UNIFORM_PREFIX}${texUnitID}, ${texCoordExpr}.xy)`}function getTypeFromCombineOp(op){switch(op){case GL_SRC_COLOR:case GL_ONE_MINUS_SRC_COLOR:return"vec3";case GL_SRC_ALPHA:case GL_ONE_MINUS_SRC_ALPHA:return"float"}return abort_noSupport("Unsupported combiner op: "+ptrToString(op))}function getCurTexUnit(){return s_texUnits[s_activeTexture]}function genCombinerSourceExpr(texUnitID,constantExpr,previousVar,src,op){var srcExpr=null;switch(src){case GL_TEXTURE:srcExpr=genTexUnitSampleExpr(texUnitID);break;case GL_CONSTANT:srcExpr=constantExpr;break;case GL_PRIMARY_COLOR:srcExpr=PRIM_COLOR_VARYING;break;case GL_PREVIOUS:srcExpr=previousVar;break;default:return abort_noSupport("Unsupported combiner src: "+ptrToString(src))}var expr=null;switch(op){case GL_SRC_COLOR:expr=srcExpr+".rgb";break;case GL_ONE_MINUS_SRC_COLOR:expr="(vec3(1.0) - "+srcExpr+".rgb)";break;case GL_SRC_ALPHA:expr=srcExpr+".a";break;case GL_ONE_MINUS_SRC_ALPHA:expr="(1.0 - "+srcExpr+".a)";break;default:return abort_noSupport("Unsupported combiner op: "+ptrToString(op))}return expr}function valToFloatLiteral(val){if(val==Math.round(val))return val+".0";return val}function CTexEnv(){this.mode=GL_MODULATE;this.colorCombiner=GL_MODULATE;this.alphaCombiner=GL_MODULATE;this.colorScale=1;this.alphaScale=1;this.envColor=[0,0,0,0];this.colorSrc=[GL_TEXTURE,GL_PREVIOUS,GL_CONSTANT];this.alphaSrc=[GL_TEXTURE,GL_PREVIOUS,GL_CONSTANT];this.colorOp=[GL_SRC_COLOR,GL_SRC_COLOR,GL_SRC_ALPHA];this.alphaOp=[GL_SRC_ALPHA,GL_SRC_ALPHA,GL_SRC_ALPHA];this.traverseKey={7681:0,8448:1,260:2,3042:3,8449:4,34160:5,34023:3,34165:4,5890:0,34166:1,34167:2,34168:3,768:0,769:1,770:2,771:3};this.key0=-1;this.key1=0;this.key2=0;this.computeKey0=function(){var k=this.traverseKey;var key=k[this.mode]*1638400;key+=k[this.colorCombiner]*327680;key+=k[this.alphaCombiner]*65536;key+=(this.colorScale-1)*16384;key+=(this.alphaScale-1)*4096;key+=k[this.colorSrc[0]]*1024;key+=k[this.colorSrc[1]]*256;key+=k[this.colorSrc[2]]*64;key+=k[this.alphaSrc[0]]*16;key+=k[this.alphaSrc[1]]*4;key+=k[this.alphaSrc[2]];return key};this.computeKey1=function(){var k=this.traverseKey;var key=k[this.colorOp[0]]*4096;key+=k[this.colorOp[1]]*1024;key+=k[this.colorOp[2]]*256;key+=k[this.alphaOp[0]]*16;key+=k[this.alphaOp[1]]*4;key+=k[this.alphaOp[2]];return key};this.computeKey2=function(){return this.envColor[0]*16777216+this.envColor[1]*65536+this.envColor[2]*256+1+this.envColor[3]};this.recomputeKey=function(){this.key0=this.computeKey0();this.key1=this.computeKey1();this.key2=this.computeKey2()};this.invalidateKey=function(){this.key0=-1;GLImmediate.currentRenderer=null}}function CTexUnit(){this.env=new CTexEnv;this.enabled_tex1D=false;this.enabled_tex2D=false;this.enabled_tex3D=false;this.enabled_texCube=false;this.texTypesEnabled=0;this.traverseState=function CTexUnit_traverseState(keyView){if(this.texTypesEnabled){if(this.env.key0==-1){this.env.recomputeKey()}keyView.next(this.texTypesEnabled|this.env.key0<<4);keyView.next(this.env.key1);keyView.next(this.env.key2)}else{keyView.next(0)}}}CTexUnit.prototype.enabled=function CTexUnit_enabled(){return this.texTypesEnabled};CTexUnit.prototype.genPassLines=function CTexUnit_genPassLines(passOutputVar,passInputVar,texUnitID){if(!this.enabled()){return["vec4 "+passOutputVar+" = "+passInputVar+";"]}var lines=this.env.genPassLines(passOutputVar,passInputVar,texUnitID).join("\n");var texLoadLines="";var texLoadRegex=/(texture.*?\(.*?\))/g;var loadCounter=0;var load;while(load=texLoadRegex.exec(lines)){var texLoadExpr=load[1];var secondOccurrence=lines.slice(load.index+1).indexOf(texLoadExpr);if(secondOccurrence!=-1){var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texLoadVar=prefix+"texload"+loadCounter++;var texLoadLine="vec4 "+texLoadVar+" = "+texLoadExpr+";\n";texLoadLines+=texLoadLine+"\n";lines=lines.split(texLoadExpr).join(texLoadVar);texLoadRegex=/(texture.*\(.*\))/g}}return[texLoadLines+lines]};CTexUnit.prototype.getTexType=function CTexUnit_getTexType(){if(this.enabled_texCube){return GL_TEXTURE_CUBE_MAP}else if(this.enabled_tex3D){return GL_TEXTURE_3D}else if(this.enabled_tex2D){return GL_TEXTURE_2D}else if(this.enabled_tex1D){return GL_TEXTURE_1D}return 0};CTexEnv.prototype.genPassLines=function CTexEnv_genPassLines(passOutputVar,passInputVar,texUnitID){switch(this.mode){case GL_REPLACE:{return["vec4 "+passOutputVar+" = "+genTexUnitSampleExpr(texUnitID)+";"]}case GL_ADD:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";","vec3 "+colorVar+" = "+passInputVar+".rgb + "+texVar+".rgb;","float "+alphaVar+" = "+passInputVar+".a * "+texVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_MODULATE:{var line=["vec4 "+passOutputVar," = ",passInputVar," * ",genTexUnitSampleExpr(texUnitID),";"];return[line.join("")]}case GL_DECAL:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";",["vec3 "+colorVar+" = ",passInputVar+".rgb * (1.0 - "+texVar+".a)"," + ",texVar+".rgb * "+texVar+".a",";"].join(""),"float "+alphaVar+" = "+passInputVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_BLEND:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";",["vec3 "+colorVar+" = ",passInputVar+".rgb * (1.0 - "+texVar+".rgb)"," + ",PRIM_COLOR_VARYING+".rgb * "+texVar+".rgb",";"].join(""),"float "+alphaVar+" = "+texVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_COMBINE:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";var colorLines=this.genCombinerLines(true,colorVar,passInputVar,texUnitID,this.colorCombiner,this.colorSrc,this.colorOp);var alphaLines=this.genCombinerLines(false,alphaVar,passInputVar,texUnitID,this.alphaCombiner,this.alphaSrc,this.alphaOp);var scaledColor=this.colorScale==1?colorVar:colorVar+" * "+valToFloatLiteral(this.colorScale);var scaledAlpha=this.alphaScale==1?alphaVar:alphaVar+" * "+valToFloatLiteral(this.alphaScale);var line=["vec4 "+passOutputVar," = ","vec4(",scaledColor,", ",scaledAlpha,")",";"].join("");return[].concat(colorLines,alphaLines,[line])}}return abort_noSupport("Unsupported TexEnv mode: "+ptrToString(this.mode))};CTexEnv.prototype.genCombinerLines=function CTexEnv_getCombinerLines(isColor,outputVar,passInputVar,texUnitID,combiner,srcArr,opArr){var argsNeeded=null;switch(combiner){case GL_REPLACE:argsNeeded=1;break;case GL_MODULATE:case GL_ADD:case GL_SUBTRACT:argsNeeded=2;break;case GL_INTERPOLATE:argsNeeded=3;break;default:return abort_noSupport("Unsupported combiner: "+ptrToString(combiner))}var constantExpr=["vec4(",valToFloatLiteral(this.envColor[0]),", ",valToFloatLiteral(this.envColor[1]),", ",valToFloatLiteral(this.envColor[2]),", ",valToFloatLiteral(this.envColor[3]),")"].join("");var src0Expr=argsNeeded>=1?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[0],opArr[0]):null;var src1Expr=argsNeeded>=2?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[1],opArr[1]):null;var src2Expr=argsNeeded>=3?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[2],opArr[2]):null;var outputType=isColor?"vec3":"float";var lines=null;switch(combiner){case GL_REPLACE:{lines=[`${outputType} ${outputVar} = ${src0Expr};`];break}case GL_MODULATE:{lines=[`${outputType} ${outputVar} = ${src0Expr} * ${src1Expr};`];break}case GL_ADD:{lines=[`${outputType} ${outputVar} = ${src0Expr} + ${src1Expr};`];break}case GL_SUBTRACT:{lines=[`${outputType} ${outputVar} = ${src0Expr} - ${src1Expr};`];break}case GL_INTERPOLATE:{var prefix=`${TEXENVJIT_NAMESPACE_PREFIX}env${texUnitID}_`;var arg2Var=`${prefix}colorSrc2`;var arg2Type=getTypeFromCombineOp(this.colorOp[2]);lines=[`${arg2Type} ${arg2Var} = ${src2Expr};`,`${outputType} ${outputVar} = ${src0Expr} * ${arg2Var} + ${src1Expr} * (1.0 - ${arg2Var});`];break}default:return abort_sanity("Unmatched TexEnv.colorCombiner?")}return lines};return{init:(gl,specifiedMaxTextureImageUnits)=>{var maxTexUnits=0;if(specifiedMaxTextureImageUnits){maxTexUnits=specifiedMaxTextureImageUnits}else if(gl){maxTexUnits=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)}assert(maxTexUnits>0);s_texUnits=[];for(var i=0;i{TEX_UNIT_UNIFORM_PREFIX=uTexUnitPrefix;TEX_COORD_VARYING_PREFIX=vTexCoordPrefix;PRIM_COLOR_VARYING=vPrimColor;TEX_MATRIX_UNIFORM_PREFIX=uTexMatrixPrefix},genAllPassLines:(resultDest,indentSize=0)=>{s_requiredTexUnitsForPass.length=0;var lines=[];var lastPassVar=PRIM_COLOR_VARYING;for(var i=0;is_requiredTexUnitsForPass,getActiveTexture:()=>s_activeTexture,traverseState:keyView=>{for(var texUnit of s_texUnits){texUnit.traverseState(keyView)}},getTexUnitType:texUnitID=>{assert(texUnitID>=0&&texUnitID{s_activeTexture=texture-GL_TEXTURE0;if(GLImmediate.currentMatrix>=2){GLImmediate.currentMatrix=2+s_activeTexture}},hook_enable:cap=>{var cur=getCurTexUnit();switch(cap){case GL_TEXTURE_1D:if(!cur.enabled_tex1D){GLImmediate.currentRenderer=null;cur.enabled_tex1D=true;cur.texTypesEnabled|=1}break;case GL_TEXTURE_2D:if(!cur.enabled_tex2D){GLImmediate.currentRenderer=null;cur.enabled_tex2D=true;cur.texTypesEnabled|=2}break;case GL_TEXTURE_3D:if(!cur.enabled_tex3D){GLImmediate.currentRenderer=null;cur.enabled_tex3D=true;cur.texTypesEnabled|=4}break;case GL_TEXTURE_CUBE_MAP:if(!cur.enabled_texCube){GLImmediate.currentRenderer=null;cur.enabled_texCube=true;cur.texTypesEnabled|=8}break}},hook_disable:cap=>{var cur=getCurTexUnit();switch(cap){case GL_TEXTURE_1D:if(cur.enabled_tex1D){GLImmediate.currentRenderer=null;cur.enabled_tex1D=false;cur.texTypesEnabled&=~1}break;case GL_TEXTURE_2D:if(cur.enabled_tex2D){GLImmediate.currentRenderer=null;cur.enabled_tex2D=false;cur.texTypesEnabled&=~2}break;case GL_TEXTURE_3D:if(cur.enabled_tex3D){GLImmediate.currentRenderer=null;cur.enabled_tex3D=false;cur.texTypesEnabled&=~4}break;case GL_TEXTURE_CUBE_MAP:if(cur.enabled_texCube){GLImmediate.currentRenderer=null;cur.enabled_texCube=false;cur.texTypesEnabled&=~8}break}},hook_texEnvf(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_RGB_SCALE:if(env.colorScale!=param){env.invalidateKey();env.colorScale=param}break;case GL_ALPHA_SCALE:if(env.alphaScale!=param){env.invalidateKey();env.alphaScale=param}break;default:err("WARNING: Unhandled `pname` in call to `glTexEnvf`.")}},hook_texEnvi(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_MODE:if(env.mode!=param){env.invalidateKey();env.mode=param}break;case GL_COMBINE_RGB:if(env.colorCombiner!=param){env.invalidateKey();env.colorCombiner=param}break;case GL_COMBINE_ALPHA:if(env.alphaCombiner!=param){env.invalidateKey();env.alphaCombiner=param}break;case GL_SRC0_RGB:if(env.colorSrc[0]!=param){env.invalidateKey();env.colorSrc[0]=param}break;case GL_SRC1_RGB:if(env.colorSrc[1]!=param){env.invalidateKey();env.colorSrc[1]=param}break;case GL_SRC2_RGB:if(env.colorSrc[2]!=param){env.invalidateKey();env.colorSrc[2]=param}break;case GL_SRC0_ALPHA:if(env.alphaSrc[0]!=param){env.invalidateKey();env.alphaSrc[0]=param}break;case GL_SRC1_ALPHA:if(env.alphaSrc[1]!=param){env.invalidateKey();env.alphaSrc[1]=param}break;case GL_SRC2_ALPHA:if(env.alphaSrc[2]!=param){env.invalidateKey();env.alphaSrc[2]=param}break;case GL_OPERAND0_RGB:if(env.colorOp[0]!=param){env.invalidateKey();env.colorOp[0]=param}break;case GL_OPERAND1_RGB:if(env.colorOp[1]!=param){env.invalidateKey();env.colorOp[1]=param}break;case GL_OPERAND2_RGB:if(env.colorOp[2]!=param){env.invalidateKey();env.colorOp[2]=param}break;case GL_OPERAND0_ALPHA:if(env.alphaOp[0]!=param){env.invalidateKey();env.alphaOp[0]=param}break;case GL_OPERAND1_ALPHA:if(env.alphaOp[1]!=param){env.invalidateKey();env.alphaOp[1]=param}break;case GL_OPERAND2_ALPHA:if(env.alphaOp[2]!=param){env.invalidateKey();env.alphaOp[2]=param}break;case GL_RGB_SCALE:if(env.colorScale!=param){env.invalidateKey();env.colorScale=param}break;case GL_ALPHA_SCALE:if(env.alphaScale!=param){env.invalidateKey();env.alphaScale=param}break;default:err("WARNING: Unhandled `pname` in call to `glTexEnvi`.")}},hook_texEnvfv(target,pname,params){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_COLOR:{for(var i=0;i<4;i++){var param=HEAPF32[params+i*4>>2];if(env.envColor[i]!=param){env.invalidateKey();env.envColor[i]=param}}break}default:err("WARNING: Unhandled `pname` in call to `glTexEnvfv`.")}},hook_getTexEnviv(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_MODE:HEAP32[param>>2]=env.mode;checkInt32(env.mode);return;case GL_TEXTURE_ENV_COLOR:HEAP32[param>>2]=Math.max(Math.min(env.envColor[0]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[0]*255,255,-255)));HEAP32[param+1>>2]=Math.max(Math.min(env.envColor[1]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[1]*255,255,-255)));HEAP32[param+2>>2]=Math.max(Math.min(env.envColor[2]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[2]*255,255,-255)));HEAP32[param+3>>2]=Math.max(Math.min(env.envColor[3]*255,255,-255));checkInt32(Math.max(Math.min(env.envColor[3]*255,255,-255)));return;case GL_COMBINE_RGB:HEAP32[param>>2]=env.colorCombiner;checkInt32(env.colorCombiner);return;case GL_COMBINE_ALPHA:HEAP32[param>>2]=env.alphaCombiner;checkInt32(env.alphaCombiner);return;case GL_SRC0_RGB:HEAP32[param>>2]=env.colorSrc[0];checkInt32(env.colorSrc[0]);return;case GL_SRC1_RGB:HEAP32[param>>2]=env.colorSrc[1];checkInt32(env.colorSrc[1]);return;case GL_SRC2_RGB:HEAP32[param>>2]=env.colorSrc[2];checkInt32(env.colorSrc[2]);return;case GL_SRC0_ALPHA:HEAP32[param>>2]=env.alphaSrc[0];checkInt32(env.alphaSrc[0]);return;case GL_SRC1_ALPHA:HEAP32[param>>2]=env.alphaSrc[1];checkInt32(env.alphaSrc[1]);return;case GL_SRC2_ALPHA:HEAP32[param>>2]=env.alphaSrc[2];checkInt32(env.alphaSrc[2]);return;case GL_OPERAND0_RGB:HEAP32[param>>2]=env.colorOp[0];checkInt32(env.colorOp[0]);return;case GL_OPERAND1_RGB:HEAP32[param>>2]=env.colorOp[1];checkInt32(env.colorOp[1]);return;case GL_OPERAND2_RGB:HEAP32[param>>2]=env.colorOp[2];checkInt32(env.colorOp[2]);return;case GL_OPERAND0_ALPHA:HEAP32[param>>2]=env.alphaOp[0];checkInt32(env.alphaOp[0]);return;case GL_OPERAND1_ALPHA:HEAP32[param>>2]=env.alphaOp[1];checkInt32(env.alphaOp[1]);return;case GL_OPERAND2_ALPHA:HEAP32[param>>2]=env.alphaOp[2];checkInt32(env.alphaOp[2]);return;case GL_RGB_SCALE:HEAP32[param>>2]=env.colorScale;checkInt32(env.colorScale);return;case GL_ALPHA_SCALE:HEAP32[param>>2]=env.alphaScale;checkInt32(env.alphaScale);return;default:err("WARNING: Unhandled `pname` in call to `glGetTexEnvi`.")}},hook_getTexEnvfv:(target,pname,param)=>{if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_COLOR:HEAPF32[param>>2]=env.envColor[0];HEAPF32[param+4>>2]=env.envColor[1];HEAPF32[param+8>>2]=env.envColor[2];HEAPF32[param+12>>2]=env.envColor[3];return}}}},vertexData:null,vertexDataU8:null,tempData:null,indexData:null,vertexCounter:0,mode:-1,rendererCache:null,rendererComponents:[],rendererComponentPointer:0,lastRenderer:null,lastArrayBuffer:null,lastProgram:null,lastStride:-1,matrix:[],matrixStack:[],currentMatrix:0,tempMatrix:null,matricesModified:false,useTextureMatrix:false,VERTEX:0,NORMAL:1,COLOR:2,TEXTURE0:3,NUM_ATTRIBUTES:-1,MAX_TEXTURES:-1,totalEnabledClientAttributes:0,enabledClientAttributes:[0,0],clientAttributes:[],liveClientAttributes:[],currentRenderer:null,modifiedClientAttributes:false,clientActiveTexture:0,clientColor:null,usedTexUnitList:[],fixedFunctionProgram:null,setClientAttribute(name,size,type,stride,pointer){var attrib=GLImmediate.clientAttributes[name];if(!attrib){for(var i=0;i<=name;i++){GLImmediate.clientAttributes[i]||={name,size,type,stride,pointer,offset:0}}}else{attrib.name=name;attrib.size=size;attrib.type=type;attrib.stride=stride;attrib.pointer=pointer;attrib.offset=0}GLImmediate.modifiedClientAttributes=true},addRendererComponent(name,size,type){if(!GLImmediate.rendererComponents[name]){GLImmediate.rendererComponents[name]=1;if(GLImmediate.enabledClientAttributes[name]){warnOnce("Warning: glTexCoord used after EnableClientState for TEXTURE_COORD_ARRAY for TEXTURE0. Disabling TEXTURE_COORD_ARRAY...")}GLImmediate.enabledClientAttributes[name]=true;GLImmediate.setClientAttribute(name,size,type,0,GLImmediate.rendererComponentPointer);GLImmediate.rendererComponentPointer+=size*GL.byteSizeByType[type-GL.byteSizeByTypeRoot]}else{GLImmediate.rendererComponents[name]++}},disableBeginEndClientAttributes(){for(var i=0;i0&&this.normalLocation>=0;this.hasColor=this.colorLocation===0||this.colorLocation>0;this.floatType=GLctx.FLOAT;this.fogColorLocation=GLctx.getUniformLocation(this.program,"u_fogColor");this.fogEndLocation=GLctx.getUniformLocation(this.program,"u_fogEnd");this.fogScaleLocation=GLctx.getUniformLocation(this.program,"u_fogScale");this.fogDensityLocation=GLctx.getUniformLocation(this.program,"u_fogDensity");this.hasFog=!!(this.fogColorLocation||this.fogEndLocation||this.fogScaleLocation||this.fogDensityLocation);this.pointSizeLocation=GLctx.getUniformLocation(this.program,"u_pointSize");this.hasClipPlane=false;this.clipPlaneEquationLocation=[];for(var clipPlaneId=0;clipPlaneId>2,end>>2))}if(!GL.currProgram){if(GLImmediate.fixedFunctionProgram!=this.program){GLctx.useProgram(this.program);GLImmediate.fixedFunctionProgram=this.program}}if(this.modelViewLocation&&this.modelViewMatrixVersion!=GLImmediate.matrixVersion[0]){this.modelViewMatrixVersion=GLImmediate.matrixVersion[0];GLctx.uniformMatrix4fv(this.modelViewLocation,false,GLImmediate.matrix[0]);if(GLEmulation.lightEnabled){var tmpMVinv=GLImmediate.matrixLib.mat4.create(GLImmediate.matrix[0]);GLImmediate.matrixLib.mat4.inverse(tmpMVinv);GLImmediate.matrixLib.mat4.transpose(tmpMVinv);GLctx.uniformMatrix3fv(this.normalMatrixLocation,false,GLImmediate.matrixLib.mat4.toMat3(tmpMVinv))}}if(this.projectionLocation&&this.projectionMatrixVersion!=GLImmediate.matrixVersion[1]){this.projectionMatrixVersion=GLImmediate.matrixVersion[1];GLctx.uniformMatrix4fv(this.projectionLocation,false,GLImmediate.matrix[1])}var clientAttributes=GLImmediate.clientAttributes;var posAttr=clientAttributes[GLImmediate.VERTEX];GLctx.vertexAttribPointer(this.positionLocation,posAttr.size,posAttr.type,false,GLImmediate.stride,posAttr.offset);GLctx.enableVertexAttribArray(this.positionLocation);if(this.hasNormal){var normalAttr=clientAttributes[GLImmediate.NORMAL];GLctx.vertexAttribPointer(this.normalLocation,normalAttr.size,normalAttr.type,true,GLImmediate.stride,normalAttr.offset);GLctx.enableVertexAttribArray(this.normalLocation)}if(this.hasTextures){for(var i=0;i=0){GLctx.disableVertexAttribArray(this.texCoordLocations[i])}}}if(this.hasColor){GLctx.disableVertexAttribArray(this.colorLocation)}if(this.hasNormal){GLctx.disableVertexAttribArray(this.normalLocation)}if(!GL.currProgram){GLctx.useProgram(null);GLImmediate.fixedFunctionProgram=0}if(!GLctx.currentArrayBufferBinding){GLctx.bindBuffer(GLctx.ARRAY_BUFFER,null);GLImmediate.lastArrayBuffer=null}GLImmediate.matricesModified=true};this.init()}return new Renderer},setupFuncs(){GLImmediate.MapTreeLib=GLImmediate.spawnMapTreeLib();GLImmediate.spawnMapTreeLib=null;GLImmediate.TexEnvJIT=GLImmediate.spawnTexEnvJIT();GLImmediate.spawnTexEnvJIT=null;GLImmediate.setupHooks()},setupHooks(){if(!GLEmulation.hasRunInit){GLEmulation.init()}var glActiveTexture=_glActiveTexture;_glActiveTexture=_emscripten_glActiveTexture=texture=>{GLImmediate.TexEnvJIT.hook_activeTexture(texture);glActiveTexture(texture)};var glEnable=_glEnable;_glEnable=_emscripten_glEnable=cap=>{GLImmediate.TexEnvJIT.hook_enable(cap);glEnable(cap)};var glDisable=_glDisable;_glDisable=_emscripten_glDisable=cap=>{GLImmediate.TexEnvJIT.hook_disable(cap);glDisable(cap)};_glTexEnvf=_emscripten_glTexEnvf=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvf(target,pname,param)};_glTexEnvi=_emscripten_glTexEnvi=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvi(target,pname,param)};_glTexEnvfv=_emscripten_glTexEnvfv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvfv(target,pname,param)};_glGetTexEnviv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_getTexEnviv(target,pname,param)};_glGetTexEnvfv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_getTexEnvfv(target,pname,param)};var glGetIntegerv=_glGetIntegerv;_glGetIntegerv=_emscripten_glGetIntegerv=(pname,params)=>{switch(pname){case 35725:{var cur=GLctx.getParameter(GLctx.CURRENT_PROGRAM);if(cur==GLImmediate.fixedFunctionProgram){HEAP32[params>>2]=0;checkInt32(0);return}break}}glGetIntegerv(pname,params)}},initted:false,init(){err("WARNING: using emscripten GL immediate mode emulation. This is very limited in what it supports");GLImmediate.initted=true;if(!Browser.useWebGL)return;GLImmediate.MAX_TEXTURES=Math.min(Module["GL_MAX_TEXTURE_IMAGE_UNITS"]||GLctx.getParameter(GLctx.MAX_TEXTURE_IMAGE_UNITS),28);GLImmediate.TexEnvJIT.init(GLctx,GLImmediate.MAX_TEXTURES);GLImmediate.NUM_ATTRIBUTES=3+GLImmediate.MAX_TEXTURES;GLImmediate.clientAttributes=[];GLEmulation.enabledClientAttribIndices=[];for(var i=0;i>2);GLImmediate.indexData=new Uint16Array(GL.MAX_TEMP_BUFFER_SIZE>>1);GLImmediate.vertexDataU8=new Uint8Array(GLImmediate.tempData.buffer);GL.generateTempBuffers(true,GL.currentContext);GLImmediate.clientColor=new Float32Array([1,1,1,1])},prepareClientAttributes(count,beginEnd){if(!GLImmediate.modifiedClientAttributes){GLImmediate.vertexCounter=GLImmediate.stride*count/4;return}GLImmediate.modifiedClientAttributes=false;var clientStartPointer=4294967295;var bytes=0;var minStride=4294967295;var maxStride=0;var attributes=GLImmediate.liveClientAttributes;attributes.length=0;for(var i=0;i<3+GLImmediate.MAX_TEXTURES;i++){if(GLImmediate.enabledClientAttributes[i]){var attr=GLImmediate.clientAttributes[i];attributes.push(attr);clientStartPointer=Math.min(clientStartPointer,attr.pointer);attr.sizeBytes=attr.size*GL.byteSizeByType[attr.type-GL.byteSizeByTypeRoot];bytes+=attr.sizeBytes;minStride=Math.min(minStride,attr.stride);maxStride=Math.max(maxStride,attr.stride)}}if((minStride!=maxStride||maxStride>2];HEAP32[start+attr.offset+(bytes*j+k)>>2]=val;checkInt32(val)}}}else{for(var j=0;j=0||!numProvidedIndexes);var renderer=GLImmediate.getRenderer();var numVertices=4*GLImmediate.vertexCounter/GLImmediate.stride;if(!numVertices)return;assert(numVertices%1==0,"`numVertices` must be an integer.");var emulatedElementArrayBuffer=false;var numIndexes=0;if(numProvidedIndexes){numIndexes=numProvidedIndexes;if(!GLctx.currentArrayBufferBinding&&GLImmediate.firstVertex>GLImmediate.lastVertex){assert(!GLctx.currentElementArrayBufferBinding);for(var i=0;i>1];GLImmediate.firstVertex=Math.min(GLImmediate.firstVertex,currIndex);GLImmediate.lastVertex=Math.max(GLImmediate.lastVertex,currIndex+1)}}if(!GLctx.currentElementArrayBufferBinding){assert(numProvidedIndexes<<1<=GL.MAX_TEMP_BUFFER_SIZE,"too many immediate mode indexes (a)");var indexBuffer=GL.getTempIndexBuffer(numProvidedIndexes<<1);GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,indexBuffer);GLctx.bufferSubData(GLctx.ELEMENT_ARRAY_BUFFER,0,HEAPU16.subarray(ptr>>1,ptr+(numProvidedIndexes<<1)>>1));ptr=0;emulatedElementArrayBuffer=true}}else if(GLImmediate.mode>6){if(GLImmediate.mode!=7)abort("unsupported immediate mode "+GLImmediate.mode);assert(GLImmediate.firstVertex%4==0);ptr=GLImmediate.firstVertex*3;var numQuads=numVertices/4;numIndexes=numQuads*6;assert(ptr+(numIndexes<<1)<=GL.MAX_TEMP_BUFFER_SIZE,"too many immediate mode indexes (b)");GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,GL.currentContext.tempQuadIndexBuffer);emulatedElementArrayBuffer=true;GLImmediate.mode=GLctx.TRIANGLES}renderer.prepare();if(numIndexes){GLctx.drawElements(GLImmediate.mode,numIndexes,GLctx.UNSIGNED_SHORT,ptr)}else{GLctx.drawArrays(GLImmediate.mode,startIndex,numVertices)}if(emulatedElementArrayBuffer){GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,GL.buffers[GLctx.currentElementArrayBufferBinding]||null)}renderer.cleanup()}};GLImmediate.matrixLib=(()=>{var vec3={};var mat3={};var mat4={};var quat4={};var MatrixArray=Float32Array;vec3.create=function(vec){var dest=new MatrixArray(3);if(vec){dest[0]=vec[0];dest[1]=vec[1];dest[2]=vec[2]}else{dest[0]=dest[1]=dest[2]=0}return dest};vec3.set=function(vec,dest){dest[0]=vec[0];dest[1]=vec[1];dest[2]=vec[2];return dest};vec3.add=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]+=vec2[0];vec[1]+=vec2[1];vec[2]+=vec2[2];return vec}dest[0]=vec[0]+vec2[0];dest[1]=vec[1]+vec2[1];dest[2]=vec[2]+vec2[2];return dest};vec3.subtract=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]-=vec2[0];vec[1]-=vec2[1];vec[2]-=vec2[2];return vec}dest[0]=vec[0]-vec2[0];dest[1]=vec[1]-vec2[1];dest[2]=vec[2]-vec2[2];return dest};vec3.multiply=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]*=vec2[0];vec[1]*=vec2[1];vec[2]*=vec2[2];return vec}dest[0]=vec[0]*vec2[0];dest[1]=vec[1]*vec2[1];dest[2]=vec[2]*vec2[2];return dest};vec3.negate=function(vec,dest){if(!dest){dest=vec}dest[0]=-vec[0];dest[1]=-vec[1];dest[2]=-vec[2];return dest};vec3.scale=function(vec,val,dest){if(!dest||vec===dest){vec[0]*=val;vec[1]*=val;vec[2]*=val;return vec}dest[0]=vec[0]*val;dest[1]=vec[1]*val;dest[2]=vec[2]*val;return dest};vec3.normalize=function(vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],len=Math.sqrt(x*x+y*y+z*z);if(!len){dest[0]=0;dest[1]=0;dest[2]=0;return dest}else if(len===1){dest[0]=x;dest[1]=y;dest[2]=z;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;return dest};vec3.cross=function(vec,vec2,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],x2=vec2[0],y2=vec2[1],z2=vec2[2];dest[0]=y*z2-z*y2;dest[1]=z*x2-x*z2;dest[2]=x*y2-y*x2;return dest};vec3.length=function(vec){var x=vec[0],y=vec[1],z=vec[2];return Math.sqrt(x*x+y*y+z*z)};vec3.dot=function(vec,vec2){return vec[0]*vec2[0]+vec[1]*vec2[1]+vec[2]*vec2[2]};vec3.direction=function(vec,vec2,dest){if(!dest){dest=vec}var x=vec[0]-vec2[0],y=vec[1]-vec2[1],z=vec[2]-vec2[2],len=Math.sqrt(x*x+y*y+z*z);if(!len){dest[0]=0;dest[1]=0;dest[2]=0;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;return dest};vec3.lerp=function(vec,vec2,lerp,dest){if(!dest){dest=vec}dest[0]=vec[0]+lerp*(vec2[0]-vec[0]);dest[1]=vec[1]+lerp*(vec2[1]-vec[1]);dest[2]=vec[2]+lerp*(vec2[2]-vec[2]);return dest};vec3.dist=function(vec,vec2){var x=vec2[0]-vec[0],y=vec2[1]-vec[1],z=vec2[2]-vec[2];return Math.sqrt(x*x+y*y+z*z)};vec3.unproject=function(vec,view,proj,viewport,dest){if(!dest){dest=vec}var m=mat4.create();var v=new MatrixArray(4);v[0]=(vec[0]-viewport[0])*2/viewport[2]-1;v[1]=(vec[1]-viewport[1])*2/viewport[3]-1;v[2]=2*vec[2]-1;v[3]=1;mat4.multiply(proj,view,m);if(!mat4.inverse(m)){return null}mat4.multiplyVec4(m,v);if(v[3]===0){return null}dest[0]=v[0]/v[3];dest[1]=v[1]/v[3];dest[2]=v[2]/v[3];return dest};vec3.str=function(vec){return"["+vec[0]+", "+vec[1]+", "+vec[2]+"]"};mat3.create=function(mat){var dest=new MatrixArray(9);if(mat){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8]}return dest};mat3.set=function(mat,dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];return dest};mat3.identity=function(dest){if(!dest){dest=mat3.create()}dest[0]=1;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=1;dest[5]=0;dest[6]=0;dest[7]=0;dest[8]=1;return dest};mat3.transpose=function(mat,dest){if(!dest||mat===dest){var a01=mat[1],a02=mat[2],a12=mat[5];mat[1]=mat[3];mat[2]=mat[6];mat[3]=a01;mat[5]=mat[7];mat[6]=a02;mat[7]=a12;return mat}dest[0]=mat[0];dest[1]=mat[3];dest[2]=mat[6];dest[3]=mat[1];dest[4]=mat[4];dest[5]=mat[7];dest[6]=mat[2];dest[7]=mat[5];dest[8]=mat[8];return dest};mat3.toMat4=function(mat,dest){if(!dest){dest=mat4.create()}dest[15]=1;dest[14]=0;dest[13]=0;dest[12]=0;dest[11]=0;dest[10]=mat[8];dest[9]=mat[7];dest[8]=mat[6];dest[7]=0;dest[6]=mat[5];dest[5]=mat[4];dest[4]=mat[3];dest[3]=0;dest[2]=mat[2];dest[1]=mat[1];dest[0]=mat[0];return dest};mat3.str=function(mat){return"["+mat[0]+", "+mat[1]+", "+mat[2]+", "+mat[3]+", "+mat[4]+", "+mat[5]+", "+mat[6]+", "+mat[7]+", "+mat[8]+"]"};mat4.create=function(mat){var dest=new MatrixArray(16);if(mat){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}return dest};mat4.set=function(mat,dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15];return dest};mat4.identity=function(dest){if(!dest){dest=mat4.create()}dest[0]=1;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=1;dest[6]=0;dest[7]=0;dest[8]=0;dest[9]=0;dest[10]=1;dest[11]=0;dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};mat4.transpose=function(mat,dest){if(!dest||mat===dest){var a01=mat[1],a02=mat[2],a03=mat[3],a12=mat[6],a13=mat[7],a23=mat[11];mat[1]=mat[4];mat[2]=mat[8];mat[3]=mat[12];mat[4]=a01;mat[6]=mat[9];mat[7]=mat[13];mat[8]=a02;mat[9]=a12;mat[11]=mat[14];mat[12]=a03;mat[13]=a13;mat[14]=a23;return mat}dest[0]=mat[0];dest[1]=mat[4];dest[2]=mat[8];dest[3]=mat[12];dest[4]=mat[1];dest[5]=mat[5];dest[6]=mat[9];dest[7]=mat[13];dest[8]=mat[2];dest[9]=mat[6];dest[10]=mat[10];dest[11]=mat[14];dest[12]=mat[3];dest[13]=mat[7];dest[14]=mat[11];dest[15]=mat[15];return dest};mat4.determinant=function(mat){var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15];return a30*a21*a12*a03-a20*a31*a12*a03-a30*a11*a22*a03+a10*a31*a22*a03+a20*a11*a32*a03-a10*a21*a32*a03-a30*a21*a02*a13+a20*a31*a02*a13+a30*a01*a22*a13-a00*a31*a22*a13-a20*a01*a32*a13+a00*a21*a32*a13+a30*a11*a02*a23-a10*a31*a02*a23-a30*a01*a12*a23+a00*a31*a12*a23+a10*a01*a32*a23-a00*a11*a32*a23-a20*a11*a02*a33+a10*a21*a02*a33+a20*a01*a12*a33-a00*a21*a12*a33-a10*a01*a22*a33+a00*a11*a22*a33};mat4.inverse=function(mat,dest){if(!dest){dest=mat}var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,d=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06,invDet;if(!d){return null}invDet=1/d;dest[0]=(a11*b11-a12*b10+a13*b09)*invDet;dest[1]=(-a01*b11+a02*b10-a03*b09)*invDet;dest[2]=(a31*b05-a32*b04+a33*b03)*invDet;dest[3]=(-a21*b05+a22*b04-a23*b03)*invDet;dest[4]=(-a10*b11+a12*b08-a13*b07)*invDet;dest[5]=(a00*b11-a02*b08+a03*b07)*invDet;dest[6]=(-a30*b05+a32*b02-a33*b01)*invDet;dest[7]=(a20*b05-a22*b02+a23*b01)*invDet;dest[8]=(a10*b10-a11*b08+a13*b06)*invDet;dest[9]=(-a00*b10+a01*b08-a03*b06)*invDet;dest[10]=(a30*b04-a31*b02+a33*b00)*invDet;dest[11]=(-a20*b04+a21*b02-a23*b00)*invDet;dest[12]=(-a10*b09+a11*b07-a12*b06)*invDet;dest[13]=(a00*b09-a01*b07+a02*b06)*invDet;dest[14]=(-a30*b03+a31*b01-a32*b00)*invDet;dest[15]=(a20*b03-a21*b01+a22*b00)*invDet;return dest};mat4.toRotationMat=function(mat,dest){if(!dest){dest=mat4.create()}dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};mat4.toMat3=function(mat,dest){if(!dest){dest=mat3.create()}dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[4];dest[4]=mat[5];dest[5]=mat[6];dest[6]=mat[8];dest[7]=mat[9];dest[8]=mat[10];return dest};mat4.toInverseMat3=function(mat,dest){var a00=mat[0],a01=mat[1],a02=mat[2],a10=mat[4],a11=mat[5],a12=mat[6],a20=mat[8],a21=mat[9],a22=mat[10],b01=a22*a11-a12*a21,b11=-a22*a10+a12*a20,b21=a21*a10-a11*a20,d=a00*b01+a01*b11+a02*b21,id;if(!d){return null}id=1/d;if(!dest){dest=mat3.create()}dest[0]=b01*id;dest[1]=(-a22*a01+a02*a21)*id;dest[2]=(a12*a01-a02*a11)*id;dest[3]=b11*id;dest[4]=(a22*a00-a02*a20)*id;dest[5]=(-a12*a00+a02*a10)*id;dest[6]=b21*id;dest[7]=(-a21*a00+a01*a20)*id;dest[8]=(a11*a00-a01*a10)*id;return dest};mat4.multiply=function(mat,mat2,dest){if(!dest){dest=mat}var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15],b00=mat2[0],b01=mat2[1],b02=mat2[2],b03=mat2[3],b10=mat2[4],b11=mat2[5],b12=mat2[6],b13=mat2[7],b20=mat2[8],b21=mat2[9],b22=mat2[10],b23=mat2[11],b30=mat2[12],b31=mat2[13],b32=mat2[14],b33=mat2[15];dest[0]=b00*a00+b01*a10+b02*a20+b03*a30;dest[1]=b00*a01+b01*a11+b02*a21+b03*a31;dest[2]=b00*a02+b01*a12+b02*a22+b03*a32;dest[3]=b00*a03+b01*a13+b02*a23+b03*a33;dest[4]=b10*a00+b11*a10+b12*a20+b13*a30;dest[5]=b10*a01+b11*a11+b12*a21+b13*a31;dest[6]=b10*a02+b11*a12+b12*a22+b13*a32;dest[7]=b10*a03+b11*a13+b12*a23+b13*a33;dest[8]=b20*a00+b21*a10+b22*a20+b23*a30;dest[9]=b20*a01+b21*a11+b22*a21+b23*a31;dest[10]=b20*a02+b21*a12+b22*a22+b23*a32;dest[11]=b20*a03+b21*a13+b22*a23+b23*a33;dest[12]=b30*a00+b31*a10+b32*a20+b33*a30;dest[13]=b30*a01+b31*a11+b32*a21+b33*a31;dest[14]=b30*a02+b31*a12+b32*a22+b33*a32;dest[15]=b30*a03+b31*a13+b32*a23+b33*a33;return dest};mat4.multiplyVec3=function(mat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2];dest[0]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12];dest[1]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13];dest[2]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14];return dest};mat4.multiplyVec4=function(mat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],w=vec[3];dest[0]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12]*w;dest[1]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13]*w;dest[2]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14]*w;dest[3]=mat[3]*x+mat[7]*y+mat[11]*z+mat[15]*w;return dest};mat4.translate=function(mat,vec,dest){var x=vec[0],y=vec[1],z=vec[2],a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23;if(!dest||mat===dest){mat[12]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12];mat[13]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13];mat[14]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14];mat[15]=mat[3]*x+mat[7]*y+mat[11]*z+mat[15];return mat}a00=mat[0];a01=mat[1];a02=mat[2];a03=mat[3];a10=mat[4];a11=mat[5];a12=mat[6];a13=mat[7];a20=mat[8];a21=mat[9];a22=mat[10];a23=mat[11];dest[0]=a00;dest[1]=a01;dest[2]=a02;dest[3]=a03;dest[4]=a10;dest[5]=a11;dest[6]=a12;dest[7]=a13;dest[8]=a20;dest[9]=a21;dest[10]=a22;dest[11]=a23;dest[12]=a00*x+a10*y+a20*z+mat[12];dest[13]=a01*x+a11*y+a21*z+mat[13];dest[14]=a02*x+a12*y+a22*z+mat[14];dest[15]=a03*x+a13*y+a23*z+mat[15];return dest};mat4.scale=function(mat,vec,dest){var x=vec[0],y=vec[1],z=vec[2];if(!dest||mat===dest){mat[0]*=x;mat[1]*=x;mat[2]*=x;mat[3]*=x;mat[4]*=y;mat[5]*=y;mat[6]*=y;mat[7]*=y;mat[8]*=z;mat[9]*=z;mat[10]*=z;mat[11]*=z;return mat}dest[0]=mat[0]*x;dest[1]=mat[1]*x;dest[2]=mat[2]*x;dest[3]=mat[3]*x;dest[4]=mat[4]*y;dest[5]=mat[5]*y;dest[6]=mat[6]*y;dest[7]=mat[7]*y;dest[8]=mat[8]*z;dest[9]=mat[9]*z;dest[10]=mat[10]*z;dest[11]=mat[11]*z;dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15];return dest};mat4.rotate=function(mat,angle,axis,dest){var x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z),s,c,t,a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,b00,b01,b02,b10,b11,b12,b20,b21,b22;if(!len){return null}if(len!==1){len=1/len;x*=len;y*=len;z*=len}s=Math.sin(angle);c=Math.cos(angle);t=1-c;a00=mat[0];a01=mat[1];a02=mat[2];a03=mat[3];a10=mat[4];a11=mat[5];a12=mat[6];a13=mat[7];a20=mat[8];a21=mat[9];a22=mat[10];a23=mat[11];b00=x*x*t+c;b01=y*x*t+z*s;b02=z*x*t-y*s;b10=x*y*t-z*s;b11=y*y*t+c;b12=z*y*t+x*s;b20=x*z*t+y*s;b21=y*z*t-x*s;b22=z*z*t+c;if(!dest){dest=mat}else if(mat!==dest){dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*b00+a10*b01+a20*b02;dest[1]=a01*b00+a11*b01+a21*b02;dest[2]=a02*b00+a12*b01+a22*b02;dest[3]=a03*b00+a13*b01+a23*b02;dest[4]=a00*b10+a10*b11+a20*b12;dest[5]=a01*b10+a11*b11+a21*b12;dest[6]=a02*b10+a12*b11+a22*b12;dest[7]=a03*b10+a13*b11+a23*b12;dest[8]=a00*b20+a10*b21+a20*b22;dest[9]=a01*b20+a11*b21+a21*b22;dest[10]=a02*b20+a12*b21+a22*b22;dest[11]=a03*b20+a13*b21+a23*b22;return dest};mat4.rotateX=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11];if(!dest){dest=mat}else if(mat!==dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[4]=a10*c+a20*s;dest[5]=a11*c+a21*s;dest[6]=a12*c+a22*s;dest[7]=a13*c+a23*s;dest[8]=a10*-s+a20*c;dest[9]=a11*-s+a21*c;dest[10]=a12*-s+a22*c;dest[11]=a13*-s+a23*c;return dest};mat4.rotateY=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11];if(!dest){dest=mat}else if(mat!==dest){dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*c+a20*-s;dest[1]=a01*c+a21*-s;dest[2]=a02*c+a22*-s;dest[3]=a03*c+a23*-s;dest[8]=a00*s+a20*c;dest[9]=a01*s+a21*c;dest[10]=a02*s+a22*c;dest[11]=a03*s+a23*c;return dest};mat4.rotateZ=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7];if(!dest){dest=mat}else if(mat!==dest){dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*c+a10*s;dest[1]=a01*c+a11*s;dest[2]=a02*c+a12*s;dest[3]=a03*c+a13*s;dest[4]=a00*-s+a10*c;dest[5]=a01*-s+a11*c;dest[6]=a02*-s+a12*c;dest[7]=a03*-s+a13*c;return dest};mat4.frustum=function(left,right,bottom,top,near,far,dest){if(!dest){dest=mat4.create()}var rl=right-left,tb=top-bottom,fn=far-near;dest[0]=near*2/rl;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=near*2/tb;dest[6]=0;dest[7]=0;dest[8]=(right+left)/rl;dest[9]=(top+bottom)/tb;dest[10]=-(far+near)/fn;dest[11]=-1;dest[12]=0;dest[13]=0;dest[14]=-(far*near*2)/fn;dest[15]=0;return dest};mat4.perspective=function(fovy,aspect,near,far,dest){var top=near*Math.tan(fovy*Math.PI/360),right=top*aspect;return mat4.frustum(-right,right,-top,top,near,far,dest)};mat4.ortho=function(left,right,bottom,top,near,far,dest){if(!dest){dest=mat4.create()}var rl=right-left,tb=top-bottom,fn=far-near;dest[0]=2/rl;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=2/tb;dest[6]=0;dest[7]=0;dest[8]=0;dest[9]=0;dest[10]=-2/fn;dest[11]=0;dest[12]=-(left+right)/rl;dest[13]=-(top+bottom)/tb;dest[14]=-(far+near)/fn;dest[15]=1;return dest};mat4.lookAt=function(eye,center,up,dest){if(!dest){dest=mat4.create()}var x0,x1,x2,y0,y1,y2,z0,z1,z2,len,eyex=eye[0],eyey=eye[1],eyez=eye[2],upx=up[0],upy=up[1],upz=up[2],centerx=center[0],centery=center[1],centerz=center[2];if(eyex===centerx&&eyey===centery&&eyez===centerz){return mat4.identity(dest)}z0=eyex-centerx;z1=eyey-centery;z2=eyez-centerz;len=1/Math.sqrt(z0*z0+z1*z1+z2*z2);z0*=len;z1*=len;z2*=len;x0=upy*z2-upz*z1;x1=upz*z0-upx*z2;x2=upx*z1-upy*z0;len=Math.sqrt(x0*x0+x1*x1+x2*x2);if(!len){x0=0;x1=0;x2=0}else{len=1/len;x0*=len;x1*=len;x2*=len}y0=z1*x2-z2*x1;y1=z2*x0-z0*x2;y2=z0*x1-z1*x0;len=Math.sqrt(y0*y0+y1*y1+y2*y2);if(!len){y0=0;y1=0;y2=0}else{len=1/len;y0*=len;y1*=len;y2*=len}dest[0]=x0;dest[1]=y0;dest[2]=z0;dest[3]=0;dest[4]=x1;dest[5]=y1;dest[6]=z1;dest[7]=0;dest[8]=x2;dest[9]=y2;dest[10]=z2;dest[11]=0;dest[12]=-(x0*eyex+x1*eyey+x2*eyez);dest[13]=-(y0*eyex+y1*eyey+y2*eyez);dest[14]=-(z0*eyex+z1*eyey+z2*eyez);dest[15]=1;return dest};mat4.fromRotationTranslation=function(quat,vec,dest){if(!dest){dest=mat4.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=0;dest[4]=xy-wz;dest[5]=1-(xx+zz);dest[6]=yz+wx;dest[7]=0;dest[8]=xz+wy;dest[9]=yz-wx;dest[10]=1-(xx+yy);dest[11]=0;dest[12]=vec[0];dest[13]=vec[1];dest[14]=vec[2];dest[15]=1;return dest};mat4.str=function(mat){return"["+mat[0]+", "+mat[1]+", "+mat[2]+", "+mat[3]+", "+mat[4]+", "+mat[5]+", "+mat[6]+", "+mat[7]+", "+mat[8]+", "+mat[9]+", "+mat[10]+", "+mat[11]+", "+mat[12]+", "+mat[13]+", "+mat[14]+", "+mat[15]+"]"};quat4.create=function(quat){var dest=new MatrixArray(4);if(quat){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3]}return dest};quat4.set=function(quat,dest){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3];return dest};quat4.calculateW=function(quat,dest){var x=quat[0],y=quat[1],z=quat[2];if(!dest||quat===dest){quat[3]=-Math.sqrt(Math.abs(1-x*x-y*y-z*z));return quat}dest[0]=x;dest[1]=y;dest[2]=z;dest[3]=-Math.sqrt(Math.abs(1-x*x-y*y-z*z));return dest};quat4.dot=function(quat,quat2){return quat[0]*quat2[0]+quat[1]*quat2[1]+quat[2]*quat2[2]+quat[3]*quat2[3]};quat4.inverse=function(quat,dest){var q0=quat[0],q1=quat[1],q2=quat[2],q3=quat[3],dot=q0*q0+q1*q1+q2*q2+q3*q3,invDot=dot?1/dot:0;if(!dest||quat===dest){quat[0]*=-invDot;quat[1]*=-invDot;quat[2]*=-invDot;quat[3]*=invDot;return quat}dest[0]=-quat[0]*invDot;dest[1]=-quat[1]*invDot;dest[2]=-quat[2]*invDot;dest[3]=quat[3]*invDot;return dest};quat4.conjugate=function(quat,dest){if(!dest||quat===dest){quat[0]*=-1;quat[1]*=-1;quat[2]*=-1;return quat}dest[0]=-quat[0];dest[1]=-quat[1];dest[2]=-quat[2];dest[3]=quat[3];return dest};quat4.length=function(quat){var x=quat[0],y=quat[1],z=quat[2],w=quat[3];return Math.sqrt(x*x+y*y+z*z+w*w)};quat4.normalize=function(quat,dest){if(!dest){dest=quat}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],len=Math.sqrt(x*x+y*y+z*z+w*w);if(len===0){dest[0]=0;dest[1]=0;dest[2]=0;dest[3]=0;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;dest[3]=w*len;return dest};quat4.add=function(quat,quat2,dest){if(!dest||quat===dest){quat[0]+=quat2[0];quat[1]+=quat2[1];quat[2]+=quat2[2];quat[3]+=quat2[3];return quat}dest[0]=quat[0]+quat2[0];dest[1]=quat[1]+quat2[1];dest[2]=quat[2]+quat2[2];dest[3]=quat[3]+quat2[3];return dest};quat4.multiply=function(quat,quat2,dest){if(!dest){dest=quat}var qax=quat[0],qay=quat[1],qaz=quat[2],qaw=quat[3],qbx=quat2[0],qby=quat2[1],qbz=quat2[2],qbw=quat2[3];dest[0]=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;dest[1]=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;dest[2]=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;dest[3]=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;return dest};quat4.multiplyVec3=function(quat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],qx=quat[0],qy=quat[1],qz=quat[2],qw=quat[3],ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;dest[0]=ix*qw+iw*-qx+iy*-qz-iz*-qy;dest[1]=iy*qw+iw*-qy+iz*-qx-ix*-qz;dest[2]=iz*qw+iw*-qz+ix*-qy-iy*-qx;return dest};quat4.scale=function(quat,val,dest){if(!dest||quat===dest){quat[0]*=val;quat[1]*=val;quat[2]*=val;quat[3]*=val;return quat}dest[0]=quat[0]*val;dest[1]=quat[1]*val;dest[2]=quat[2]*val;dest[3]=quat[3]*val;return dest};quat4.toMat3=function(quat,dest){if(!dest){dest=mat3.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=xy-wz;dest[4]=1-(xx+zz);dest[5]=yz+wx;dest[6]=xz+wy;dest[7]=yz-wx;dest[8]=1-(xx+yy);return dest};quat4.toMat4=function(quat,dest){if(!dest){dest=mat4.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=0;dest[4]=xy-wz;dest[5]=1-(xx+zz);dest[6]=yz+wx;dest[7]=0;dest[8]=xz+wy;dest[9]=yz-wx;dest[10]=1-(xx+yy);dest[11]=0;dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};quat4.slerp=function(quat,quat2,slerp,dest){if(!dest){dest=quat}var cosHalfTheta=quat[0]*quat2[0]+quat[1]*quat2[1]+quat[2]*quat2[2]+quat[3]*quat2[3],halfTheta,sinHalfTheta,ratioA,ratioB;if(Math.abs(cosHalfTheta)>=1){if(dest!==quat){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3]}return dest}halfTheta=Math.acos(cosHalfTheta);sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){dest[0]=quat[0]*.5+quat2[0]*.5;dest[1]=quat[1]*.5+quat2[1]*.5;dest[2]=quat[2]*.5+quat2[2]*.5;dest[3]=quat[3]*.5+quat2[3]*.5;return dest}ratioA=Math.sin((1-slerp)*halfTheta)/sinHalfTheta;ratioB=Math.sin(slerp*halfTheta)/sinHalfTheta;dest[0]=quat[0]*ratioA+quat2[0]*ratioB;dest[1]=quat[1]*ratioA+quat2[1]*ratioB;dest[2]=quat[2]*ratioA+quat2[2]*ratioB;dest[3]=quat[3]*ratioA+quat2[3]*ratioB;return dest};quat4.str=function(quat){return"["+quat[0]+", "+quat[1]+", "+quat[2]+", "+quat[3]+"]"};return{vec3,mat3,mat4,quat4}})();var _emscripten_glBegin=mode=>{GLImmediate.enabledClientAttributes_preBegin=GLImmediate.enabledClientAttributes;GLImmediate.enabledClientAttributes=[];GLImmediate.clientAttributes_preBegin=GLImmediate.clientAttributes;GLImmediate.clientAttributes=[];for(var i=0;i{GLctx.beginQuery(target,GL.queries[id])};var _emscripten_glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBeginTransformFeedback=x0=>GLctx.beginTransformFeedback(x0);var _emscripten_glBindBufferBase=(target,index,buffer)=>{GLctx.bindBufferBase(target,index,GL.buffers[buffer])};var _emscripten_glBindBufferRange=(target,index,buffer,offset,ptrsize)=>{GLctx.bindBufferRange(target,index,GL.buffers[buffer],offset,ptrsize)};var _emscripten_glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindProgram=(type,id)=>{assert(id==0)};var _emscripten_glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindSampler=(unit,sampler)=>{GLctx.bindSampler(unit,GL.samplers[sampler])};var _emscripten_glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTransformFeedback=(target,id)=>{GLctx.bindTransformFeedback(target,GL.transformFeedbacks[id])};var _emscripten_glEnableClientState=cap=>{var attrib=GLEmulation.getAttributeFromCapability(cap);if(attrib===null){err(`WARNING: unhandled clientstate: ${cap}`);return}if(!GLImmediate.enabledClientAttributes[attrib]){GLImmediate.enabledClientAttributes[attrib]=true;GLImmediate.totalEnabledClientAttributes++;GLImmediate.currentRenderer=null;if(GLEmulation.currentVao)GLEmulation.currentVao.enabledClientStates[cap]=1;GLImmediate.modifiedClientAttributes=true}};var _glEnableClientState=_emscripten_glEnableClientState;var emulGlBindVertexArray=vao=>{GLEmulation.currentVao=null;GLImmediate.lastRenderer?.cleanup();_glBindBuffer(GLctx.ARRAY_BUFFER,0);_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,0);for(var vaa in GLEmulation.enabledVertexAttribArrays){GLctx.disableVertexAttribArray(vaa)}GLEmulation.enabledVertexAttribArrays={};GLImmediate.enabledClientAttributes=[0,0];GLImmediate.totalEnabledClientAttributes=0;GLImmediate.modifiedClientAttributes=true;if(vao){var info=GLEmulation.vaos[vao];_glBindBuffer(GLctx.ARRAY_BUFFER,info.arrayBuffer);_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,info.elementArrayBuffer);for(var vaa in info.enabledVertexAttribArrays){_glEnableVertexAttribArray(vaa)}for(var vaa in info.vertexAttribPointers){_glVertexAttribPointer(...info.vertexAttribPointers[vaa])}for(var attrib in info.enabledClientStates){_glEnableClientState(attrib|0)}GLEmulation.currentVao=info}};var _emscripten_glBindVertexArray=vao=>{emulGlBindVertexArray(vao);var ibo=GLctx.getParameter(34965);GLctx.currentElementArrayBufferBinding=ibo?ibo.name|0:0};var _glBindVertexArray=_emscripten_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);var _emscripten_glBlendEquation=x0=>GLctx.blendEquation(x0);var _emscripten_glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);var _emscripten_glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);var _emscripten_glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);var _emscripten_glBlitFramebuffer=(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)=>GLctx.blitFramebuffer(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);var _emscripten_glBufferData=(target,size,data,usage)=>{switch(usage){case 35041:case 35042:usage=35040;break;case 35045:case 35046:usage=35044;break;case 35049:case 35050:usage=35048;break}if(GL.currentContext.version>=2){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}return}GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferSubData=(target,offset,size,data)=>{if(GL.currentContext.version>=2){size&&GLctx.bufferSubData(target,offset,HEAPU8,data,size);return}GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);var _emscripten_glClear=x0=>GLctx.clear(x0);var _emscripten_glClearBufferfi=(x0,x1,x2,x3)=>GLctx.clearBufferfi(x0,x1,x2,x3);var _emscripten_glClearBufferfv=(buffer,drawbuffer,value)=>{GLctx.clearBufferfv(buffer,drawbuffer,HEAPF32,value>>2)};var _emscripten_glClearBufferiv=(buffer,drawbuffer,value)=>{GLctx.clearBufferiv(buffer,drawbuffer,HEAP32,value>>2)};var _emscripten_glClearBufferuiv=(buffer,drawbuffer,value)=>{GLctx.clearBufferuiv(buffer,drawbuffer,HEAPU32,value>>2)};var _emscripten_glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);var _emscripten_glClearDepthf=x0=>GLctx.clearDepth(x0);var _emscripten_glClearStencil=x0=>GLctx.clearStencil(x0);var _emscripten_glClientActiveTexture=texture=>{GLImmediate.clientActiveTexture=texture-33984};var _emscripten_glClientWaitSync=(sync,flags,timeout)=>{timeout=Number(timeout);return GLctx.clientWaitSync(GL.syncs[sync],flags,timeout)};var _emscripten_glClipControlEXT=(origin,depth)=>{GLctx.extClipControl["clipControlEXT"](origin,depth)};var _emscripten_glClipPlane=(pname,param)=>{if(pname>=12288&&pname<12294){var clipPlaneId=pname-12288;GLEmulation.clipPlaneEquation[clipPlaneId][0]=HEAPF64[param>>3];GLEmulation.clipPlaneEquation[clipPlaneId][1]=HEAPF64[param+8>>3];GLEmulation.clipPlaneEquation[clipPlaneId][2]=HEAPF64[param+16>>3];GLEmulation.clipPlaneEquation[clipPlaneId][3]=HEAPF64[param+24>>3];var tmpMV=GLImmediate.matrixLib.mat4.create(GLImmediate.matrix[0]);GLImmediate.matrixLib.mat4.inverse(tmpMV);GLImmediate.matrixLib.mat4.transpose(tmpMV);GLImmediate.matrixLib.mat4.multiplyVec4(tmpMV,GLEmulation.clipPlaneEquation[clipPlaneId])}};var _emscripten_glColor4f=(r,g,b,a)=>{r=Math.max(Math.min(r,1),0);g=Math.max(Math.min(g,1),0);b=Math.max(Math.min(b,1),0);a=Math.max(Math.min(a,1),0);if(GLImmediate.mode>=0){var start=GLImmediate.vertexCounter<<2;GLImmediate.vertexDataU8[start+0]=r*255;GLImmediate.vertexDataU8[start+1]=g*255;GLImmediate.vertexDataU8[start+2]=b*255;GLImmediate.vertexDataU8[start+3]=a*255;GLImmediate.vertexCounter++;GLImmediate.addRendererComponent(GLImmediate.COLOR,4,GLctx.UNSIGNED_BYTE)}else{GLImmediate.clientColor[0]=r;GLImmediate.clientColor[1]=g;GLImmediate.clientColor[2]=b;GLImmediate.clientColor[3]=a}};var _glColor4f=_emscripten_glColor4f;var _emscripten_glColor3f=(r,g,b)=>_glColor4f(r,g,b,1);var _glColor3f=_emscripten_glColor3f;var _emscripten_glColor3d=_glColor3f;var _emscripten_glColor3fv=p=>_glColor3f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2]);var _emscripten_glColor4ub=(r,g,b,a)=>_glColor4f((r&255)/255,(g&255)/255,(b&255)/255,(a&255)/255);var _glColor4ub=_emscripten_glColor4ub;var _emscripten_glColor3ub=(r,g,b)=>_glColor4ub(r,g,b,255);var _glColor3ub=_emscripten_glColor3ub;var _emscripten_glColor3ubv=p=>_glColor3ub(HEAP8[p],HEAP8[p+1],HEAP8[p+2]);var _emscripten_glColor4ui=(r,g,b,a)=>_glColor4f((r>>>0)/4294967295,(g>>>0)/4294967295,(b>>>0)/4294967295,(a>>>0)/4294967295);var _glColor4ui=_emscripten_glColor4ui;var _emscripten_glColor3ui=(r,g,b)=>_glColor4ui(r,g,b,4294967295);var _glColor3ui=_emscripten_glColor3ui;var _emscripten_glColor3uiv=p=>_glColor3ui(HEAP32[p>>2],HEAP32[p+4>>2],HEAP32[p+8>>2]);var _emscripten_glColor4us=(r,g,b,a)=>_glColor4f((r&65535)/65535,(g&65535)/65535,(b&65535)/65535,(a&65535)/65535);var _glColor4us=_emscripten_glColor4us;var _emscripten_glColor3us=(r,g,b)=>_glColor4us(r,g,b,65535);var _glColor3us=_emscripten_glColor3us;var _emscripten_glColor3usv=p=>_glColor3us(HEAP16[p>>1],HEAP16[p+2>>1],HEAP16[p+4>>1]);var _emscripten_glColor4d=_glColor4f;var _emscripten_glColor4fv=p=>_glColor4f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2],HEAPF32[p+12>>2]);var _emscripten_glColor4ubv=p=>_glColor4ub(HEAP8[p],HEAP8[p+1],HEAP8[p+2],HEAP8[p+3]);var _emscripten_glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.COLOR,size,type,stride,pointer)};var _emscripten_glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data);return}GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8,data,imageSize);return}GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexImage3D=(target,level,internalFormat,width,height,depth,border,imageSize,data)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.compressedTexImage3D(target,level,internalFormat,width,height,depth,border,imageSize,data)}else{GLctx.compressedTexImage3D(target,level,internalFormat,width,height,depth,border,HEAPU8,data,imageSize)}};var _emscripten_glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data);return}GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8,data,imageSize);return}GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexSubImage3D=(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.compressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)}else{GLctx.compressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,HEAPU8,data,imageSize)}};var _emscripten_glCopyBufferSubData=(x0,x1,x2,x3,x4)=>GLctx.copyBufferSubData(x0,x1,x2,x3,x4);var _emscripten_glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage3D=(x0,x1,x2,x3,x4,x5,x6,x7,x8)=>GLctx.copyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8);var _emscripten_glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCullFace=x0=>GLctx.cullFace(x0);var _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==GLctx.currentArrayBufferBinding)GLctx.currentArrayBufferBinding=0;if(id==GLctx.currentElementArrayBufferBinding)GLctx.currentElementArrayBufferBinding=0;if(id==GLctx.currentPixelPackBufferBinding)GLctx.currentPixelPackBufferBinding=0;if(id==GLctx.currentPixelUnpackBufferBinding)GLctx.currentPixelUnpackBufferBinding=0}};var _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}};var _emscripten_glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _glDeleteShader=_emscripten_glDeleteShader;var _emscripten_glDeleteObject=id=>{if(GL.programs[id]){_glDeleteProgram(id)}else if(GL.shaders[id]){_glDeleteShader(id)}else{err(`WARNING: deleteObject received invalid id: ${id}`)}};var _emscripten_glDeleteQueries=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.deleteQuery(query);GL.queries[id]=null}};var _emscripten_glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _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}};var _emscripten_glDeleteSamplers=(n,samplers)=>{for(var i=0;i>2];var sampler=GL.samplers[id];if(!sampler)continue;GLctx.deleteSampler(sampler);sampler.name=0;GL.samplers[id]=null}};var _emscripten_glDeleteSync=id=>{if(!id)return;var sync=GL.syncs[id];if(!sync){GL.recordError(1281);return}GLctx.deleteSync(sync);sync.name=0;GL.syncs[id]=null};var _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}};var _emscripten_glDeleteTransformFeedbacks=(n,ids)=>{for(var i=0;i>2];var transformFeedback=GL.transformFeedbacks[id];if(!transformFeedback)continue;GLctx.deleteTransformFeedback(transformFeedback);transformFeedback.name=0;GL.transformFeedbacks[id]=null}};var emulGlDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLEmulation.vaos[id]=null;if(GLEmulation.currentVao?.id==id)GLEmulation.currentVao=null}};var _emscripten_glDeleteVertexArrays=(n,vaos)=>{emulGlDeleteVertexArrays(n,vaos)};var _glDeleteVertexArrays=_emscripten_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDepthFunc=x0=>GLctx.depthFunc(x0);var _emscripten_glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);var _emscripten_glDisableClientState=cap=>{var attrib=GLEmulation.getAttributeFromCapability(cap);if(attrib===null){err(`WARNING: unhandled clientstate: ${cap}`);return}if(GLImmediate.enabledClientAttributes[attrib]){GLImmediate.enabledClientAttributes[attrib]=false;GLImmediate.totalEnabledClientAttributes--;GLImmediate.currentRenderer=null;if(GLEmulation.currentVao)delete GLEmulation.currentVao.enabledClientStates[cap];GLImmediate.modifiedClientAttributes=true}};var _emscripten_glDrawArrays=(mode,first,count)=>{if(GLImmediate.totalEnabledClientAttributes==0&&mode<=6){GLctx.drawArrays(mode,first,count);return}GLImmediate.prepareClientAttributes(count,false);GLImmediate.mode=mode;if(!GLctx.currentArrayBufferBinding){GLImmediate.vertexData=HEAPF32.subarray(GLImmediate.vertexPointer>>2,GLImmediate.vertexPointer+(first+count)*GLImmediate.stride>>2);GLImmediate.firstVertex=first;GLImmediate.lastVertex=first+count}GLImmediate.flush(null,first);GLImmediate.mode=-1};var _emscripten_glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstanced=_emscripten_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedARB=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedEXT=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedNV=_glDrawArraysInstanced;var _emscripten_glDrawBuffer=()=>{abort("glDrawBuffer: TODO")};var tempFixedLengthArray=[];var _emscripten_glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffers=_emscripten_glDrawBuffers;var _emscripten_glDrawBuffersEXT=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawElements=(mode,count,type,indices,start,end)=>{if(GLImmediate.totalEnabledClientAttributes==0&&mode<=6&&GLctx.currentElementArrayBufferBinding){GLctx.drawElements(mode,count,type,indices);return}if(!GLctx.currentElementArrayBufferBinding){assert(type==GLctx.UNSIGNED_SHORT)}warnOnce("DrawElements doesn't actually prepareClientAttributes properly.");GLImmediate.prepareClientAttributes(count,false);GLImmediate.mode=mode;if(!GLctx.currentArrayBufferBinding){GLImmediate.firstVertex=end?start:HEAP8.length;GLImmediate.lastVertex=end?end+1:0;start=GLImmediate.vertexPointer;if(end){end=GLImmediate.vertexPointer+(end+1)*GLImmediate.stride;GLImmediate.vertexData=HEAPF32.subarray(start>>2,end>>2)}else{GLImmediate.vertexData=HEAPF32.subarray(start>>2)}}GLImmediate.flush(count,0,indices);GLImmediate.mode=-1};var _emscripten_glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstanced=_emscripten_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedARB=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedEXT=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedNV=_glDrawElementsInstanced;var _glDrawElements=_emscripten_glDrawElements;var _emscripten_glDrawRangeElements=(mode,start,end,count,type,indices)=>{_glDrawElements(mode,count,type,indices,start,end)};var _emscripten_glEnd=()=>{GLImmediate.prepareClientAttributes(GLImmediate.rendererComponents[GLImmediate.VERTEX],true);GLImmediate.firstVertex=0;GLImmediate.lastVertex=GLImmediate.vertexCounter/(GLImmediate.stride>>2);GLImmediate.flush();GLImmediate.disableBeginEndClientAttributes();GLImmediate.mode=-1;GLImmediate.enabledClientAttributes=GLImmediate.enabledClientAttributes_preBegin;GLImmediate.clientAttributes=GLImmediate.clientAttributes_preBegin;GLImmediate.currentRenderer=null;GLImmediate.modifiedClientAttributes=true};var _emscripten_glEndQuery=x0=>GLctx.endQuery(x0);var _emscripten_glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glEndTransformFeedback=()=>GLctx.endTransformFeedback();var _emscripten_glFenceSync=(condition,flags)=>{var sync=GLctx.fenceSync(condition,flags);if(sync){var id=GL.getNewId(GL.syncs);sync.name=id;GL.syncs[id]=sync;return id}return 0};var _emscripten_glFinish=()=>GLctx.finish();var _emscripten_glFlush=()=>GLctx.flush();var _emscripten_glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFramebufferTextureLayer=(target,attachment,texture,level,layer)=>{GLctx.framebufferTextureLayer(target,attachment,GL.textures[texture],level,layer)};var _emscripten_glFrontFace=x0=>GLctx.frontFace(x0);var _emscripten_glFrustum=(left,right,bottom,top_,nearVal,farVal)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],GLImmediate.matrixLib.mat4.frustum(left,right,bottom,top_,nearVal,farVal))};var _emscripten_glGenBuffers=(n,buffers)=>{GL.genObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenFramebuffers=(n,ids)=>{GL.genObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenQueries=(n,ids)=>{GL.genObject(n,ids,"createQuery",GL.queries)};var _emscripten_glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;checkInt32(0);return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id;checkInt32(id)}};var _emscripten_glGenRenderbuffers=(n,renderbuffers)=>{GL.genObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenSamplers=(n,samplers)=>{GL.genObject(n,samplers,"createSampler",GL.samplers)};var _emscripten_glGenTextures=(n,textures)=>{GL.genObject(n,textures,"createTexture",GL.textures)};var _emscripten_glGenTransformFeedbacks=(n,ids)=>{GL.genObject(n,ids,"createTransformFeedback",GL.transformFeedbacks)};var emulGlGenVertexArrays=(n,vaos)=>{for(var i=0;i>2]=id;checkInt32(id)}};var _emscripten_glGenVertexArrays=(n,arrays)=>{emulGlGenVertexArrays(n,arrays)};var _glGenVertexArrays=_emscripten_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenerateMipmap=x0=>GLctx.generateMipmap(x0);var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;checkInt32(numBytesWrittenExclNull);if(size)HEAP32[size>>2]=info.size;checkInt32(info.size);if(type)HEAP32[type>>2]=info.type;checkInt32(info.type)}};var _emscripten_glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveUniformBlockName=(program,uniformBlockIndex,bufSize,length,uniformBlockName)=>{program=GL.programs[program];var result=GLctx.getActiveUniformBlockName(program,uniformBlockIndex);if(!result)return;if(uniformBlockName&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(result,uniformBlockName,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;checkInt32(numBytesWrittenExclNull)}else{if(length)HEAP32[length>>2]=0;checkInt32(0)}};var _emscripten_glGetActiveUniformBlockiv=(program,uniformBlockIndex,pname,params)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];if(pname==35393){var name=GLctx.getActiveUniformBlockName(program,uniformBlockIndex);HEAP32[params>>2]=name.length+1;checkInt32(name.length+1);return}var result=GLctx.getActiveUniformBlockParameter(program,uniformBlockIndex,pname);if(result===null)return;if(pname==35395){for(var i=0;i>2]=result[i];checkInt32(result[i])}}else{HEAP32[params>>2]=result;checkInt32(result)}};var _emscripten_glGetActiveUniformsiv=(program,uniformCount,uniformIndices,pname,params)=>{if(!params){GL.recordError(1281);return}if(uniformCount>0&&uniformIndices==0){GL.recordError(1281);return}program=GL.programs[program];var ids=[];for(var i=0;i>2])}var result=GLctx.getActiveUniforms(program,ids,pname);if(!result)return;var len=result.length;for(var i=0;i>2]=result[i];checkInt32(result[i])}};var _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;checkInt32(len);for(var i=0;i>2]=id;checkInt32(id)}};var _emscripten_glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetBufferParameteri64v=(target,value,data)=>{if(!data){GL.recordError(1281);return}writeI53ToI64(data,GLctx.getBufferParameter(target,value))};var _emscripten_glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value);checkInt32(GLctx.getBufferParameter(target,value))};var _emscripten_glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetFragDataLocation=(program,name)=>GLctx.getFragDataLocation(GL.programs[program],UTF8ToString(name));var _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;checkInt32(result)};var _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;checkInt32(numBytesWrittenExclNull)};var _glGetProgramInfoLog=_emscripten_glGetProgramInfoLog;var _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;checkInt32(numBytesWrittenExclNull)};var _glGetShaderInfoLog=_emscripten_glGetShaderInfoLog;var _emscripten_glGetInfoLog=(id,maxLength,length,infoLog)=>{if(GL.programs[id]){_glGetProgramInfoLog(id,maxLength,length,infoLog)}else if(GL.shaders[id]){_glGetShaderInfoLog(id,maxLength,length,infoLog)}else{err(`WARNING: glGetInfoLog received invalid id: ${id}`)}};var emscriptenWebGLGetIndexed=(target,index,data,type)=>{if(!data){GL.recordError(1281);return}var result=GLctx.getIndexedParameter(target,index);var ret;switch(typeof result){case"boolean":ret=result?1:0;break;case"number":ret=result;break;case"object":if(result===null){switch(target){case 35983:case 35368:ret=0;break;default:{GL.recordError(1280);return}}}else if(result instanceof WebGLBuffer){ret=result.name|0}else{GL.recordError(1280);return}break;default:GL.recordError(1280);return}switch(type){case 1:writeI53ToI64(data,ret);break;case 0:HEAP32[data>>2]=ret;checkInt32(ret);break;case 2:HEAPF32[data>>2]=ret;break;case 4:HEAP8[data]=ret?1:0;checkInt8(ret?1:0);break;default:abort("internal emscriptenWebGLGetIndexed() error, bad type: "+type)}};var _emscripten_glGetInteger64i_v=(target,index,data)=>emscriptenWebGLGetIndexed(target,index,data,1);var _emscripten_glGetInteger64v=(name_,p)=>{emscriptenWebGLGet(name_,p,1)};var _emscripten_glGetIntegeri_v=(target,index,data)=>emscriptenWebGLGetIndexed(target,index,data,0);var _emscripten_glGetInternalformativ=(target,internalformat,pname,bufSize,params)=>{if(bufSize<0){GL.recordError(1281);return}if(!params){GL.recordError(1281);return}var ret=GLctx.getInternalformatParameter(target,internalformat,pname);if(ret===null)return;for(var i=0;i>2]=ret[i];checkInt32(ret[i])}};var _emscripten_glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1;checkInt32(log.length+1)}else if(pname==35719){if(!program.maxUniformLength){var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(var i=0;i>2]=program.maxUniformLength;checkInt32(program.maxUniformLength)}else if(pname==35722){if(!program.maxAttributeLength){var numActiveAttributes=GLctx.getProgramParameter(program,35721);for(var i=0;i>2]=program.maxAttributeLength;checkInt32(program.maxAttributeLength)}else if(pname==35381){if(!program.maxUniformBlockNameLength){var numActiveUniformBlocks=GLctx.getProgramParameter(program,35382);for(var i=0;i>2]=program.maxUniformBlockNameLength;checkInt32(program.maxUniformBlockNameLength)}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname);checkInt32(GLctx.getProgramParameter(program,pname))}};var _glGetProgramiv=_emscripten_glGetProgramiv;var _emscripten_glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength;checkInt32(logLength)}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength;checkInt32(sourceLength)}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname);checkInt32(GLctx.getShaderParameter(GL.shaders[shader],pname))}};var _glGetShaderiv=_emscripten_glGetShaderiv;var _emscripten_glGetObjectParameteriv=(id,type,result)=>{if(GL.programs[id]){if(type==35716){var log=GLctx.getProgramInfoLog(GL.programs[id]);if(log===null)log="(unknown error)";HEAP32[result>>2]=log.length;checkInt32(log.length);return}_glGetProgramiv(id,type,result)}else if(GL.shaders[id]){if(type==35716){var log=GLctx.getShaderInfoLog(GL.shaders[id]);if(log===null)log="(unknown error)";HEAP32[result>>2]=log.length;checkInt32(log.length);return}else if(type==35720){var source=GLctx.getShaderSource(GL.shaders[id]);if(source===null)return;HEAP32[result>>2]=source.length;checkInt32(source.length);return}_glGetShaderiv(id,type,result)}else{err(`WARNING: getObjectParameteriv received invalid id: ${id}`)}};var _emscripten_glGetPointerv=(name,p)=>{var attribute;switch(name){case 32910:attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];break;case 32912:attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];break;case 32914:attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];break;default:GL.recordError(1280);return}HEAP32[p>>2]=attribute?attribute.pointer:0;checkInt32(attribute?attribute.pointer:0)};var _emscripten_glGetProgramBinary=(program,bufSize,length,binaryFormat,binary)=>{GL.recordError(1282)};var _emscripten_glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;if(GL.currentContext.version<2){param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}else{param=GLctx.getQueryParameter(query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[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;checkInt32(ret)};var _glGetQueryObjecti64vEXT=_emscripten_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectuiv=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.getQueryParameter(query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret;checkInt32(ret)};var _glGetQueryObjectivEXT=_emscripten_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryiv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getQuery(target,pname);checkInt32(GLctx.getQuery(target,pname))};var _emscripten_glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname);checkInt32(GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname))};var _emscripten_glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname);checkInt32(GLctx.getRenderbufferParameter(target,pname))};var _emscripten_glGetSamplerParameterfv=(sampler,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)};var _emscripten_glGetSamplerParameteriv=(sampler,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname);checkInt32(GLctx.getSamplerParameter(GL.samplers[sampler],pname))};var _emscripten_glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;checkInt32(result.rangeMin);HEAP32[range+4>>2]=result.rangeMax;checkInt32(result.rangeMax);HEAP32[precision>>2]=result.precision;checkInt32(result.precision)};var _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;checkInt32(numBytesWrittenExclNull)};var _emscripten_glGetStringi=(name,index)=>{if(GL.currentContext.version<2){GL.recordError(1282);return 0}var stringiCache=GL.stringiCache[name];if(stringiCache){if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index]}switch(name){case 7939:var exts=webglGetExtensions().map(stringToNewUTF8);stringiCache=GL.stringiCache[name]=exts;if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index];default:GL.recordError(1280);return 0}};var _emscripten_glGetSynciv=(sync,pname,bufSize,length,values)=>{if(bufSize<0){GL.recordError(1281);return}if(!values){GL.recordError(1281);return}var ret=GLctx.getSyncParameter(GL.syncs[sync],pname);if(ret!==null){HEAP32[values>>2]=ret;checkInt32(ret);if(length)HEAP32[length>>2]=1;checkInt32(1)}};var _emscripten_glGetTexEnvfv=(target,pname,param)=>abort("GL emulation not initialized!");var _emscripten_glGetTexEnviv=(target,pname,param)=>abort("GL emulation not initialized!");var _emscripten_glGetTexLevelParameteriv=(target,level,pname,params)=>abort("glGetTexLevelParameteriv: TODO");var _emscripten_glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname);checkInt32(GLctx.getTexParameter(target,pname))};var _emscripten_glGetTransformFeedbackVarying=(program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx.getTransformFeedbackVarying(program,index);if(!info)return;if(name&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;checkInt32(numBytesWrittenExclNull)}else{if(length)HEAP32[length>>2]=0;checkInt32(0)}if(size)HEAP32[size>>2]=info.size;checkInt32(info.size);if(type)HEAP32[type>>2]=info.type;checkInt32(info.type)};var _emscripten_glGetUniformBlockIndex=(program,uniformBlockName)=>GLctx.getUniformBlockIndex(GL.programs[program],UTF8ToString(uniformBlockName));var _emscripten_glGetUniformIndices=(program,uniformCount,uniformNames,uniformIndices)=>{if(!uniformIndices){GL.recordError(1281);return}if(uniformCount>0&&(uniformNames==0||uniformIndices==0)){GL.recordError(1281);return}program=GL.programs[program];var names=[];for(var i=0;i>2]));var result=GLctx.getUniformIndices(program,names);if(!result)return;var len=result.length;for(var i=0;i>2]=result[i];checkInt32(result[i])}};var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;checkInt32(data);break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];checkInt32(data[i]);break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _emscripten_glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetUniformuiv=(program,location,params)=>emscriptenWebGLGetUniform(program,location,params,0);var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"];checkInt32(data&&data["name"])}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;checkInt32(data);break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);checkInt32(Math.fround(data));break}}else{for(var i=0;i>2]=data[i];checkInt32(data[i]);break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);checkInt32(Math.fround(data[i]));break}}}};var _emscripten_glGetVertexAttribIiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,0)};var _glGetVertexAttribIiv=_emscripten_glGetVertexAttribIiv;var _emscripten_glGetVertexAttribIuiv=_glGetVertexAttribIiv;var _emscripten_glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname);checkInt32(GLctx.getVertexAttribOffset(index,pname))};var _emscripten_glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glInvalidateFramebuffer=(target,numAttachments,attachments)=>{var list=tempFixedLengthArray[numAttachments];for(var i=0;i>2]}GLctx.invalidateFramebuffer(target,list)};var _emscripten_glInvalidateSubFramebuffer=(target,numAttachments,attachments,x,y,width,height)=>{var list=tempFixedLengthArray[numAttachments];for(var i=0;i>2]}GLctx.invalidateSubFramebuffer(target,list,x,y,width,height)};var _emscripten_glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsQuery=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.isQuery(query)};var _emscripten_glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsSampler=id=>{var sampler=GL.samplers[id];if(!sampler)return 0;return GLctx.isSampler(sampler)};var _emscripten_glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsSync=sync=>GLctx.isSync(GL.syncs[sync]);var _emscripten_glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsTransformFeedback=id=>GLctx.isTransformFeedback(GL.transformFeedbacks[id]);var emulGlIsVertexArray=array=>{var vao=GLEmulation.vaos[array];if(!vao)return 0;return 1};var _emscripten_glIsVertexArray=array=>emulGlIsVertexArray(array);var _glIsVertexArray=_emscripten_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glLightModelf=(pname,param)=>{if(pname==2898){GLEmulation.lightModelTwoSide=param!=0?true:false}else{abort("glLightModelf: TODO: "+pname)}};var _emscripten_glLightModelfv=(pname,param)=>{if(pname==2899){GLEmulation.lightModelAmbient[0]=HEAPF32[param>>2];GLEmulation.lightModelAmbient[1]=HEAPF32[param+4>>2];GLEmulation.lightModelAmbient[2]=HEAPF32[param+8>>2];GLEmulation.lightModelAmbient[3]=HEAPF32[param+12>>2]}else{abort("glLightModelfv: TODO: "+pname)}};var _emscripten_glLightfv=(light,pname,param)=>{if(light>=16384&&light<16392){var lightId=light-16384;if(pname==4608){GLEmulation.lightAmbient[lightId][0]=HEAPF32[param>>2];GLEmulation.lightAmbient[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightAmbient[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightAmbient[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4609){GLEmulation.lightDiffuse[lightId][0]=HEAPF32[param>>2];GLEmulation.lightDiffuse[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightDiffuse[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightDiffuse[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4610){GLEmulation.lightSpecular[lightId][0]=HEAPF32[param>>2];GLEmulation.lightSpecular[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightSpecular[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightSpecular[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4611){GLEmulation.lightPosition[lightId][0]=HEAPF32[param>>2];GLEmulation.lightPosition[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightPosition[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightPosition[lightId][3]=HEAPF32[param+12>>2];GLImmediate.matrixLib.mat4.multiplyVec4(GLImmediate.matrix[0],GLEmulation.lightPosition[lightId])}else{abort("glLightfv: TODO: "+pname)}}};var _emscripten_glLineWidth=x0=>GLctx.lineWidth(x0);var _emscripten_glLoadIdentity=()=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.identity(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadTransposeMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),GLImmediate.matrix[GLImmediate.currentMatrix]);GLImmediate.matrixLib.mat4.transpose(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadTransposeMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),GLImmediate.matrix[GLImmediate.currentMatrix]);GLImmediate.matrixLib.mat4.transpose(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glMaterialfv=(face,pname,param)=>{if(face!=1028&&face!=1032){abort("glMaterialfv: TODO"+face)}if(pname==4608){GLEmulation.materialAmbient[0]=HEAPF32[param>>2];GLEmulation.materialAmbient[1]=HEAPF32[param+4>>2];GLEmulation.materialAmbient[2]=HEAPF32[param+8>>2];GLEmulation.materialAmbient[3]=HEAPF32[param+12>>2]}else if(pname==4609){GLEmulation.materialDiffuse[0]=HEAPF32[param>>2];GLEmulation.materialDiffuse[1]=HEAPF32[param+4>>2];GLEmulation.materialDiffuse[2]=HEAPF32[param+8>>2];GLEmulation.materialDiffuse[3]=HEAPF32[param+12>>2]}else if(pname==4610){GLEmulation.materialSpecular[0]=HEAPF32[param>>2];GLEmulation.materialSpecular[1]=HEAPF32[param+4>>2];GLEmulation.materialSpecular[2]=HEAPF32[param+8>>2];GLEmulation.materialSpecular[3]=HEAPF32[param+12>>2]}else if(pname==5633){GLEmulation.materialShininess[0]=HEAPF32[param>>2]}else{abort("glMaterialfv: TODO: "+pname)}};var _emscripten_glMatrixMode=mode=>{if(mode==5888){GLImmediate.currentMatrix=0}else if(mode==5889){GLImmediate.currentMatrix=1}else if(mode==5890){GLImmediate.useTextureMatrix=true;GLImmediate.currentMatrix=2+GLImmediate.TexEnvJIT.getActiveTexture()}else{throw`Wrong mode ${mode} passed to glMatrixMode`}};var _emscripten_glMultMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],HEAPF64.subarray(matrix>>3,matrix+128>>3))};var _emscripten_glMultMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],HEAPF32.subarray(matrix>>2,matrix+64>>2))};var _emscripten_glMultTransposeMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;var colMajor=GLImmediate.matrixLib.mat4.create();GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),colMajor);GLImmediate.matrixLib.mat4.transpose(colMajor);GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],colMajor)};var _emscripten_glMultTransposeMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;var colMajor=GLImmediate.matrixLib.mat4.create();GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),colMajor);GLImmediate.matrixLib.mat4.transpose(colMajor);GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],colMajor)};var _emscripten_glNormal3f=(x,y,z)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;assert(GLImmediate.vertexCounter<<2{GLImmediate.setClientAttribute(GLImmediate.NORMAL,3,type,stride,pointer)};var _emscripten_glOrtho=(left,right,bottom,top_,nearVal,farVal)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],GLImmediate.matrixLib.mat4.ortho(left,right,bottom,top_,nearVal,farVal))};var _emscripten_glPauseTransformFeedback=()=>GLctx.pauseTransformFeedback();var _emscripten_glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}else if(pname==3314){GL.unpackRowLength=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPolygonMode=()=>{};var _emscripten_glPolygonModeWEBGL=(face,mode)=>{GLctx.webglPolygonMode["polygonModeWEBGL"](face,mode)};var _emscripten_glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);var _emscripten_glPolygonOffsetClampEXT=(factor,units,clamp)=>{GLctx.extPolygonOffsetClamp["polygonOffsetClampEXT"](factor,units,clamp)};var _emscripten_glPopMatrix=()=>{if(GLImmediate.matrixStack[GLImmediate.currentMatrix].length==0){GL.recordError(1284);return}GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrix[GLImmediate.currentMatrix]=GLImmediate.matrixStack[GLImmediate.currentMatrix].pop()};var _emscripten_glProgramBinary=(program,binaryFormat,binary,length)=>{GL.recordError(1280)};var _emscripten_glProgramParameteri=(program,pname,value)=>{GL.recordError(1280)};var _emscripten_glPushMatrix=()=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixStack[GLImmediate.currentMatrix].push(Array.prototype.slice.call(GLImmediate.matrix[GLImmediate.currentMatrix]))};var _emscripten_glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var _emscripten_glReadBuffer=x0=>GLctx.readBuffer(x0);var computeUnpackAlignedImageSize=(width,height,sizePerPixel)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=(GL.unpackRowLength||width)*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,GL.unpackAlignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16};var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel);return heap.subarray(toTypedArrayIndex(pixels,heap),toTypedArrayIndex(pixels+bytes,heap))};var _emscripten_glReadPixels=(x,y,width,height,format,type,pixels)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels);return}var heap=heapObjectForWebGLType(type);var target=toTypedArrayIndex(pixels,heap);GLctx.readPixels(x,y,width,height,format,type,heap,target);return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReleaseShaderCompiler=()=>{};var _emscripten_glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);var _emscripten_glRenderbufferStorageMultisample=(x0,x1,x2,x3,x4)=>GLctx.renderbufferStorageMultisample(x0,x1,x2,x3,x4);var _emscripten_glResumeTransformFeedback=()=>GLctx.resumeTransformFeedback();var _emscripten_glRotated=(angle,x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.rotate(GLImmediate.matrix[GLImmediate.currentMatrix],angle*Math.PI/180,[x,y,z])};var _glRotated=_emscripten_glRotated;var _emscripten_glRotatef=_glRotated;var _emscripten_glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glSamplerParameterf=(sampler,pname,param)=>{GLctx.samplerParameterf(GL.samplers[sampler],pname,param)};var _emscripten_glSamplerParameterfv=(sampler,pname,params)=>{var param=HEAPF32[params>>2];GLctx.samplerParameterf(GL.samplers[sampler],pname,param)};var _emscripten_glSamplerParameteri=(sampler,pname,param)=>{GLctx.samplerParameteri(GL.samplers[sampler],pname,param)};var _emscripten_glSamplerParameteriv=(sampler,pname,params)=>{var param=HEAP32[params>>2];GLctx.samplerParameteri(GL.samplers[sampler],pname,param)};var _emscripten_glScaled=(x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.scale(GLImmediate.matrix[GLImmediate.currentMatrix],[x,y,z])};var _glScaled=_emscripten_glScaled;var _emscripten_glScalef=_glScaled;var _emscripten_glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);var _emscripten_glShadeModel=()=>warnOnce("TODO: glShadeModel");var _emscripten_glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);var _emscripten_glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);var _emscripten_glStencilMask=x0=>GLctx.stencilMask(x0);var _emscripten_glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);var _emscripten_glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);var _emscripten_glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);var _emscripten_glTexCoord2i=(u,v)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=u;GLImmediate.vertexData[GLImmediate.vertexCounter++]=v;GLImmediate.addRendererComponent(GLImmediate.TEXTURE0,2,GLctx.FLOAT)};var _glTexCoord2i=_emscripten_glTexCoord2i;var _emscripten_glTexCoord2f=_glTexCoord2i;var _emscripten_glTexCoord2fv=v=>_glTexCoord2i(HEAPF32[v>>2],HEAPF32[v+4>>2]);var _emscripten_glTexCoord3f=(target,level,internalformat,width,border,format,type,data)=>abort("glTexCoord3f: TODO");var _emscripten_glTexCoord4f=()=>{abort("glTexCoord4f: TODO")};var _emscripten_glTexCoordPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture,size,type,stride,pointer)};var _emscripten_glTexGenfv=(coord,pname,param)=>abort("glTexGenfv: TODO");var _emscripten_glTexGeni=(coord,pname,param)=>abort("glTexGeni: TODO");var _emscripten_glTexImage1D=(target,level,internalformat,width,border,format,type,data)=>abort("glTexImage1D: TODO");var _emscripten_glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels);return}if(pixels){var heap=heapObjectForWebGLType(type);var index=toTypedArrayIndex(pixels,heap);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,index);return}}var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)};var _emscripten_glTexImage3D=(target,level,internalFormat,width,height,depth,border,format,type,pixels)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,heap,toTypedArrayIndex(pixels,heap))}else{GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,null)}};var _emscripten_glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);var _emscripten_glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);var _emscripten_glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexStorage2D=(x0,x1,x2,x3,x4)=>GLctx.texStorage2D(x0,x1,x2,x3,x4);var _emscripten_glTexStorage3D=(x0,x1,x2,x3,x4,x5)=>GLctx.texStorage3D(x0,x1,x2,x3,x4,x5);var _emscripten_glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);return}if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,heap,toTypedArrayIndex(pixels,heap));return}}var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTexSubImage3D=(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)=>{if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,heap,toTypedArrayIndex(pixels,heap))}else{GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,null)}};var _emscripten_glTransformFeedbackVaryings=(program,count,varyings,bufferMode)=>{program=GL.programs[program];var vars=[];for(var i=0;i>2]));GLctx.transformFeedbackVaryings(program,vars,bufferMode)};var _emscripten_glTranslated=(x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.translate(GLImmediate.matrix[GLImmediate.currentMatrix],[x,y,z])};var _glTranslated=_emscripten_glTranslated;var _emscripten_glTranslatef=_glTranslated;var _emscripten_glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var miniTempWebGLFloatBuffers=[];var _emscripten_glUniform1fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform1fv(webglGetUniformLocation(location),HEAPF32,value>>2,count);return}if(count<=288){var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var miniTempWebGLIntBuffers=[];var _emscripten_glUniform1iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform1iv(webglGetUniformLocation(location),HEAP32,value>>2,count);return}if(count<=288){var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1ui=(location,v0)=>{GLctx.uniform1ui(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1uiv=(location,count,value)=>{count&&GLctx.uniform1uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count)};var _emscripten_glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform2fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*2);return}if(count<=144){count*=2;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform2iv(webglGetUniformLocation(location),HEAP32,value>>2,count*2);return}if(count<=144){count*=2;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2ui=(location,v0,v1)=>{GLctx.uniform2ui(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2uiv=(location,count,value)=>{count&&GLctx.uniform2uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*2)};var _emscripten_glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform3fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*3);return}if(count<=96){count*=3;var view=miniTempWebGLFloatBuffers[count];for(var i=0;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(webglGetUniformLocation(location),view)};var _emscripten_glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform3iv(webglGetUniformLocation(location),HEAP32,value>>2,count*3);return}if(count<=96){count*=3;var view=miniTempWebGLIntBuffers[count];for(var i=0;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(webglGetUniformLocation(location),view)};var _emscripten_glUniform3ui=(location,v0,v1,v2)=>{GLctx.uniform3ui(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3uiv=(location,count,value)=>{count&&GLctx.uniform3uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*3)};var _emscripten_glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4fv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform4fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*4);return}if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];var heap=HEAPF32;value=value>>2;count*=4;for(var i=0;i>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4iv=(location,count,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniform4iv(webglGetUniformLocation(location),HEAP32,value>>2,count*4);return}if(count<=72){count*=4;var view=miniTempWebGLIntBuffers[count];for(var i=0;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(webglGetUniformLocation(location),view)};var _emscripten_glUniform4ui=(location,v0,v1,v2,v3)=>{GLctx.uniform4ui(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4uiv=(location,count,value)=>{count&&GLctx.uniform4uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*4)};var _emscripten_glUniformBlockBinding=(program,uniformBlockIndex,uniformBlockBinding)=>{program=GL.programs[program];GLctx.uniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding)};var _emscripten_glUniformMatrix2fv=(location,count,transpose,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*4);return}if(count<=72){count*=4;var view=miniTempWebGLFloatBuffers[count];for(var i=0;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(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix2x3fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix2x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)};var _emscripten_glUniformMatrix2x4fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix2x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)};var _emscripten_glUniformMatrix3fv=(location,count,transpose,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*9);return}if(count<=32){count*=9;var view=miniTempWebGLFloatBuffers[count];for(var i=0;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(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3x2fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix3x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)};var _emscripten_glUniformMatrix3x4fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix3x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)};var _emscripten_glUniformMatrix4fv=(location,count,transpose,value)=>{if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*16);return}if(count<=18){var view=miniTempWebGLFloatBuffers[16*count];var heap=HEAPF32;value=value>>2;count*=16;for(var i=0;i>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4x2fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix4x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)};var _emscripten_glUniformMatrix4x3fv=(location,count,transpose,value)=>{count&&GLctx.uniformMatrix4x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)};var _emscripten_glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glVertex2f=(x,y)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=0;GLImmediate.vertexData[GLImmediate.vertexCounter++]=1;assert(GLImmediate.vertexCounter<<2_glVertex2f(HEAPF32[p>>2],HEAPF32[p+4>>2]);var _emscripten_glVertex2i=_glVertex2f;var _emscripten_glVertex3f=(x,y,z)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;GLImmediate.vertexData[GLImmediate.vertexCounter++]=1;assert(GLImmediate.vertexCounter<<2_glVertex3f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2]);var _emscripten_glVertex3i=_glVertex3f;var _emscripten_glVertex4f=(x,y,z,w)=>{assert(GLImmediate.mode>=0);GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;GLImmediate.vertexData[GLImmediate.vertexCounter++]=w;assert(GLImmediate.vertexCounter<<2_glVertex4f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2],HEAPF32[p+12>>2]);var _emscripten_glVertex4i=_glVertex4f;var _emscripten_glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);var _emscripten_glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);var _emscripten_glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);var _emscripten_glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);var _emscripten_glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisor=_emscripten_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorARB=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorEXT=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorNV=_glVertexAttribDivisor;var _emscripten_glVertexAttribI4i=(x0,x1,x2,x3,x4)=>GLctx.vertexAttribI4i(x0,x1,x2,x3,x4);var _emscripten_glVertexAttribI4iv=(index,v)=>{GLctx.vertexAttribI4i(index,HEAP32[v>>2],HEAP32[v+4>>2],HEAP32[v+8>>2],HEAP32[v+12>>2])};var _emscripten_glVertexAttribI4ui=(x0,x1,x2,x3,x4)=>GLctx.vertexAttribI4ui(x0,x1,x2,x3,x4);var _emscripten_glVertexAttribI4uiv=(index,v)=>{GLctx.vertexAttribI4ui(index,HEAPU32[v>>2],HEAPU32[v+4>>2],HEAPU32[v+8>>2],HEAPU32[v+12>>2])};var _emscripten_glVertexAttribIPointer=(index,size,type,stride,ptr)=>{GLctx.vertexAttribIPointer(index,size,type,stride,ptr)};var _emscripten_glVertexPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.VERTEX,size,type,stride,pointer)};var _emscripten_glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);var _emscripten_glWaitSync=(sync,flags,timeout)=>{timeout=Number(timeout);GLctx.waitSync(GL.syncs[sync],flags,timeout)};var _emscripten_has_asyncify=()=>0;var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}if(!JSEvents.canPerformEventHandlerRequests()){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};var _emscripten_request_fullscreen_strategy=(target,deferUntilInEventHandler,fullscreenStrategy)=>{var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)};var _emscripten_request_pointerlock=(target,deferUntilInEventHandler)=>{target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}if(!JSEvents.canPerformEventHandlerRequests()){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)};var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var t0=_emscripten_get_now();var replacement=growMemory(newSize);var t1=_emscripten_get_now();dbg(`Heap resize call from ${oldSize} to ${newSize} took ${t1-t0} msecs. Success: ${!!replacement}`);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){err(`navigator.getGamepads() exists, but failed to execute with exception ${e}. Disabling Gamepad access.`);navigator.getGamepads=null}return-1};var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=e=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_beforeunload_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")};var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=256;JSEvents.focusEvent||=_malloc(eventSize);var focusEventHandlerFunc=e=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_blur_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);var _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};var _emscripten_set_focus_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=getFullscreenElement();var isFullscreen=!!fullscreenElement;HEAP8[eventStruct]=isFullscreen;checkInt8(isFullscreen);HEAP8[eventStruct+1]=JSEvents.fullscreenEnabled();checkInt8(JSEvents.fullscreenEnabled());var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+2,128);stringToUTF8(id,eventStruct+130,128);HEAP32[eventStruct+260>>2]=reportedElement?reportedElement.clientWidth:0;checkInt32(reportedElement?reportedElement.clientWidth:0);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientHeight:0;checkInt32(reportedElement?reportedElement.clientHeight:0);HEAP32[eventStruct+268>>2]=screen.width;checkInt32(screen.width);HEAP32[eventStruct+272>>2]=screen.height;checkInt32(screen.height);if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=276;JSEvents.fullscreenChangeEvent||=_malloc(eventSize);var fullscreenChangeEventHandlerFunc=e=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:fullscreenChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _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,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1240;JSEvents.gamepadEvent||=_malloc(eventSize);var gamepadEventHandlerFunc=e=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)};var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)};var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=160;JSEvents.keyEvent||=_malloc(eventSize);var keyEventHandlerFunc=e=>{assert(e);var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP8[keyEventData+12]=e.ctrlKey;HEAP8[keyEventData+13]=e.shiftKey;HEAP8[keyEventData+14]=e.altKey;HEAP8[keyEventData+15]=e.metaKey;HEAP8[keyEventData+16]=e.repeat;HEAP32[idx+5]=e.charCode;HEAP32[idx+6]=e.keyCode;HEAP32[idx+7]=e.which;stringToUTF8(e.key||"",keyEventData+32,32);stringToUTF8(e.code||"",keyEventData+64,32);stringToUTF8(e.char||"",keyEventData+96,32);stringToUTF8(e.locale||"",keyEventData+128,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_keydown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);var _emscripten_set_keypress_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);var _emscripten_set_keyup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var iterFunc=getWasmTableEntry(func);setMainLoop(iterFunc,fps,simulateInfiniteLoop)};var fillMouseEventData=(eventStruct,e,target)=>{assert(eventStruct%4==0);HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP8[eventStruct+24]=e.ctrlKey;HEAP8[eventStruct+25]=e.shiftKey;HEAP8[eventStruct+26]=e.altKey;HEAP8[eventStruct+27]=e.metaKey;HEAP16[idx*2+14]=e.button;HEAP16[idx*2+15]=e.buttons;HEAP32[idx+8]=e["movementX"];HEAP32[idx+9]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+10]=e.clientX-(rect.left|0);HEAP32[idx+11]=e.clientY-(rect.top|0)};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=64;JSEvents.mouseEvent||=_malloc(eventSize);target=findEventTarget(target);var mouseEventHandlerFunc=e=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_mousedown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);var _emscripten_set_mouseenter_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);var _emscripten_set_mouseleave_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);var _emscripten_set_mousemove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);var _emscripten_set_mouseup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP8[eventStruct]=isPointerlocked;checkInt8(isPointerlocked);var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+1,128);stringToUTF8(id,eventStruct+129,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=257;JSEvents.pointerlockChangeEvent||=_malloc(eventSize);var pointerlockChangeEventHandlerFunc=e=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_pointerlockchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!document.body?.requestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)};var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=36;JSEvents.uiEvent||=_malloc(eventSize);target=findEventTarget(target);var uiEventHandlerFunc=e=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=0;checkInt32(0);HEAP32[uiEvent+4>>2]=b.clientWidth;checkInt32(b.clientWidth);HEAP32[uiEvent+8>>2]=b.clientHeight;checkInt32(b.clientHeight);HEAP32[uiEvent+12>>2]=innerWidth;checkInt32(innerWidth);HEAP32[uiEvent+16>>2]=innerHeight;checkInt32(innerHeight);HEAP32[uiEvent+20>>2]=outerWidth;checkInt32(outerWidth);HEAP32[uiEvent+24>>2]=outerHeight;checkInt32(outerHeight);HEAP32[uiEvent+28>>2]=pageXOffset|0;checkInt32(pageXOffset|0);HEAP32[uiEvent+32>>2]=pageYOffset|0;checkInt32(pageYOffset|0);if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1552;JSEvents.touchEvent||=_malloc(eventSize);target=findEventTarget(target);var touchEventHandlerFunc=e=>{assert(e);var t,touches={},et=e.touches;for(let t of et){t.isChanged=t.onTarget=0;touches[t.identifier]=t}for(let t of e.changedTouches){t.isChanged=1;touches[t.identifier]=t}for(let t of e.targetTouches){touches[t.identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;HEAPF64[touchEvent>>3]=e.timeStamp;HEAP8[touchEvent+12]=e.ctrlKey;HEAP8[touchEvent+13]=e.shiftKey;HEAP8[touchEvent+14]=e.altKey;HEAP8[touchEvent+15]=e.metaKey;var idx=touchEvent+16;var targetRect=getBoundingClientRect(target);var numTouches=0;for(let t of Object.values(touches)){var idx32=idx>>2;HEAP32[idx32+0]=t.identifier;HEAP32[idx32+1]=t.screenX;HEAP32[idx32+2]=t.screenY;HEAP32[idx32+3]=t.clientX;HEAP32[idx32+4]=t.clientY;HEAP32[idx32+5]=t.pageX;HEAP32[idx32+6]=t.pageY;HEAP8[idx+28]=t.isChanged;HEAP8[idx+29]=t.onTarget;HEAP32[idx32+8]=t.clientX-(targetRect.left|0);HEAP32[idx32+9]=t.clientY-(targetRect.top|0);idx+=48;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;checkInt32(numTouches);if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP8[eventStruct]=document.hidden;checkInt8(document.hidden);HEAP32[eventStruct+4>>2]=visibilityState;checkInt32(visibilityState)};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=8;JSEvents.visibilityChangeEvent||=_malloc(eventSize);var visibilityChangeEventHandlerFunc=e=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_visibilitychange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!specialHTMLTargets[1]){return-4}return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread)};var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=96;JSEvents.wheelEvent||=_malloc(eventSize);var wheelHandlerFunc=e=>{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"];checkInt32(e["deltaMode"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:true,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:wheelHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_wheel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}};var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);var _emscripten_sleep=()=>{abort("Please compile your program with async support in order to use asynchronous operations like emscripten_sleep")};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;checkInt32(strings.length);var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;checkInt32(bufSize);return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);checkInt64(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _glAlphaFunc=_emscripten_glAlphaFunc;var _glBindTexture=_emscripten_glBindTexture;var _glBlendFunc=_emscripten_glBlendFunc;var _glBufferData=_emscripten_glBufferData;var _glClear=_emscripten_glClear;var _glClearColor=_emscripten_glClearColor;var _glColorMask=_emscripten_glColorMask;var _glColorPointer=_emscripten_glColorPointer;var _glCullFace=_emscripten_glCullFace;var _glDeleteBuffers=_emscripten_glDeleteBuffers;var _glDeleteTextures=_emscripten_glDeleteTextures;var _glDepthFunc=_emscripten_glDepthFunc;var _glDepthMask=_emscripten_glDepthMask;var _glDepthRangef=_emscripten_glDepthRangef;var _glDisableClientState=_emscripten_glDisableClientState;var _glDrawArrays=_emscripten_glDrawArrays;var _emscripten_glFogf=(pname,param)=>{switch(pname){case 2915:GLEmulation.fogStart=param;break;case 2916:GLEmulation.fogEnd=param;break;case 2914:GLEmulation.fogDensity=param;break;case 2917:switch(param){case 2049:case 9729:if(GLEmulation.fogMode!=param){GLImmediate.currentRenderer=null;GLEmulation.fogMode=param}break;default:if(GLEmulation.fogMode!=2048){GLImmediate.currentRenderer=null;GLEmulation.fogMode=2048}break}break}};var _glFogf=_emscripten_glFogf;var _emscripten_glFogfv=(pname,param)=>{switch(pname){case 2918:GLEmulation.fogColor[0]=HEAPF32[param>>2];GLEmulation.fogColor[1]=HEAPF32[param+4>>2];GLEmulation.fogColor[2]=HEAPF32[param+8>>2];GLEmulation.fogColor[3]=HEAPF32[param+12>>2];break;case 2915:case 2916:_glFogf(pname,HEAPF32[param>>2]);break}};var _glFogfv=_emscripten_glFogfv;var _emscripten_glFogi=(pname,param)=>_glFogf(pname,param);var _glFogi=_emscripten_glFogi;var _emscripten_glFogx=_glFogi;var _glFogx=_emscripten_glFogx;var _glGenBuffers=_emscripten_glGenBuffers;var _glGenTextures=_emscripten_glGenTextures;var _glLineWidth=_emscripten_glLineWidth;var _glLoadIdentity=_emscripten_glLoadIdentity;var _glMatrixMode=_emscripten_glMatrixMode;var _glMultMatrixf=_emscripten_glMultMatrixf;var _glNormal3f=_emscripten_glNormal3f;var _glOrtho=_emscripten_glOrtho;var _emscripten_glOrthof=_glOrtho;var _glOrthof=_emscripten_glOrthof;var _glPolygonOffset=_emscripten_glPolygonOffset;var _glPopMatrix=_emscripten_glPopMatrix;var _glPushMatrix=_emscripten_glPushMatrix;var _glRotatef=_emscripten_glRotatef;var _glScalef=_emscripten_glScalef;var _glScissor=_emscripten_glScissor;var _glShadeModel=_emscripten_glShadeModel;var _glTexCoordPointer=_emscripten_glTexCoordPointer;var _glTexImage2D=_emscripten_glTexImage2D;var _glTexParameteri=_emscripten_glTexParameteri;var _glTexSubImage2D=_emscripten_glTexSubImage2D;var _glTranslatef=_emscripten_glTranslatef;var _glVertexPointer=_emscripten_glVertexPointer;var _glViewport=_emscripten_glViewport;function _mcGetWorldResult(){var r=window._mcWorldResult;if(!r)return 0;window._mcWorldResult=null;window._mcWorldStatus=-1;var len=lengthBytesUTF8(r)+1;var buf=_malloc(len);stringToUTF8(r,buf,len);return buf}function _mcGetWorldStatus(){if(window._mcWorldStatus===undefined)return-1;return window._mcWorldStatus}function _mcShowCreateWorldDialog(){var overlay=document.createElement("div");overlay.id="mc-create-world";overlay.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;"+"background:rgba(0,0,0,0.8);display:flex;align-items:center;"+"justify-content:center;z-index:9999;font-family:monospace";var box=document.createElement("div");box.style.cssText="background:#3c3c3c;border:2px solid #888;padding:28px;"+"min-width:320px;color:#eee;text-align:center";box.innerHTML='

Create New World

'+'
'+'
'+''+"
"+'
'+'
'+'"+"
"+'
'+''+''+"
";overlay.appendChild(box);document.body.appendChild(overlay);setTimeout(function(){var input=document.getElementById("mc-worldname");if(input){input.focus();input.select()}},50);window._mcWorldStatus=-1;window._mcWorldResult=null;document.getElementById("mc-create-btn").onclick=function(){var nm=(document.getElementById("mc-worldname").value||"My World").trim();var mode=document.getElementById("mc-gamemode").value;window._mcWorldStatus=1;window._mcWorldResult=nm+"|"+mode;document.body.removeChild(overlay)};document.getElementById("mc-cancel-btn").onclick=function(){window._mcWorldStatus=0;window._mcWorldResult=null;document.body.removeChild(overlay)};document.getElementById("mc-worldname").onkeydown=function(e){if(e.key==="Enter")document.getElementById("mc-create-btn").click();if(e.key==="Escape")document.getElementById("mc-cancel-btn").click()}}function _mcSyncSaves(){if(typeof FS!=="undefined"){FS.syncfs(false,function(err){if(err)console.error("FS sync error:",err)})}}var dynCall=(sig,ptr,args=[],promising=false)=>{assert(ptr,`null function pointer in dynCall`);assert(!promising,"async dynCall is not supported in this mode");assert(getWasmTableEntry(ptr),`missing table entry in dynCall: ${ptr}`);var func=getWasmTableEntry(ptr);var rtn=func(...args);function convert(rtn){return rtn}return convert(rtn)};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);var FS_createPath=(...args)=>FS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);var createContext=Browser.createContext;FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();registerPreMainLoop(()=>GL.newRenderingFrameStarted());GLImmediate.setupFuncs();Browser.moduleContextCreatedCallbacks.push(()=>GLImmediate.init());GLEmulation.init();for(let i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<=288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<=288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i)}{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];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");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 emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");assert(typeof Module["ENVIRONMENT"]=="undefined","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");assert(typeof Module["STACK_SIZE"]=="undefined","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Module["wasmMemory"]=="undefined","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(typeof Module["INITIAL_MEMORY"]=="undefined","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}consumedModuleProp("preInit")}Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["createContext"]=createContext;Module["FS_preloadFile"]=FS_preloadFile;Module["FS_unlink"]=FS_unlink;Module["FS_createPath"]=FS_createPath;Module["FS_createDevice"]=FS_createDevice;Module["FS"]=FS;Module["FS_createDataFile"]=FS_createDataFile;Module["FS_createLazyFile"]=FS_createLazyFile;var missingLibrarySymbols=["writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","setTempRet0","createNamedFunction","withStackSave","getDynCaller","runtimeKeepalivePush","runtimeKeepalivePop","asmjsMangle","HandleAllocator","addOnInit","addOnPostCtor","addOnPreMain","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","hideEverythingExceptGivenElement","restoreHiddenElements","softFullscreenResizeWebGLRenderTarget","registerPointerlockErrorEventCallback","fillBatteryEventData","registerBatteryEventCallback","jsStackTrace","getCallstack","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","FS_mkdirTree","_setNetworkCallback","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","out","err","callMain","abort","wasmExports","HEAPF32","HEAPF64","HEAP8","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","writeI53ToI64","readI53FromI64","readI53FromU64","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","ptrToString","zeroMemory","exitJS","getHeapMax","growMemory","ENV","setStackLimits","ERRNO_CODES","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","runMainThreadEmAsm","jstoi_q","getExecutableName","autoResumeAudioContext","dynCall","handleException","keepRuntimeAlive","callUserCallback","maybeExit","asyncLoad","alignMemory","mmapAlloc","wasmTable","wasmMemory","getUniqueRunDependency","noExitRuntime","addOnPreRun","addOnExit","addOnPostRun","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","intArrayFromString","UTF16Decoder","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","JSEvents","registerKeyEventCallback","specialHTMLTargets","maybeCStringToJsString","findEventTarget","findCanvasEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","setLetterbox","currentFullscreenStrategy","restoreOldWindowedStyle","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","setCanvasElementSize","getCanvasElementSize","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","safeSetTimeout","emSetImmediate","emClearImmediate_deps","emClearImmediate","registerPreMainLoop","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","getSocketFromFD","getSocketAddress","preloadPlugins","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_readFile","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_forceLoadFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","GL","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","AL","GLUT","EGL","GLEW","IDBStore","emscriptenWebGLGetIndexed","webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance","webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance","GLEmulation","GLImmediate","GLImmediateSetup","emulGlGenVertexArrays","emulGlDeleteVertexArrays","emulGlIsVertexArray","emulGlBindVertexArray","print","printErr","jstoi_s","IDBFS"];unexportedSymbols.forEach(unexportedRuntimeSymbol);function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings");ignoredModuleProp("logReadFiles");ignoredModuleProp("loadSplitModule")}var ASM_CONSTS={6463912:()=>window.innerWidth,6463942:()=>window.innerHeight,6463973:()=>{if(typeof FS!=="undefined"){FS.syncfs(false,function(err){if(err)console.error("FS.syncfs save error:",err)})}},6464103:()=>document.pointerLockElement!=null?1:0,6464161:()=>window.innerWidth,6464191:()=>window.innerHeight,6464222:()=>{FS.mkdir("/games",511);FS.mount(IDBFS,{},"/games");FS.syncfs(true,function(err){if(err)console.warn("FS.syncfs load error:",err);Module._idbfsReady()})},6464394:()=>{document.addEventListener("pointerlockchange",function(){})},6464462:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},6464609:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},6464843:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){if(typeof navigator.userActivation==="undefined"){autoResumeAudioContext(SDL2.audioContext)}}}return SDL2.audioContext===undefined?-1:0},6465395:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},6465463:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined;SDL2.capture.silenceBuffer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vp",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vp",$2,[$3])};SDL2.capture.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},6467156:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}if(SDL2.audio.silenceTimer!==undefined){clearInterval(SDL2.audio.silenceTimer);SDL2.audio.silenceTimer=undefined;SDL2.audio.silenceBuffer=undefined}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vp",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"]);if(SDL2.audioContext.state==="suspended"){SDL2.audio.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.audio.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){if(typeof navigator.userActivation!=="undefined"){if(navigator.userActivation.hasBeenActive){SDL2.audioContext.resume()}}SDL2.audio.currentOutputBuffer=SDL2.audio.silenceBuffer;dynCall("vp",$2,[$3]);SDL2.audio.currentOutputBuffer=undefined};SDL2.audio.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3)}},6468331:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var buf=$0>>>2;var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{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=Browser.createContext(Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},6472885:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},6472968:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},6473037:()=>window.innerWidth,6473067:()=>window.innerHeight};var _free=Module["_free"]=makeInvalidEarlyAccess("_free");var _emscripten_is_pointer_locked=Module["_emscripten_is_pointer_locked"]=makeInvalidEarlyAccess("_emscripten_is_pointer_locked");var _syncSaves=Module["_syncSaves"]=makeInvalidEarlyAccess("_syncSaves");var _main=Module["_main"]=makeInvalidEarlyAccess("_main");var _idbfsReady=Module["_idbfsReady"]=makeInvalidEarlyAccess("_idbfsReady");var _htons=makeInvalidEarlyAccess("_htons");var _ntohs=makeInvalidEarlyAccess("_ntohs");var _fflush=makeInvalidEarlyAccess("_fflush");var _malloc=Module["_malloc"]=makeInvalidEarlyAccess("_malloc");var _strerror=makeInvalidEarlyAccess("_strerror");var _emscripten_stack_get_end=makeInvalidEarlyAccess("_emscripten_stack_get_end");var _emscripten_stack_get_base=makeInvalidEarlyAccess("_emscripten_stack_get_base");var _setThrew=makeInvalidEarlyAccess("_setThrew");var _emscripten_stack_init=makeInvalidEarlyAccess("_emscripten_stack_init");var _emscripten_stack_get_free=makeInvalidEarlyAccess("_emscripten_stack_get_free");var __emscripten_stack_restore=makeInvalidEarlyAccess("__emscripten_stack_restore");var __emscripten_stack_alloc=makeInvalidEarlyAccess("__emscripten_stack_alloc");var _emscripten_stack_get_current=makeInvalidEarlyAccess("_emscripten_stack_get_current");var ___set_stack_limits=Module["___set_stack_limits"]=makeInvalidEarlyAccess("___set_stack_limits");var memory=makeInvalidEarlyAccess("memory");var __indirect_function_table=makeInvalidEarlyAccess("__indirect_function_table");var wasmMemory=makeInvalidEarlyAccess("wasmMemory");var wasmTable=makeInvalidEarlyAccess("wasmTable");function assignWasmExports(wasmExports){assert(typeof wasmExports["free"]!="undefined","missing Wasm export: free");assert(typeof wasmExports["emscripten_is_pointer_locked"]!="undefined","missing Wasm export: emscripten_is_pointer_locked");assert(typeof wasmExports["syncSaves"]!="undefined","missing Wasm export: syncSaves");assert(typeof wasmExports["__main_argc_argv"]!="undefined","missing Wasm export: __main_argc_argv");assert(typeof wasmExports["idbfsReady"]!="undefined","missing Wasm export: idbfsReady");assert(typeof wasmExports["htons"]!="undefined","missing Wasm export: htons");assert(typeof wasmExports["ntohs"]!="undefined","missing Wasm export: ntohs");assert(typeof wasmExports["fflush"]!="undefined","missing Wasm export: fflush");assert(typeof wasmExports["malloc"]!="undefined","missing Wasm export: malloc");assert(typeof wasmExports["strerror"]!="undefined","missing Wasm export: strerror");assert(typeof wasmExports["emscripten_stack_get_end"]!="undefined","missing Wasm export: emscripten_stack_get_end");assert(typeof wasmExports["emscripten_stack_get_base"]!="undefined","missing Wasm export: emscripten_stack_get_base");assert(typeof wasmExports["setThrew"]!="undefined","missing Wasm export: setThrew");assert(typeof wasmExports["emscripten_stack_init"]!="undefined","missing Wasm export: emscripten_stack_init");assert(typeof wasmExports["emscripten_stack_get_free"]!="undefined","missing Wasm export: emscripten_stack_get_free");assert(typeof wasmExports["_emscripten_stack_restore"]!="undefined","missing Wasm export: _emscripten_stack_restore");assert(typeof wasmExports["_emscripten_stack_alloc"]!="undefined","missing Wasm export: _emscripten_stack_alloc");assert(typeof wasmExports["emscripten_stack_get_current"]!="undefined","missing Wasm export: emscripten_stack_get_current");assert(typeof wasmExports["__set_stack_limits"]!="undefined","missing Wasm export: __set_stack_limits");assert(typeof wasmExports["memory"]!="undefined","missing Wasm export: memory");assert(typeof wasmExports["__indirect_function_table"]!="undefined","missing Wasm export: __indirect_function_table");_free=Module["_free"]=createExportWrapper("free",1);_emscripten_is_pointer_locked=Module["_emscripten_is_pointer_locked"]=createExportWrapper("emscripten_is_pointer_locked",0);_syncSaves=Module["_syncSaves"]=createExportWrapper("syncSaves",0);_main=Module["_main"]=createExportWrapper("__main_argc_argv",2);_idbfsReady=Module["_idbfsReady"]=createExportWrapper("idbfsReady",0);_htons=createExportWrapper("htons",1);_ntohs=createExportWrapper("ntohs",1);_fflush=createExportWrapper("fflush",1);_malloc=Module["_malloc"]=createExportWrapper("malloc",1);_strerror=createExportWrapper("strerror",1);_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"];_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"];_setThrew=createExportWrapper("setThrew",2);_emscripten_stack_init=wasmExports["emscripten_stack_init"];_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];___set_stack_limits=Module["___set_stack_limits"]=createExportWrapper("__set_stack_limits",2);memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__assert_fail:___assert_fail,__cxa_throw:___cxa_throw,__handle_stack_overflow:___handle_stack_overflow,__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_faccessat:___syscall_faccessat,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getdents64:___syscall_getdents64,__syscall_getsockname:___syscall_getsockname,__syscall_getsockopt:___syscall_getsockopt,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_recvfrom:___syscall_recvfrom,__syscall_renameat:___syscall_renameat,__syscall_rmdir:___syscall_rmdir,__syscall_sendto:___syscall_sendto,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_abort_js:__abort_js,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_throw_longjmp:__emscripten_throw_longjmp,_tzset_js:__tzset_js,alBufferData:_alBufferData,alDeleteBuffers:_alDeleteBuffers,alDeleteSources:_alDeleteSources,alDistanceModel:_alDistanceModel,alGenBuffers:_alGenBuffers,alGenSources:_alGenSources,alGetError:_alGetError,alGetSourcei:_alGetSourcei,alListenerfv:_alListenerfv,alSource3f:_alSource3f,alSourcePlay:_alSourcePlay,alSourcef:_alSourcef,alSourcei:_alSourcei,alcCloseDevice:_alcCloseDevice,alcCreateContext:_alcCreateContext,alcDestroyContext:_alcDestroyContext,alcMakeContextCurrent:_alcMakeContextCurrent,alcOpenDevice:_alcOpenDevice,clock_time_get:_clock_time_get,eglBindAPI:_eglBindAPI,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetConfigAttrib:_eglGetConfigAttrib,eglGetDisplay:_eglGetDisplay,eglGetError:_eglGetError,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglQueryString:_eglQueryString,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,eglWaitGL:_eglWaitGL,eglWaitNative:_eglWaitNative,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_asm_const_int_sync_on_main_thread:_emscripten_asm_const_int_sync_on_main_thread,emscripten_asm_const_ptr_sync_on_main_thread:_emscripten_asm_const_ptr_sync_on_main_thread,emscripten_cancel_main_loop:_emscripten_cancel_main_loop,emscripten_date_now:_emscripten_date_now,emscripten_err:_emscripten_err,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_now:_emscripten_get_now,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_get_screen_size:_emscripten_get_screen_size,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAlphaFunc:_emscripten_glAlphaFunc,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBegin:_emscripten_glBegin,emscripten_glBeginQuery:_emscripten_glBeginQuery,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBeginTransformFeedback:_emscripten_glBeginTransformFeedback,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindBufferBase:_emscripten_glBindBufferBase,emscripten_glBindBufferRange:_emscripten_glBindBufferRange,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindProgram:_emscripten_glBindProgram,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindSampler:_emscripten_glBindSampler,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindTransformFeedback:_emscripten_glBindTransformFeedback,emscripten_glBindVertexArray:_emscripten_glBindVertexArray,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_glBlitFramebuffer:_emscripten_glBlitFramebuffer,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearBufferfi:_emscripten_glClearBufferfi,emscripten_glClearBufferfv:_emscripten_glClearBufferfv,emscripten_glClearBufferiv:_emscripten_glClearBufferiv,emscripten_glClearBufferuiv:_emscripten_glClearBufferuiv,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glClientActiveTexture:_emscripten_glClientActiveTexture,emscripten_glClientWaitSync:_emscripten_glClientWaitSync,emscripten_glClipControlEXT:_emscripten_glClipControlEXT,emscripten_glClipPlane:_emscripten_glClipPlane,emscripten_glColor3d:_emscripten_glColor3d,emscripten_glColor3f:_emscripten_glColor3f,emscripten_glColor3fv:_emscripten_glColor3fv,emscripten_glColor3ub:_emscripten_glColor3ub,emscripten_glColor3ubv:_emscripten_glColor3ubv,emscripten_glColor3ui:_emscripten_glColor3ui,emscripten_glColor3uiv:_emscripten_glColor3uiv,emscripten_glColor3us:_emscripten_glColor3us,emscripten_glColor3usv:_emscripten_glColor3usv,emscripten_glColor4d:_emscripten_glColor4d,emscripten_glColor4f:_emscripten_glColor4f,emscripten_glColor4fv:_emscripten_glColor4fv,emscripten_glColor4ub:_emscripten_glColor4ub,emscripten_glColor4ubv:_emscripten_glColor4ubv,emscripten_glColor4ui:_emscripten_glColor4ui,emscripten_glColor4us:_emscripten_glColor4us,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glColorPointer:_emscripten_glColorPointer,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexImage3D:_emscripten_glCompressedTexImage3D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCompressedTexSubImage3D:_emscripten_glCompressedTexSubImage3D,emscripten_glCopyBufferSubData:_emscripten_glCopyBufferSubData,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCopyTexSubImage3D:_emscripten_glCopyTexSubImage3D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteObject:_emscripten_glDeleteObject,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueries:_emscripten_glDeleteQueries,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteSamplers:_emscripten_glDeleteSamplers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteSync:_emscripten_glDeleteSync,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteTransformFeedbacks:_emscripten_glDeleteTransformFeedbacks,emscripten_glDeleteVertexArrays:_emscripten_glDeleteVertexArrays,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_glDisableClientState:_emscripten_glDisableClientState,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstanced:_emscripten_glDrawArraysInstanced,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawArraysInstancedARB:_emscripten_glDrawArraysInstancedARB,emscripten_glDrawArraysInstancedEXT:_emscripten_glDrawArraysInstancedEXT,emscripten_glDrawArraysInstancedNV:_emscripten_glDrawArraysInstancedNV,emscripten_glDrawBuffer:_emscripten_glDrawBuffer,emscripten_glDrawBuffers:_emscripten_glDrawBuffers,emscripten_glDrawBuffersEXT:_emscripten_glDrawBuffersEXT,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstanced:_emscripten_glDrawElementsInstanced,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glDrawElementsInstancedARB:_emscripten_glDrawElementsInstancedARB,emscripten_glDrawElementsInstancedEXT:_emscripten_glDrawElementsInstancedEXT,emscripten_glDrawElementsInstancedNV:_emscripten_glDrawElementsInstancedNV,emscripten_glDrawRangeElements:_emscripten_glDrawRangeElements,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableClientState:_emscripten_glEnableClientState,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEnd:_emscripten_glEnd,emscripten_glEndQuery:_emscripten_glEndQuery,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glEndTransformFeedback:_emscripten_glEndTransformFeedback,emscripten_glFenceSync:_emscripten_glFenceSync,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFramebufferTextureLayer:_emscripten_glFramebufferTextureLayer,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glFrustum:_emscripten_glFrustum,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueries:_emscripten_glGenQueries,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenSamplers:_emscripten_glGenSamplers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenTransformFeedbacks:_emscripten_glGenTransformFeedbacks,emscripten_glGenVertexArrays:_emscripten_glGenVertexArrays,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetActiveUniformBlockName:_emscripten_glGetActiveUniformBlockName,emscripten_glGetActiveUniformBlockiv:_emscripten_glGetActiveUniformBlockiv,emscripten_glGetActiveUniformsiv:_emscripten_glGetActiveUniformsiv,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteri64v:_emscripten_glGetBufferParameteri64v,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFragDataLocation:_emscripten_glGetFragDataLocation,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetInfoLog:_emscripten_glGetInfoLog,emscripten_glGetInteger64i_v:_emscripten_glGetInteger64i_v,emscripten_glGetInteger64v:_emscripten_glGetInteger64v,emscripten_glGetIntegeri_v:_emscripten_glGetIntegeri_v,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetInternalformativ:_emscripten_glGetInternalformativ,emscripten_glGetObjectParameteriv:_emscripten_glGetObjectParameteriv,emscripten_glGetPointerv:_emscripten_glGetPointerv,emscripten_glGetProgramBinary:_emscripten_glGetProgramBinary,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuiv:_emscripten_glGetQueryObjectuiv,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryiv:_emscripten_glGetQueryiv,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetSamplerParameterfv:_emscripten_glGetSamplerParameterfv,emscripten_glGetSamplerParameteriv:_emscripten_glGetSamplerParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetStringi:_emscripten_glGetStringi,emscripten_glGetSynciv:_emscripten_glGetSynciv,emscripten_glGetTexEnvfv:_emscripten_glGetTexEnvfv,emscripten_glGetTexEnviv:_emscripten_glGetTexEnviv,emscripten_glGetTexLevelParameteriv:_emscripten_glGetTexLevelParameteriv,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetTransformFeedbackVarying:_emscripten_glGetTransformFeedbackVarying,emscripten_glGetUniformBlockIndex:_emscripten_glGetUniformBlockIndex,emscripten_glGetUniformIndices:_emscripten_glGetUniformIndices,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetUniformuiv:_emscripten_glGetUniformuiv,emscripten_glGetVertexAttribIiv:_emscripten_glGetVertexAttribIiv,emscripten_glGetVertexAttribIuiv:_emscripten_glGetVertexAttribIuiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glInvalidateFramebuffer:_emscripten_glInvalidateFramebuffer,emscripten_glInvalidateSubFramebuffer:_emscripten_glInvalidateSubFramebuffer,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQuery:_emscripten_glIsQuery,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsSampler:_emscripten_glIsSampler,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsSync:_emscripten_glIsSync,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsTransformFeedback:_emscripten_glIsTransformFeedback,emscripten_glIsVertexArray:_emscripten_glIsVertexArray,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLightModelf:_emscripten_glLightModelf,emscripten_glLightModelfv:_emscripten_glLightModelfv,emscripten_glLightfv:_emscripten_glLightfv,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glLoadIdentity:_emscripten_glLoadIdentity,emscripten_glLoadMatrixd:_emscripten_glLoadMatrixd,emscripten_glLoadMatrixf:_emscripten_glLoadMatrixf,emscripten_glLoadTransposeMatrixd:_emscripten_glLoadTransposeMatrixd,emscripten_glLoadTransposeMatrixf:_emscripten_glLoadTransposeMatrixf,emscripten_glMaterialfv:_emscripten_glMaterialfv,emscripten_glMatrixMode:_emscripten_glMatrixMode,emscripten_glMultMatrixd:_emscripten_glMultMatrixd,emscripten_glMultMatrixf:_emscripten_glMultMatrixf,emscripten_glMultTransposeMatrixd:_emscripten_glMultTransposeMatrixd,emscripten_glMultTransposeMatrixf:_emscripten_glMultTransposeMatrixf,emscripten_glNormal3f:_emscripten_glNormal3f,emscripten_glNormalPointer:_emscripten_glNormalPointer,emscripten_glOrtho:_emscripten_glOrtho,emscripten_glPauseTransformFeedback:_emscripten_glPauseTransformFeedback,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonMode:_emscripten_glPolygonMode,emscripten_glPolygonModeWEBGL:_emscripten_glPolygonModeWEBGL,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glPolygonOffsetClampEXT:_emscripten_glPolygonOffsetClampEXT,emscripten_glPopMatrix:_emscripten_glPopMatrix,emscripten_glProgramBinary:_emscripten_glProgramBinary,emscripten_glProgramParameteri:_emscripten_glProgramParameteri,emscripten_glPushMatrix:_emscripten_glPushMatrix,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadBuffer:_emscripten_glReadBuffer,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glRenderbufferStorageMultisample:_emscripten_glRenderbufferStorageMultisample,emscripten_glResumeTransformFeedback:_emscripten_glResumeTransformFeedback,emscripten_glRotated:_emscripten_glRotated,emscripten_glRotatef:_emscripten_glRotatef,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glSamplerParameterf:_emscripten_glSamplerParameterf,emscripten_glSamplerParameterfv:_emscripten_glSamplerParameterfv,emscripten_glSamplerParameteri:_emscripten_glSamplerParameteri,emscripten_glSamplerParameteriv:_emscripten_glSamplerParameteriv,emscripten_glScaled:_emscripten_glScaled,emscripten_glScalef:_emscripten_glScalef,emscripten_glScissor:_emscripten_glScissor,emscripten_glShadeModel:_emscripten_glShadeModel,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_glTexCoord2f:_emscripten_glTexCoord2f,emscripten_glTexCoord2fv:_emscripten_glTexCoord2fv,emscripten_glTexCoord2i:_emscripten_glTexCoord2i,emscripten_glTexCoord3f:_emscripten_glTexCoord3f,emscripten_glTexCoord4f:_emscripten_glTexCoord4f,emscripten_glTexCoordPointer:_emscripten_glTexCoordPointer,emscripten_glTexGenfv:_emscripten_glTexGenfv,emscripten_glTexGeni:_emscripten_glTexGeni,emscripten_glTexImage1D:_emscripten_glTexImage1D,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexImage3D:_emscripten_glTexImage3D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexStorage2D:_emscripten_glTexStorage2D,emscripten_glTexStorage3D:_emscripten_glTexStorage3D,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glTexSubImage3D:_emscripten_glTexSubImage3D,emscripten_glTransformFeedbackVaryings:_emscripten_glTransformFeedbackVaryings,emscripten_glTranslated:_emscripten_glTranslated,emscripten_glTranslatef:_emscripten_glTranslatef,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform1ui:_emscripten_glUniform1ui,emscripten_glUniform1uiv:_emscripten_glUniform1uiv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform2ui:_emscripten_glUniform2ui,emscripten_glUniform2uiv:_emscripten_glUniform2uiv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform3ui:_emscripten_glUniform3ui,emscripten_glUniform3uiv:_emscripten_glUniform3uiv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniform4ui:_emscripten_glUniform4ui,emscripten_glUniform4uiv:_emscripten_glUniform4uiv,emscripten_glUniformBlockBinding:_emscripten_glUniformBlockBinding,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix2x3fv:_emscripten_glUniformMatrix2x3fv,emscripten_glUniformMatrix2x4fv:_emscripten_glUniformMatrix2x4fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix3x2fv:_emscripten_glUniformMatrix3x2fv,emscripten_glUniformMatrix3x4fv:_emscripten_glUniformMatrix3x4fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUniformMatrix4x2fv:_emscripten_glUniformMatrix4x2fv,emscripten_glUniformMatrix4x3fv:_emscripten_glUniformMatrix4x3fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertex2f:_emscripten_glVertex2f,emscripten_glVertex2fv:_emscripten_glVertex2fv,emscripten_glVertex2i:_emscripten_glVertex2i,emscripten_glVertex3f:_emscripten_glVertex3f,emscripten_glVertex3fv:_emscripten_glVertex3fv,emscripten_glVertex3i:_emscripten_glVertex3i,emscripten_glVertex4f:_emscripten_glVertex4f,emscripten_glVertex4fv:_emscripten_glVertex4fv,emscripten_glVertex4i:_emscripten_glVertex4i,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_glVertexAttribDivisor:_emscripten_glVertexAttribDivisor,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribDivisorARB:_emscripten_glVertexAttribDivisorARB,emscripten_glVertexAttribDivisorEXT:_emscripten_glVertexAttribDivisorEXT,emscripten_glVertexAttribDivisorNV:_emscripten_glVertexAttribDivisorNV,emscripten_glVertexAttribI4i:_emscripten_glVertexAttribI4i,emscripten_glVertexAttribI4iv:_emscripten_glVertexAttribI4iv,emscripten_glVertexAttribI4ui:_emscripten_glVertexAttribI4ui,emscripten_glVertexAttribI4uiv:_emscripten_glVertexAttribI4uiv,emscripten_glVertexAttribIPointer:_emscripten_glVertexAttribIPointer,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glVertexPointer:_emscripten_glVertexPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_glWaitSync:_emscripten_glWaitSync,emscripten_has_asyncify:_emscripten_has_asyncify,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_set_window_title:_emscripten_set_window_title,emscripten_sleep:_emscripten_sleep,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,glAlphaFunc:_glAlphaFunc,glBindBuffer:_glBindBuffer,glBindTexture:_glBindTexture,glBlendFunc:_glBlendFunc,glBufferData:_glBufferData,glClear:_glClear,glClearColor:_glClearColor,glColor4f:_glColor4f,glColorMask:_glColorMask,glColorPointer:_glColorPointer,glCullFace:_glCullFace,glDeleteBuffers:_glDeleteBuffers,glDeleteTextures:_glDeleteTextures,glDepthFunc:_glDepthFunc,glDepthMask:_glDepthMask,glDepthRangef:_glDepthRangef,glDisable:_glDisable,glDisableClientState:_glDisableClientState,glDrawArrays:_glDrawArrays,glEnable:_glEnable,glEnableClientState:_glEnableClientState,glFogf:_glFogf,glFogfv:_glFogfv,glFogx:_glFogx,glGenBuffers:_glGenBuffers,glGenTextures:_glGenTextures,glGetFloatv:_glGetFloatv,glHint:_glHint,glLineWidth:_glLineWidth,glLoadIdentity:_glLoadIdentity,glMatrixMode:_glMatrixMode,glMultMatrixf:_glMultMatrixf,glNormal3f:_glNormal3f,glOrthof:_glOrthof,glPolygonOffset:_glPolygonOffset,glPopMatrix:_glPopMatrix,glPushMatrix:_glPushMatrix,glRotatef:_glRotatef,glScalef:_glScalef,glScissor:_glScissor,glShadeModel:_glShadeModel,glTexCoordPointer:_glTexCoordPointer,glTexImage2D:_glTexImage2D,glTexParameteri:_glTexParameteri,glTexSubImage2D:_glTexSubImage2D,glTranslatef:_glTranslatef,glVertexPointer:_glVertexPointer,glViewport:_glViewport,invoke_iii,invoke_vii,invoke_viiii,mcGetWorldResult:_mcGetWorldResult,mcGetWorldStatus:_mcGetWorldStatus,mcShowCreateWorldDialog:_mcShowCreateWorldDialog,mcSyncSaves:_mcSyncSaves};function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}var calledRun;function callMain(args=[]){assert(runDependencies==0,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])');assert(typeof onPreRuns==="undefined"||onPreRuns.length==0,"cannot call main when preRun functions remain to be called");var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;for(var arg of args){HEAPU32[argv_ptr>>2]=stringToUTF8OnStack(arg);argv_ptr+=4}HEAPU32[argv_ptr>>2]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(args=arguments_){if(runDependencies>0){dependenciesFulfilled=run;return}stackCheckInit();preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){assert(!calledRun);calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();Module["onRuntimeInitialized"]?.();consumedModuleProp("onRuntimeInitialized");var noInitialRun=Module["noInitialRun"]||false;if(!noInitialRun)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{_fflush(0);for(var name of["stdout","stderr"]){var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty?.output?.length){has=true}}}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.")}}var wasmExports;createWasm();run(); diff --git a/index.wasm b/index.wasm index fff272b1fd9d7caf64876a2a01de626bfdc936a6..b3087cbce437dbdd4b426fc03e8fcfc2d9992f23 100644 GIT binary patch delta 138058 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�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 zms�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Н5uE2EbOnK{{w2uk2(BI^VnTkYOUj85m+TUWO}FnUCvtpX z#x79b=<1U}nKZU>H^T~+1T;|`&_v$BfF=mEHPK9o*6oc}Kj><<65Jx;>^i`!ssw%& z!6gzdAh=G#MFeN<6ExcZKr^%8C(xLLv{2+rCs7-f-cxf0GH zxIn^`C8-k1l1XxtO6W@}p)6&#(+PzMmDH1U52$2YKqaN01XMzxt&##t_47DU4g?+& z;5GtZJ1t78jNrGA3%G*djiMrC))D+F7lqtJ@cZ$^3qik~;MO+;_i}=(B~2B zG=Z=zPzI%eGH5;=C<6lRGN_bH{{;z#Y}10^|_5{Ain@r0Rbuk0&GLLEdYUbT__-Mo6L0)!DSLA4pIQ(U=}otva2I#NC0BdP5@#h z1W0q3`=kIg<=9uti~1&YIy;D|A&#xZ(dtU{1q9PeKsXNw(Cx;OJ-)EJ$!_pD0@xP% zNG*@;m(_?#eE@*yk5&lSU(`f-|0fPgjL>$hJb)C7zW!JxfbCcth%)ab zkugHsu?X!BN3;zGc;Eg>bHdTlgt3I>UM4(&2n?UEsRHWx#cV z>kiigt|weCxZZGm;QGS#gX<4B0B#`MAh^MBL*RzO4TBpFHv(=X+$gxwaAV-c!i|GF z3vN7|33oQ!IdJE~O@KQOZX(t{NI@|?tGvH>zT?jV|ZZ_OSa2LZ} z0(U9g9JtHi=E7YLcLm&)a96=y4R;OPwQ$$L&4arh?gqFU;ckMv8E!t@0=R{6e}KCM z?pC-(aEsw?gZm@g?QnO%-Dy2`{H|wib{6!sMqK)*W>uNTd*1w~^OQgFMK}McdurA< eH#su?&_82d|BSmG4o6hRq){2uMrF(*`2PWbTTgrd delta 138580 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

_sOK3poN9AG}Gz`@0$AON303OrHA=A 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

%G-agOU%4)_J$=*h0DJ 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 H?@IcA!_a1<