From 1a07786e7a089cf18f6d9040166f2237c942874a Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sun, 3 Sep 2023 15:54:32 -0500 Subject: [PATCH] Fix minor bugs and levels. Ready to go. Final post-fix feature build. --- olcCodeJam2023Entry/Scenario.cpp | 31 ++ olcCodeJam2023Entry/Unit.cpp | 33 +- olcCodeJam2023Entry/Unit.h | 2 +- olcCodeJam2023Entry/VirusAttack.cpp | 561 ++++++++++++++-------------- olcCodeJam2023Entry/pge.js | 2 +- olcCodeJam2023Entry/pge.wasm | Bin 1134759 -> 1141724 bytes 6 files changed, 339 insertions(+), 290 deletions(-) diff --git a/olcCodeJam2023Entry/Scenario.cpp b/olcCodeJam2023Entry/Scenario.cpp index 41a10c5..af3ef61 100644 --- a/olcCodeJam2023Entry/Scenario.cpp +++ b/olcCodeJam2023Entry/Scenario.cpp @@ -143,6 +143,37 @@ void Scenario::RunAI(Resources&enemy_resources,std::vectorIsFriendly()&&u->IsPlatform()){ + std::arrayunitChoiceList={UnitType::RAMBank,UnitType::Refresher,UnitType::Refresher,UnitType::Turret, + UnitType::Turret,UnitType::Turret,UnitType::MemoryGuard}; + std::array,7>unitResourceCostList={RAMBank::resourceCost,Refresher::resourceCost,Refresher::resourceCost,Turret::resourceCost, + Turret::resourceCost,Turret::resourceCost,MemoryGuard::resourceCost}; + int randomIndex=rand()%unitChoiceList.size(); + UnitType buildUnit=unitChoiceList[randomIndex]; + + int totalCost=0; + for(int i=0;iSetBuildUnit(8,std::make_shared(game.GetPGE(),u->GetPos(),IMAGES,false),SOUNDS); \ + }break; + switch(buildUnit){ + Build(RAMBank) + Build(Refresher) + Build(Turret) + Build(MemoryGuard) + } + if(enemy_resources.health>0){enemy_resources.health=std::max(0,enemy_resources.health-totalCost);}else + if(enemy_resources.atkSpd>0){enemy_resources.atkSpd=std::max(0,enemy_resources.atkSpd-totalCost);}else + if(enemy_resources.moveSpd>0){enemy_resources.moveSpd=std::max(0,enemy_resources.moveSpd-totalCost);}else + if(enemy_resources.range>0){enemy_resources.range=std::max(0,enemy_resources.range-totalCost);}else + {enemy_resources.procedure=std::max(0,enemy_resources.procedure-totalCost); + } + } + } switch(flags.difficulty){ case 0:{ unitBuildTimer=120; diff --git a/olcCodeJam2023Entry/Unit.cpp b/olcCodeJam2023Entry/Unit.cpp index 6c6e60c..ca2d6b9 100644 --- a/olcCodeJam2023Entry/Unit.cpp +++ b/olcCodeJam2023Entry/Unit.cpp @@ -727,6 +727,7 @@ void Unit::_Update(PixelGameEngine*pge,std::vector>&SOUND } if(!attachedPoint.expired()){ + SetPos(attachedPoint.lock()->pos+vf2d{cos(float(attachedPoint.lock()->rot+PI/2))*16,sin(float(attachedPoint.lock()->rot+PI/2))*16}); collectionTime-=pge->GetElapsedTime(); if(collectionTime<=0){ collectionTime=CONSTANT::COLLECTION_WAIT_TIME; @@ -939,11 +940,26 @@ void Unit::Update(PixelGameEngine*pge,std::vector>&SOUNDS void Unit::Attacked(std::weak_ptrattacker){} -void Unit::_Attacked(std::weak_ptrattacker){ +void Unit::_Attacked(std::weak_ptrattacker,std::vector>&otherUnits){ Attacked(attacker); if(attacker.lock()->IsFriendly()!=IsFriendly()&&CanInteractWithEnemies()){ SetTargetUnit(attacker); } + if(attacker.lock()->IsFriendly()!=IsFriendly()){ + for(auto&u:otherUnits){ + if(this!=u.get()&&!u->IsFriendly()&&u->GetCurrentTarget().expired()&&u->CanMove()&&!u->IsAllocator()){ + geom2d::linedistLine={GetPos(),u->GetPos()}; + if(distLine.length()<320){ + if(u->CanInteractWithEnemies()){ + u->SetTargetUnit(attacker); + }else + if(u->CanInteractWithAllies()){ + u->SetTargetLocation(GetPos()); + } + } + } + } + } } void Unit::_Attack(std::weak_ptrattacker,std::weak_ptrfinalTarget,std::vector>&otherUnits,std::vector>&SOUNDS){ @@ -952,25 +968,12 @@ void Unit::_Attack(std::weak_ptrattacker,std::weak_ptrfinalTarget,st float procChance=float(GetProcedure())/procedure.size; if(util::random(1)>=1-procChance){ Attack(*finalTarget.lock(),otherUnits,SOUNDS); - finalTarget.lock()->_Attacked(attacker); + finalTarget.lock()->_Attacked(attacker,otherUnits); reloadTimer=1.f/(GetAtkSpd()/2.f); if(GetCurrentTarget().expired()&&!IsFriendly()){ if(finalTarget.lock()->IsFriendly()!=IsFriendly()&&CanInteractWithEnemies()){ SetTargetUnit(finalTarget); } - for(auto&u:otherUnits){ - if(this!=u.get()&&!u->IsFriendly()&&u->GetCurrentTarget().expired()){ - geom2d::linedistLine={GetPos(),u->GetPos()}; - if(distLine.length()<200){ - if(u->CanInteractWithEnemies()){ - u->SetTargetUnit(finalTarget); - }else - if(u->CanInteractWithAllies()){ - u->SetTargetLocation(GetPos()); - } - } - } - } } } else { reloadTimer=1.f/(GetAtkSpd()/2.f); diff --git a/olcCodeJam2023Entry/Unit.h b/olcCodeJam2023Entry/Unit.h index e60fa38..10cd29a 100644 --- a/olcCodeJam2023Entry/Unit.h +++ b/olcCodeJam2023Entry/Unit.h @@ -78,7 +78,7 @@ public: virtual void RunAI(PixelGameEngine*pge); void _RunAI(PixelGameEngine*pge); virtual void Attacked(std::weak_ptrattacker); - void _Attacked(std::weak_ptrattacker); + void _Attacked(std::weak_ptrattacker,std::vector>&otherUnits); std::weak_ptrGetCurrentTarget(); void DrawUnitDamageStats(PixelGameEngine*pge,TileTransformedView&game,std::vector>&IMAGES); bool AutoAcquiresFriendlyTargets(); diff --git a/olcCodeJam2023Entry/VirusAttack.cpp b/olcCodeJam2023Entry/VirusAttack.cpp index 34e3a70..bdfc05c 100644 --- a/olcCodeJam2023Entry/VirusAttack.cpp +++ b/olcCodeJam2023Entry/VirusAttack.cpp @@ -215,307 +215,315 @@ void VirusAttack::InitializeLevelData(){ } } #pragma endregion -#pragma region Stage 5 - { - //Stage 5 data. - LevelName stage=STAGE5; - levelData[stage].name=stage; - levelData[stage].cameraStart={96,96}; - levelData[stage].worldZoom={1,1}; - levelData[stage].size={48,48}; - levelData[stage].levelColor=DARK_GREY; - levelData[stage].bgm=Sound::BOSS1; - levelData[stage].scenarioIndex=int(stage); - levelData[stage].availableMemory=640; - levelData[stage].player_starting_resources={5,5,5,5,5}; - levelData[stage].enemy_starting_resources={5,5,5,5,5}; + #pragma region Stage 5 { - std::vector&units=levelData[stage].unitPlacement; - std::vector&collectionPoints=levelData[stage].cpPlacement; - - units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); - } + //Stage 5 data. + LevelName stage=STAGE5; + levelData[stage].name=stage; + levelData[stage].cameraStart={96,96}; + levelData[stage].worldZoom={1,1}; + levelData[stage].size={48,48}; + levelData[stage].levelColor=DARK_GREY; + levelData[stage].bgm=Sound::BOSS1; + levelData[stage].scenarioIndex=int(stage); + levelData[stage].availableMemory=640; + levelData[stage].player_starting_resources={5,5,5,5,5}; + levelData[stage].enemy_starting_resources={5,5,5,5,5}; + { + std::vector&units=levelData[stage].unitPlacement; + std::vector&collectionPoints=levelData[stage].cpPlacement; - collectionPoints.push_back(CPData{{8*24,1*24},0,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{10*24,1*24},0,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{32*24,12*24},0,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{20*24,32*24},0,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{9*24,1*24},0,MemoryType::PROCEDURE}); - collectionPoints.push_back(CPData{{1*24,7*24},-PI/2,MemoryType::PROCEDURE}); - collectionPoints.push_back(CPData{{16*24,16*24},0,MemoryType::PROCEDURE}); - collectionPoints.push_back(CPData{{36*24,1*24},-PI/2,MemoryType::PROCEDURE}); - collectionPoints.push_back(CPData{{1*24,3*24},-PI/2,MemoryType::RANGE}); - collectionPoints.push_back(CPData{{1*24,6*24},-PI/2,MemoryType::ATKSPD}); - collectionPoints.push_back(CPData{{1*24,11*24},-PI/2,MemoryType::MOVESPD}); - collectionPoints.push_back(CPData{{1*24,22*24},-PI/2,MemoryType::RANGE}); - collectionPoints.push_back(CPData{{6*24,16*24},-PI/2,MemoryType::ATKSPD}); - collectionPoints.push_back(CPData{{1*24,32*24},-PI/2,MemoryType::MOVESPD}); - collectionPoints.push_back(CPData{{(48-1)*24,(48-4)*24},PI/2,MemoryType::RANGE}); - collectionPoints.push_back(CPData{{(48-1)*24,(48-7)*24},PI/2,MemoryType::ATKSPD}); - collectionPoints.push_back(CPData{{(48-1)*24,(48-12)*24},PI/2,MemoryType::MOVESPD}); - collectionPoints.push_back(CPData{{(48-1)*24,(48-23)*24},PI/2,MemoryType::RANGE}); - collectionPoints.push_back(CPData{{(48-6)*24,(48-17)*24},PI/2,MemoryType::ATKSPD}); - collectionPoints.push_back(CPData{{(48-1)*24,(48-33)*24},PI/2,MemoryType::MOVESPD}); - - collectionPoints.push_back(CPData{{(48-8)*24,(48-2)*24},PI,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{(48-10)*24,(48-2)*24},PI,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{(48-32)*24,(48-13)*24},PI,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{(48-20)*24,(48-33)*24},PI,MemoryType::HEALTH}); - collectionPoints.push_back(CPData{{(48-9)*24,(48-2)*24},PI,MemoryType::PROCEDURE}); - collectionPoints.push_back(CPData{{(48-1)*24,(48-8)*24},PI/2,MemoryType::PROCEDURE}); - collectionPoints.push_back(CPData{{(48-16)*24,(48-17)*24},PI,MemoryType::PROCEDURE}); - collectionPoints.push_back(CPData{{(48-36)*24,(48-2)*24},PI/2,MemoryType::PROCEDURE}); + units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); + } - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{44*24,44*24},false}); + collectionPoints.push_back(CPData{{8*24,1*24},0,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{10*24,1*24},0,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{32*24,12*24},0,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{20*24,32*24},0,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{9*24,1*24},0,MemoryType::PROCEDURE}); + collectionPoints.push_back(CPData{{1*24,7*24},-PI/2,MemoryType::PROCEDURE}); + collectionPoints.push_back(CPData{{16*24,16*24},0,MemoryType::PROCEDURE}); + collectionPoints.push_back(CPData{{36*24,1*24},-PI/2,MemoryType::PROCEDURE}); + collectionPoints.push_back(CPData{{1*24,3*24},-PI/2,MemoryType::RANGE}); + collectionPoints.push_back(CPData{{1*24,6*24},-PI/2,MemoryType::ATKSPD}); + collectionPoints.push_back(CPData{{1*24,11*24},-PI/2,MemoryType::MOVESPD}); + collectionPoints.push_back(CPData{{1*24,22*24},-PI/2,MemoryType::RANGE}); + collectionPoints.push_back(CPData{{6*24,16*24},-PI/2,MemoryType::ATKSPD}); + collectionPoints.push_back(CPData{{1*24,32*24},-PI/2,MemoryType::MOVESPD}); + collectionPoints.push_back(CPData{{(48-1)*24,(48-4)*24},PI/2,MemoryType::RANGE}); + collectionPoints.push_back(CPData{{(48-1)*24,(48-7)*24},PI/2,MemoryType::ATKSPD}); + collectionPoints.push_back(CPData{{(48-1)*24,(48-12)*24},PI/2,MemoryType::MOVESPD}); + collectionPoints.push_back(CPData{{(48-1)*24,(48-23)*24},PI/2,MemoryType::RANGE}); + collectionPoints.push_back(CPData{{(48-6)*24,(48-17)*24},PI/2,MemoryType::ATKSPD}); + collectionPoints.push_back(CPData{{(48-1)*24,(48-33)*24},PI/2,MemoryType::MOVESPD}); + + collectionPoints.push_back(CPData{{(48-8)*24,(48-2)*24},PI,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{(48-10)*24,(48-2)*24},PI,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{(48-32)*24,(48-13)*24},PI,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{(48-20)*24,(48-33)*24},PI,MemoryType::HEALTH}); + collectionPoints.push_back(CPData{{(48-9)*24,(48-2)*24},PI,MemoryType::PROCEDURE}); + collectionPoints.push_back(CPData{{(48-1)*24,(48-8)*24},PI/2,MemoryType::PROCEDURE}); + collectionPoints.push_back(CPData{{(48-16)*24,(48-17)*24},PI,MemoryType::PROCEDURE}); + collectionPoints.push_back(CPData{{(48-36)*24,(48-2)*24},PI/2,MemoryType::PROCEDURE}); + + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{44*24,44*24},false}); + } + units.push_back({UnitType::Turret,vf2d{42*24,42*24},false}); + units.push_back({UnitType::LeftShifter,vf2d{42*24,44*24},false}); + units.push_back({UnitType::LeftShifter,vf2d{42*24,44*24},false}); + units.push_back({UnitType::Corrupter,vf2d{42*24,44*24},false}); + units.push_back({UnitType::RightShifter,vf2d{42*24,44*24},false}); + units.push_back({UnitType::RightShifter,vf2d{45*24,41*24},false}); + units.push_back({UnitType::RAMBank,vf2d{44*24,44*24},false}); } - units.push_back({UnitType::Turret,vf2d{42*24,42*24},false}); - units.push_back({UnitType::LeftShifter,vf2d{42*24,44*24},false}); - units.push_back({UnitType::LeftShifter,vf2d{42*24,44*24},false}); - units.push_back({UnitType::Corrupter,vf2d{42*24,44*24},false}); - units.push_back({UnitType::RightShifter,vf2d{42*24,44*24},false}); - units.push_back({UnitType::RightShifter,vf2d{45*24,41*24},false}); - units.push_back({UnitType::RAMBank,vf2d{44*24,44*24},false}); } - } -#pragma endregion -#pragma region Stage 6 - { - //Stage 6 data. - LevelName stage=STAGE6; - levelData[stage].name=stage; - levelData[stage].cameraStart={96,96}; - levelData[stage].worldZoom={1,1}; - levelData[stage].size={48,48}; - levelData[stage].levelColor=DARK_GREY; - levelData[stage].bgm=Sound::BOSS1; - levelData[stage].scenarioIndex=int(stage); - levelData[stage].availableMemory=640; - levelData[stage].player_starting_resources={5,5,5,5,5}; - levelData[stage].enemy_starting_resources={5,5,5,5,5}; + #pragma endregion + #pragma region Stage 6 { - std::vector&units=levelData[stage].unitPlacement; - std::vector&collectionPoints=levelData[stage].cpPlacement; + //Stage 6 data. + LevelName stage=STAGE6; + levelData[stage].name=stage; + levelData[stage].cameraStart={96,96}; + levelData[stage].worldZoom={1,1}; + levelData[stage].size={48,48}; + levelData[stage].levelColor=DARK_GREY; + levelData[stage].bgm=Sound::BOSS1; + levelData[stage].scenarioIndex=int(stage); + levelData[stage].availableMemory=640; + levelData[stage].player_starting_resources={5,5,5,5,5}; + levelData[stage].enemy_starting_resources={5,5,5,5,5}; + { + std::vector&units=levelData[stage].unitPlacement; + std::vector&collectionPoints=levelData[stage].cpPlacement; - units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); - } + units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); + } - std::vectorpositions={ - {{8,1},{10,1},{32,12},{20,32},{9,1},{1,7},{16,16} - ,{36,1},{1,3},{1,6},{1,11},{1,22},{6,16},{1,32}} - }; - std::vectortypes={ - {MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, - MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::RANGE, - MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,MemoryType::ATKSPD,MemoryType::MOVESPD,} - }; - if(positions.size()!=types.size()){ - throw; - } - while(positions.size()>0){ - int randomIndex=rand()%positions.size(); - int randomIndex2=rand()%types.size(); - float finalDir=0; - if(positions[randomIndex].xpositions[randomIndex].x){ - finalDir=PI; - }else{ - finalDir=PI/2; + std::vectorpositions={ + {{8,1},{10,1},{32,12},{20,32},{9,1},{1,7},{16,16} + ,{36,1},{1,3},{1,6},{1,11},{1,22},{6,16},{1,32}} + }; + std::vectortypes={ + {MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, + MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::RANGE, + MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,MemoryType::ATKSPD,MemoryType::MOVESPD,} + }; + if(positions.size()!=types.size()){ + throw; + } + while(positions.size()>0){ + int randomIndex=rand()%positions.size(); + int randomIndex2=rand()%types.size(); + float finalDir=0; + if(positions[randomIndex].xpositions[randomIndex].x){ + finalDir=PI; + }else{ + finalDir=PI/2; + } } + collectionPoints.push_back(CPData{positions[randomIndex]*24,finalDir,types[randomIndex2]}); + collectionPoints.push_back(CPData{(levelData[stage].size-positions[randomIndex]-vf2d{1,1})*24,float(finalDir+PI),types[randomIndex2]}); + positions.erase(positions.begin()+randomIndex); + types.erase(types.begin()+randomIndex2); } - collectionPoints.push_back(CPData{positions[randomIndex]*24,finalDir,types[randomIndex2]}); - collectionPoints.push_back(CPData{(levelData[stage].size-positions[randomIndex]-vf2d{1,1})*24,float(finalDir+PI),types[randomIndex2]}); - positions.erase(positions.begin()+randomIndex); - types.erase(types.begin()+randomIndex2); - } - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{44*24,44*24},false}); + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{44*24,44*24},false}); + } + units.push_back({UnitType::Refresher,vf2d{2*24,42*24},false}); + units.push_back({UnitType::MemoryGuard,vf2d{7*24,44*24},false}); + units.push_back({UnitType::LeftShifter,vf2d{2*24,44*24},false}); + units.push_back({UnitType::LeftShifter,vf2d{2*24,44*24},false}); + units.push_back({UnitType::Corrupter,vf2d{2*24,44*24},false}); + units.push_back({UnitType::RightShifter,vf2d{2*24,44*24},false}); + units.push_back({UnitType::RightShifter,vf2d{5*24,41*24},false}); + units.push_back({UnitType::RAMBank,vf2d{4*24,44*24},false}); } - units.push_back({UnitType::Refresher,vf2d{2*24,42*24},false}); - units.push_back({UnitType::MemoryGuard,vf2d{7*24,44*24},false}); - units.push_back({UnitType::LeftShifter,vf2d{2*24,44*24},false}); - units.push_back({UnitType::LeftShifter,vf2d{2*24,44*24},false}); - units.push_back({UnitType::Corrupter,vf2d{2*24,44*24},false}); - units.push_back({UnitType::RightShifter,vf2d{2*24,44*24},false}); - units.push_back({UnitType::RightShifter,vf2d{5*24,41*24},false}); - units.push_back({UnitType::RAMBank,vf2d{4*24,44*24},false}); } - } -#pragma endregion - -#pragma region Stage 7 -{ - //Stage 7 data. - LevelName stage=STAGE7; - levelData[stage].name=stage; - levelData[stage].cameraStart={96,96}; - levelData[stage].worldZoom={1,1}; - levelData[stage].size={64,64}; - levelData[stage].levelColor=DARK_RED; - levelData[stage].bgm=Sound::BOSS2; - levelData[stage].scenarioIndex=int(stage); - levelData[stage].availableMemory=960; - levelData[stage].player_starting_resources={5,5,5,5,5}; - levelData[stage].enemy_starting_resources={5,5,5,5,5}; + #pragma endregion + #pragma region Stage 7 { - std::vector&units=levelData[stage].unitPlacement; - std::vector&collectionPoints=levelData[stage].cpPlacement; + //Stage 7 data. + LevelName stage=STAGE7; + levelData[stage].name=stage; + levelData[stage].cameraStart={96,96}; + levelData[stage].worldZoom={1,1}; + levelData[stage].size={64,64}; + levelData[stage].levelColor=DARK_RED; + levelData[stage].bgm=Sound::BOSS2; + levelData[stage].scenarioIndex=int(stage); + levelData[stage].availableMemory=960; + levelData[stage].player_starting_resources={5,5,5,5,5}; + levelData[stage].enemy_starting_resources={5,5,5,5,5}; + { + std::vector&units=levelData[stage].unitPlacement; + std::vector&collectionPoints=levelData[stage].cpPlacement; - units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); - } + units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); + } - std::vectorpositions={ - {{8,1},{10,1},{32,12},{20,32},{9,1},{1,7},{16,16} - ,{36,1},{1,3},{1,6},{1,11},{1,22},{6,16},{1,32} - ,{14,16},{27,29},{14,12},{7,36},{16,30},{22,19},{39,40}} - }; - std::vectortypes={ - {MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, - MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::RANGE, - MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,MemoryType::ATKSPD,MemoryType::MOVESPD, - MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, - MemoryType::PROCEDURE,MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,} - }; - if(positions.size()!=types.size()){ - throw; - } - while(positions.size()>0){ - int randomIndex=rand()%positions.size(); - int randomIndex2=rand()%types.size(); - float finalDir=0; - if(positions[randomIndex].xpositions[randomIndex].x){ - finalDir=PI; - }else{ - finalDir=PI/2; + std::vectorpositions={ + {{8,1},{10,1},{32,12},{20,32},{9,1},{1,7},{16,16} + ,{36,1},{1,3},{1,6},{1,11},{1,22},{6,16},{1,32} + ,{14,16},{27,29},{14,12},{7,36},{16,30},{22,19},{39,40}} + }; + std::vectortypes={ + {MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, + MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::RANGE, + MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,MemoryType::ATKSPD,MemoryType::MOVESPD, + MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, + MemoryType::PROCEDURE,MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,} + }; + if(positions.size()!=types.size()){ + throw; + } + while(positions.size()>0){ + int randomIndex=rand()%positions.size(); + int randomIndex2=rand()%types.size(); + float finalDir=0; + if(positions[randomIndex].xpositions[randomIndex].x){ + finalDir=PI; + }else{ + finalDir=PI/2; + } } + collectionPoints.push_back(CPData{positions[randomIndex]*24,finalDir,types[randomIndex2]}); + collectionPoints.push_back(CPData{(levelData[stage].size-positions[randomIndex]-vf2d{1,1})*24,float(finalDir+PI),types[randomIndex2]}); + positions.erase(positions.begin()+randomIndex); + types.erase(types.begin()+randomIndex2); } - collectionPoints.push_back(CPData{positions[randomIndex]*24,finalDir,types[randomIndex2]}); - collectionPoints.push_back(CPData{(levelData[stage].size-positions[randomIndex]-vf2d{1,1})*24,float(finalDir+PI),types[randomIndex2]}); - positions.erase(positions.begin()+randomIndex); - types.erase(types.begin()+randomIndex2); - } - units.push_back({UnitType::Turret,vf2d{52*24,52*24},false}); - units.push_back({UnitType::LeftShifter,vf2d{52*24,54*24},false}); - units.push_back({UnitType::LeftShifter,vf2d{52*24,54*24},false}); - units.push_back({UnitType::Corrupter,vf2d{52*24,54*24},false}); - units.push_back({UnitType::RightShifter,vf2d{52*24,54*24},false}); - units.push_back({UnitType::RightShifter,vf2d{55*24,51*24},false}); - units.push_back({UnitType::RAMBank,vf2d{54*24,54*24},false}); - units.push_back({UnitType::RAMBank,vf2d{54*24,54*24},false}); - - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{54*24,54*24},false}); - } + units.push_back({UnitType::Turret,vf2d{52*24,52*24},false}); + units.push_back({UnitType::LeftShifter,vf2d{52*24,54*24},false}); + units.push_back({UnitType::LeftShifter,vf2d{52*24,54*24},false}); + units.push_back({UnitType::Corrupter,vf2d{52*24,54*24},false}); + units.push_back({UnitType::RightShifter,vf2d{52*24,54*24},false}); + units.push_back({UnitType::RightShifter,vf2d{55*24,51*24},false}); + units.push_back({UnitType::RAMBank,vf2d{54*24,54*24},false}); + units.push_back({UnitType::RAMBank,vf2d{54*24,54*24},false}); + + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{54*24,54*24},false}); + } - units.push_back({UnitType::Turret,vf2d{53*24,22*24},false}); - units.push_back({UnitType::RAMBank,vf2d{54*24,24*24},false}); - for(int i=0;i<2;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{54*24,25*24},false}); - } - units.push_back({UnitType::RightShifter,vf2d{53*24,24*24},false}); - units.push_back({UnitType::BitRestorer,vf2d{54*24,25*24},false}); - units.push_back({UnitType::RightShifter,vf2d{54*24,26*24},false}); - } + units.push_back({UnitType::Turret,vf2d{53*24,22*24},false}); + units.push_back({UnitType::RAMBank,vf2d{54*24,24*24},false}); + for(int i=0;i<2;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{54*24,25*24},false}); + } + units.push_back({UnitType::RightShifter,vf2d{53*24,24*24},false}); + units.push_back({UnitType::BitRestorer,vf2d{54*24,25*24},false}); + units.push_back({UnitType::RightShifter,vf2d{54*24,26*24},false}); } -#pragma endregion - - -#pragma region Stage 8 -{ - //Stage 8 data. - LevelName stage=STAGE8; - levelData[stage].name=stage; - levelData[stage].cameraStart={96,96}; - levelData[stage].worldZoom={1,1}; - levelData[stage].size={64,64}; - levelData[stage].levelColor=DARK_RED; - levelData[stage].bgm=Sound::BOSS2; - levelData[stage].scenarioIndex=int(stage); - levelData[stage].availableMemory=1280; - levelData[stage].player_starting_resources={5,5,5,5,5}; - levelData[stage].enemy_starting_resources={5,5,5,5,5}; + } + #pragma endregion + #pragma region Stage 8 { - std::vector&units=levelData[stage].unitPlacement; - std::vector&collectionPoints=levelData[stage].cpPlacement; + //Stage 8 data. + LevelName stage=STAGE8; + levelData[stage].name=stage; + levelData[stage].cameraStart={96,96}; + levelData[stage].worldZoom={1,1}; + levelData[stage].size={64,64}; + levelData[stage].levelColor=DARK_RED; + levelData[stage].bgm=Sound::BOSS2; + levelData[stage].scenarioIndex=int(stage); + levelData[stage].availableMemory=1280; + levelData[stage].player_starting_resources={5,5,5,5,5}; + levelData[stage].enemy_starting_resources={5,5,5,5,5}; + { + std::vector&units=levelData[stage].unitPlacement; + std::vector&collectionPoints=levelData[stage].cpPlacement; - units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); - } + units.push_back({UnitType::RAMBank,vf2d{4*24,4*24},true}); + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{4*24,6*24},true}); + } - std::vectorpositions={ - {{8,1},{10,1},{32,12},{20,32},{9,1},{1,7},{16,16} - ,{36,1},{1,3},{1,6},{1,11},{1,22},{6,16},{1,32} - ,{14,16},{27,29},{14,12},{7,36},{16,30},{22,19},{39,40}} - }; - std::vectortypes={ - {MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, - MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::RANGE, - MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,MemoryType::ATKSPD,MemoryType::MOVESPD, - MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, - MemoryType::PROCEDURE,MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,} - }; - if(positions.size()!=types.size()){ - throw; - } - while(positions.size()>0){ - int randomIndex=rand()%positions.size(); - int randomIndex2=rand()%types.size(); - float finalDir=0; - if(positions[randomIndex].xpositions[randomIndex].x){ - finalDir=PI; - }else{ - finalDir=PI/2; + std::vectorpositions={ + {{8,1},{10,1},{32,12},{20,32},{9,1},{1,7},{16,16} + ,{36,1},{1,3},{1,6},{1,11},{1,22},{6,16},{1,32} + ,{14,16},{27,29},{14,12},{7,36},{16,30},{22,19},{39,40}} + }; + std::vectortypes={ + {MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, + MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::PROCEDURE,MemoryType::RANGE, + MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,MemoryType::ATKSPD,MemoryType::MOVESPD, + MemoryType::HEALTH,MemoryType::HEALTH,MemoryType::PROCEDURE, + MemoryType::PROCEDURE,MemoryType::ATKSPD,MemoryType::MOVESPD,MemoryType::RANGE,} + }; + if(positions.size()!=types.size()){ + throw; + } + while(positions.size()>0){ + int randomIndex=rand()%positions.size(); + int randomIndex2=rand()%types.size(); + float finalDir=0; + if(positions[randomIndex].xpositions[randomIndex].x){ + finalDir=PI; + }else{ + finalDir=PI/2; + } } + collectionPoints.push_back(CPData{positions[randomIndex]*24,finalDir,types[randomIndex2]}); + collectionPoints.push_back(CPData{(levelData[stage].size-positions[randomIndex]-vf2d{1,1})*24,float(finalDir+PI),types[randomIndex2]}); + positions.erase(positions.begin()+randomIndex); + types.erase(types.begin()+randomIndex2); } - collectionPoints.push_back(CPData{positions[randomIndex]*24,finalDir,types[randomIndex2]}); - collectionPoints.push_back(CPData{(levelData[stage].size-positions[randomIndex]-vf2d{1,1})*24,float(finalDir+PI),types[randomIndex2]}); - positions.erase(positions.begin()+randomIndex); - types.erase(types.begin()+randomIndex2); - } - units.push_back({UnitType::Refresher,vf2d{52*24,52*24},false}); - units.push_back({UnitType::RAMBank,vf2d{54*24,54*24},false}); + for(int i=0;i<2;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{53*24,53*24},false}); + } + units.push_back({UnitType::Refresher,vf2d{56*24,56*24},false}); + units.push_back({UnitType::RAMBank,vf2d{54*24,54*24},false}); - for(int i=0;i<5;i++){ - units.push_back({UnitType::MemoryAllocator,vf2d{54*24,54*24},false}); + for(int i=0;i<5;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{39*24,35*24},false}); + } + units.push_back({UnitType::Refresher,vf2d{43*24,52*24},false}); + units.push_back({UnitType::Turret,vf2d{44*24,52*24},false}); + units.push_back({UnitType::MemoryGuard,vf2d{40*24,35*24},false}); + units.push_back({UnitType::RAMBank,vf2d{40*24,36*24},false}); + units.push_back({UnitType::Turret,vf2d{37*24,57*24},false}); + units.push_back({UnitType::Turret,vf2d{42*24,57*24},false}); + + for(int i=0;i<2;i++){ + units.push_back({UnitType::MemoryAllocator,vf2d{10*24,53*24},false}); + } + units.push_back({UnitType::RAMBank,vf2d{10*24,54*24},false}); + units.push_back({UnitType::Turret,vf2d{11*24,52*24},false}); } - - units.push_back({UnitType::RAMBank,vf2d{40*24,36*24},false}); - - units.push_back({UnitType::RAMBank,vf2d{10*24,54*24},false}); } -} -#pragma endregion + #pragma endregion } bool VirusAttack::OnUserCreate(){ @@ -1294,7 +1302,7 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){ for(auto&u:units){ u->Draw(gametv,IMAGES); - if(u->IsGuarded()){ + if(u->IsGuarded()&&!u->InFogOfWar()){ gametv.DrawDecal(u->GetPos()+vf2d{float(u->GetUnitSize().x/2),-float(u->GetUnitSize().y/2)}-vf2d{float(IMAGES[GUARD_ICON]->Sprite()->width),0.f}*0.375,IMAGES[GUARD_ICON]->Decal(),{0.375,0.375}); } } @@ -1383,9 +1391,16 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){ #pragma endregion #pragma region COMPLETED case GameState::COMPLETED:{ - DrawPartialDecal({0,0},GetScreenSize(),IMAGES[MATRIX]->Decal(),randomBackgroundOffset+gametv.GetWorldOffset()*(vf2d{32,32}/vf2d(GetScreenSize()))*gametv.GetWorldScale(),{32,32},Pixel{currentLevel->levelColor.r,currentLevel->levelColor.g,currentLevel->levelColor.b,164}/2); - completedBox.Initialize("Thank you for playing Virus Attack!\n\nCompletion Time:"+std::to_string(gameSeconds)+" seconds\n\nHuge shoutout to the OLC community, javidx9 for the PGE, and all supporters!"); + completedBox.Initialize("Thank you for playing Virus Attack!\n\nCompletion Time:"+std::to_string(gameSeconds)+" seconds\n\nHuge shoutout to the OLC community, javidx9 for the PGE, and all supporters!\n\n\nPress [Escape] to return to the main menu.",{0,0},"Congratulations!",nullptr,{float(ScreenWidth()-2),1.f}); + completedBox.UpdateAndDraw({0,0},this,player_resources,IMAGES,GetTotalUsedMemory(),currentLevel->availableMemory); + if(GetKey(ESCAPE).bPressed){ + state=GameState::MAIN_MENU; + float titleScreenY=-200; + float textOrientationY=0; + float textOrientationX=0; + levelToLoad=LevelName::STAGE1; + } }break; #pragma endregion } diff --git a/olcCodeJam2023Entry/pge.js b/olcCodeJam2023Entry/pge.js index c5a0516..fecd4c1 100644 --- a/olcCodeJam2023Entry/pge.js +++ b/olcCodeJam2023Entry/pge.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){if(Module["ENVIRONMENT_IS_PTHREAD"]||Module["$ww"])return;var loadPackage=function(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}var PACKAGE_NAME="pge.data";var REMOTE_PACKAGE_BASE="pge.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];function fetchRemotePackage(packageName,packageSize,callback,errback){if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){require("fs").readFile(packageName,function(err,contents){if(err){errback(err)}else{callback(contents.buffer)}});return}var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"](`Downloading data... (${loaded}/${total})`)}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","assets",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"](`fp ${this.name}`)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"](`fp ${that.name}`);this.requests[this.name]=null}};var files=metadata["files"];for(var i=0;i{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="pge.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).then(receiver,reason=>{err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={136188:()=>{return Module.canvas.getBoundingClientRect().left},136240:()=>{return Module.canvas.getBoundingClientRect().top},136291:()=>{return Module.olc_MOUSEX},136319:()=>{return Module.olc_MOUSEY},136347:()=>{return Module.olc_MOUSEDOWN},136377:()=>{return Module.olc_MOUSEUP},136405:()=>{Module.olc_MOUSEDOWN=-1},136431:()=>{Module.olc_MOUSEUP=-1},136455:()=>{window.onunload=Module._olc_OnPageUnload},136499:($0,$1)=>{Module.olc_AspectRatio=$0/$1;Module.olc_MOUSEDOWN=-1;Module.olc_MOUSEUP=-1;onmousemove=function(e){Module.olc_MOUSEX=e.clientX;Module.olc_MOUSEY=e.clientY};onmousedown=function(e){Module.olc_MOUSEDOWN=e.button};onmouseup=function(e){Module.olc_MOUSEUP=e.button};ontouchmove=function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY};ontouchstart=function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY};Module.olc_AssumeDefaultShells=document.querySelectorAll(".emscripten").length>=3?true:false;var olc_ResizeHandler=function(){let isFullscreen=document.fullscreenElement!=null;let width=isFullscreen?window.innerWidth:Module.canvas.parentNode.clientWidth;let height=isFullscreen?window.innerHeight:Module.canvas.parentNode.clientHeight;let viewWidth=width;let viewHeight=width/Module.olc_AspectRatio;if(viewHeight>height){viewWidth=height*Module.olc_AspectRatio;viewHeight=height}viewWidth=parseInt(viewWidth);viewHeight=parseInt(viewHeight);setTimeout(function(){if(Module.olc_AssumeDefaultShells)Module.canvas.parentNode.setAttribute("style","width: 100%; height: 70vh; margin-left: auto; margin-right: auto;");Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);Module.canvas.setAttribute("style",`width: ${viewWidth}px; height: ${viewHeight}px;`);Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus()},200)};var olc_Init=function(){if(Module.olc_AspectRatio===undefined){setTimeout(function(){Module.olc_Init()},50);return}let resizeObserver=new ResizeObserver(function(entries){Module.olc_ResizeHandler()}).observe(Module.canvas.parentNode);let mutationObserver=new MutationObserver(function(mutationsList,observer){setTimeout(function(){Module.olc_ResizeHandler()},200)}).observe(Module.canvas.parentNode,{attributes:false,childList:true,subtree:false});window.addEventListener("fullscreenchange",function(e){setTimeout(function(){Module.olc_ResizeHandler()},200)})};Module.olc_ResizeHandler=Module.olc_ResizeHandler!=undefined?Module.olc_ResizeHandler:olc_ResizeHandler;Module.olc_Init=Module.olc_Init!=undefined?Module.olc_Init:olc_Init;Module.olc_Init()},138893:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},139040:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},139274:$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){autoResumeAudioContext(SDL2.audioContext)}}return SDL2.audioContext===undefined?-1:0},139767:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},139835:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setTimeout(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)}},141487:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"])},141897:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c>2]}}},142982:$0=>{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&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>>2;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},146612:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},146695:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},146764:()=>{return window.innerWidth},146794:()=>{return window.innerHeight}};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}function listenOnce(object,event,func){object.addEventListener(event,func,{"once":true})}function autoResumeAudioContext(ctx,elements){if(!elements){elements=[document,document.getElementById("canvas")]}["keydown","mousedown","touchstart"].forEach(event=>{elements.forEach(element=>{if(element){listenOnce(element,event,()=>{if(ctx.state==="suspended")ctx.resume()})}})})}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function ___assert_fail(condition,filename,line,func){abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var exceptionCaught=[];var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_rethrow(){var info=exceptionCaught.pop();if(!info){abort("no exception to throw")}var ptr=info.excPtr;if(!info.get_rethrown()){exceptionCaught.push(info);info.set_rethrown(true);info.set_caught(false);uncaughtExceptionCount++}exceptionLast=ptr;throw exceptionLast}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)}var preloadPlugins=Module["preloadPlugins"]||[];function FS_handledByPreloadPlugin(byteArray,fullname,finish,onerror){if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled}function FS_createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}function FS_modeStringToFlags(str){var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags}function FS_getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:()=>{for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){global.performance=require("perf_hooks").performance}_emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(()=>{callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:2};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglBindAPI(api){if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0}function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _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;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _eglGetError(){return EGL.errorCode}function _eglInitialize(display,majorVersion,minorVersion){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function stringToNewUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret}function _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}function _eglSwapBuffers(dpy,surface){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}function _eglSwapInterval(display,interval){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}function _eglWaitClient(){EGL.setErrorCode(12288);return 1}var _eglWaitGL=_eglWaitClient;function _eglWaitNative(nativeEngineId){EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function runMainThreadEmAsm(code,sigPtr,argbuf,sync){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int_sync_on_main_thread(code,sigPtr,argbuf){return runMainThreadEmAsm(code,sigPtr,argbuf,1)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function withStackSave(f){var stack=stackSave();var ret=f();stackRestore(stack);return ret}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_get_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height}function stringToUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret}function getCanvasElementSize(target){return withStackSave(function(){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]];return size})}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function setCanvasElementSize(target,width,height){if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{withStackSave(function(){var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height)})}}function 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(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){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}function setLetterbox(element,topBottom,leftRight){element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function JSEvents_resizeCanvasForFullscreen(target,strategy){var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=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>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function _emscripten_get_screen_size(width,height){HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height}function _glActiveTexture(x0){GLctx.activeTexture(x0)}var _emscripten_glActiveTexture=_glActiveTexture;function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}var _emscripten_glAttachShader=_glAttachShader;function _glBeginQuery(target,id){GLctx.beginQuery(target,GL.queries[id])}var _emscripten_glBeginQuery=_glBeginQuery;function _glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])}var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;function _glBeginTransformFeedback(x0){GLctx.beginTransformFeedback(x0)}var _emscripten_glBeginTransformFeedback=_glBeginTransformFeedback;function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}var _emscripten_glBindAttribLocation=_glBindAttribLocation;function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}var _emscripten_glBindBuffer=_glBindBuffer;function _glBindBufferBase(target,index,buffer){GLctx.bindBufferBase(target,index,GL.buffers[buffer])}var _emscripten_glBindBufferBase=_glBindBufferBase;function _glBindBufferRange(target,index,buffer,offset,ptrsize){GLctx.bindBufferRange(target,index,GL.buffers[buffer],offset,ptrsize)}var _emscripten_glBindBufferRange=_glBindBufferRange;function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}var _emscripten_glBindFramebuffer=_glBindFramebuffer;function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;function _glBindSampler(unit,sampler){GLctx.bindSampler(unit,GL.samplers[sampler])}var _emscripten_glBindSampler=_glBindSampler;function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}var _emscripten_glBindTexture=_glBindTexture;function _glBindTransformFeedback(target,id){GLctx.bindTransformFeedback(target,GL.transformFeedbacks[id])}var _emscripten_glBindTransformFeedback=_glBindTransformFeedback;function _glBindVertexArray(vao){GLctx.bindVertexArray(GL.vaos[vao])}var _emscripten_glBindVertexArray=_glBindVertexArray;var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;function _glBlendColor(x0,x1,x2,x3){GLctx.blendColor(x0,x1,x2,x3)}var _emscripten_glBlendColor=_glBlendColor;function _glBlendEquation(x0){GLctx.blendEquation(x0)}var _emscripten_glBlendEquation=_glBlendEquation;function _glBlendEquationSeparate(x0,x1){GLctx.blendEquationSeparate(x0,x1)}var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}var _emscripten_glBlendFunc=_glBlendFunc;function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx.blendFuncSeparate(x0,x1,x2,x3)}var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;function _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_glBlitFramebuffer=_glBlitFramebuffer;function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}var _emscripten_glBufferData=_glBufferData;function _glBufferSubData(target,offset,size,data){if(true){size&&GLctx.bufferSubData(target,offset,HEAPU8,data,size);return}GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}var _emscripten_glBufferSubData=_glBufferSubData;function _glCheckFramebufferStatus(x0){return GLctx.checkFramebufferStatus(x0)}var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;function _glClear(x0){GLctx.clear(x0)}var _emscripten_glClear=_glClear;function _glClearBufferfi(x0,x1,x2,x3){GLctx.clearBufferfi(x0,x1,x2,x3)}var _emscripten_glClearBufferfi=_glClearBufferfi;function _glClearBufferfv(buffer,drawbuffer,value){GLctx.clearBufferfv(buffer,drawbuffer,HEAPF32,value>>2)}var _emscripten_glClearBufferfv=_glClearBufferfv;function _glClearBufferiv(buffer,drawbuffer,value){GLctx.clearBufferiv(buffer,drawbuffer,HEAP32,value>>2)}var _emscripten_glClearBufferiv=_glClearBufferiv;function _glClearBufferuiv(buffer,drawbuffer,value){GLctx.clearBufferuiv(buffer,drawbuffer,HEAPU32,value>>2)}var _emscripten_glClearBufferuiv=_glClearBufferuiv;function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}var _emscripten_glClearColor=_glClearColor;function _glClearDepthf(x0){GLctx.clearDepth(x0)}var _emscripten_glClearDepthf=_glClearDepthf;function _glClearStencil(x0){GLctx.clearStencil(x0)}var _emscripten_glClearStencil=_glClearStencil;function convertI32PairToI53(lo,hi){return(lo>>>0)+hi*4294967296}function _glClientWaitSync(sync,flags,timeout_low,timeout_high){var timeout=convertI32PairToI53(timeout_low,timeout_high);return GLctx.clientWaitSync(GL.syncs[sync],flags,timeout)}var _emscripten_glClientWaitSync=_glClientWaitSync;function _glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}var _emscripten_glColorMask=_glColorMask;function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}var _emscripten_glCompileShader=_glCompileShader;function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){if(true){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data)}else{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8,data,imageSize)}return}GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;function _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_glCompressedTexImage3D=_glCompressedTexImage3D;function _glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){if(true){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data)}else{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8,data,imageSize)}return}GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;function _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_glCompressedTexSubImage3D=_glCompressedTexSubImage3D;function _glCopyBufferSubData(x0,x1,x2,x3,x4){GLctx.copyBufferSubData(x0,x1,x2,x3,x4)}var _emscripten_glCopyBufferSubData=_glCopyBufferSubData;function _glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;function _glCopyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8){GLctx.copyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8)}var _emscripten_glCopyTexSubImage3D=_glCopyTexSubImage3D;function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}var _emscripten_glCreateProgram=_glCreateProgram;function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}var _emscripten_glCreateShader=_glCreateShader;function _glCullFace(x0){GLctx.cullFace(x0)}var _emscripten_glCullFace=_glCullFace;function _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.currentPixelPackBufferBinding)GLctx.currentPixelPackBufferBinding=0;if(id==GLctx.currentPixelUnpackBufferBinding)GLctx.currentPixelUnpackBufferBinding=0}}var _emscripten_glDeleteBuffers=_glDeleteBuffers;function _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_glDeleteFramebuffers=_glDeleteFramebuffers;function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null}var _emscripten_glDeleteProgram=_glDeleteProgram;function _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_glDeleteQueries=_glDeleteQueries;function _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_glDeleteQueriesEXT=_glDeleteQueriesEXT;function _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_glDeleteRenderbuffers=_glDeleteRenderbuffers;function _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_glDeleteSamplers=_glDeleteSamplers;function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}var _emscripten_glDeleteShader=_glDeleteShader;function _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_glDeleteSync=_glDeleteSync;function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}var _emscripten_glDeleteTextures=_glDeleteTextures;function _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 _emscripten_glDeleteTransformFeedbacks=_glDeleteTransformFeedbacks;function _glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}}var _emscripten_glDeleteVertexArrays=_glDeleteVertexArrays;var _glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;function _glDepthFunc(x0){GLctx.depthFunc(x0)}var _emscripten_glDepthFunc=_glDepthFunc;function _glDepthMask(flag){GLctx.depthMask(!!flag)}var _emscripten_glDepthMask=_glDepthMask;function _glDepthRangef(x0,x1){GLctx.depthRange(x0,x1)}var _emscripten_glDepthRangef=_glDepthRangef;function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}var _emscripten_glDetachShader=_glDetachShader;function _glDisable(x0){GLctx.disable(x0)}var _emscripten_glDisable=_glDisable;function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}var _emscripten_glDrawArrays=_glDrawArrays;function _glDrawArraysInstanced(mode,first,count,primcount){GLctx.drawArraysInstanced(mode,first,count,primcount)}var _emscripten_glDrawArraysInstanced=_glDrawArraysInstanced;var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;var _glDrawArraysInstancedARB=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedARB=_glDrawArraysInstancedARB;var _glDrawArraysInstancedEXT=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedEXT=_glDrawArraysInstancedEXT;var _glDrawArraysInstancedNV=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedNV=_glDrawArraysInstancedNV;var tempFixedLengthArray=[];function _glDrawBuffers(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)}var _emscripten_glDrawBuffers=_glDrawBuffers;var _glDrawBuffersEXT=_glDrawBuffers;var _emscripten_glDrawBuffersEXT=_glDrawBuffersEXT;var _glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}var _emscripten_glDrawElements=_glDrawElements;function _glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx.drawElementsInstanced(mode,count,type,indices,primcount)}var _emscripten_glDrawElementsInstanced=_glDrawElementsInstanced;var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;var _glDrawElementsInstancedARB=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedARB=_glDrawElementsInstancedARB;var _glDrawElementsInstancedEXT=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedEXT=_glDrawElementsInstancedEXT;var _glDrawElementsInstancedNV=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedNV=_glDrawElementsInstancedNV;function _glDrawRangeElements(mode,start,end,count,type,indices){_glDrawElements(mode,count,type,indices)}var _emscripten_glDrawRangeElements=_glDrawRangeElements;function _glEnable(x0){GLctx.enable(x0)}var _emscripten_glEnable=_glEnable;function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;function _glEndQuery(x0){GLctx.endQuery(x0)}var _emscripten_glEndQuery=_glEndQuery;function _glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}var _emscripten_glEndQueryEXT=_glEndQueryEXT;function _glEndTransformFeedback(){GLctx.endTransformFeedback()}var _emscripten_glEndTransformFeedback=_glEndTransformFeedback;function _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_glFenceSync=_glFenceSync;function _glFinish(){GLctx.finish()}var _emscripten_glFinish=_glFinish;function _glFlush(){GLctx.flush()}var _emscripten_glFlush=_glFlush;function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;function _glFramebufferTextureLayer(target,attachment,texture,level,layer){GLctx.framebufferTextureLayer(target,attachment,GL.textures[texture],level,layer)}var _emscripten_glFramebufferTextureLayer=_glFramebufferTextureLayer;function _glFrontFace(x0){GLctx.frontFace(x0)}var _emscripten_glFrontFace=_glFrontFace;function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}var _emscripten_glGenBuffers=_glGenBuffers;function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}var _emscripten_glGenFramebuffers=_glGenFramebuffers;function _glGenQueries(n,ids){__glGenObject(n,ids,"createQuery",GL.queries)}var _emscripten_glGenQueries=_glGenQueries;function _glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}}var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;function _glGenSamplers(n,samplers){__glGenObject(n,samplers,"createSampler",GL.samplers)}var _emscripten_glGenSamplers=_glGenSamplers;function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}var _emscripten_glGenTextures=_glGenTextures;function _glGenTransformFeedbacks(n,ids){__glGenObject(n,ids,"createTransformFeedback",GL.transformFeedbacks)}var _emscripten_glGenTransformFeedbacks=_glGenTransformFeedbacks;function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _emscripten_glGenVertexArrays=_glGenVertexArrays;var _glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;function _glGenerateMipmap(x0){GLctx.generateMipmap(x0)}var _emscripten_glGenerateMipmap=_glGenerateMipmap;function __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;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}}function _glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;function _glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}var _emscripten_glGetActiveUniform=_glGetActiveUniform;function _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}else{if(length)HEAP32[length>>2]=0}}var _emscripten_glGetActiveUniformBlockName=_glGetActiveUniformBlockName;function _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;return}var result=GLctx.getActiveUniformBlockParameter(program,uniformBlockIndex,pname);if(result===null)return;if(pname==35395){for(var i=0;i>2]=result[i]}}else{HEAP32[params>>2]=result}}var _emscripten_glGetActiveUniformBlockiv=_glGetActiveUniformBlockiv;function _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]}}var _emscripten_glGetActiveUniformsiv=_glGetActiveUniformsiv;function _glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}var _emscripten_glGetAttribLocation=_glGetAttribLocation;function writeI53ToI64(ptr,num){HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}function 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}var exts=GLctx.getSupportedExtensions()||[];ret=2*exts.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];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i>>0]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(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;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p>>0]=ret?1:0;break}}function _glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}var _emscripten_glGetBooleanv=_glGetBooleanv;function _glGetBufferParameteri64v(target,value,data){if(!data){GL.recordError(1281);return}writeI53ToI64(data,GLctx.getBufferParameter(target,value))}var _emscripten_glGetBufferParameteri64v=_glGetBufferParameteri64v;function _glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;function _glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}var _emscripten_glGetError=_glGetError;function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}var _emscripten_glGetFloatv=_glGetFloatv;function _glGetFragDataLocation(program,name){return GLctx.getFragDataLocation(GL.programs[program],UTF8ToString(name))}var _emscripten_glGetFragDataLocation=_glGetFragDataLocation;function _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}var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;function 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;break;case 2:HEAPF32[data>>2]=ret;break;case 4:HEAP8[data>>0]=ret?1:0;break;default:throw"internal emscriptenWebGLGetIndexed() error, bad type: "+type}}function _glGetInteger64i_v(target,index,data){emscriptenWebGLGetIndexed(target,index,data,1)}var _emscripten_glGetInteger64i_v=_glGetInteger64i_v;function _glGetInteger64v(name_,p){emscriptenWebGLGet(name_,p,1)}var _emscripten_glGetInteger64v=_glGetInteger64v;function _glGetIntegeri_v(target,index,data){emscriptenWebGLGetIndexed(target,index,data,0)}var _emscripten_glGetIntegeri_v=_glGetIntegeri_v;function _glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}var _emscripten_glGetIntegerv=_glGetIntegerv;function _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]}}var _emscripten_glGetInternalformativ=_glGetInternalformativ;function _glGetProgramBinary(program,bufSize,length,binaryFormat,binary){GL.recordError(1282)}var _emscripten_glGetProgramBinary=_glGetProgramBinary;function _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}var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;function _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}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}}var _emscripten_glGetProgramiv=_glGetProgramiv;function _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_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;function _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}var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;function _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}var _emscripten_glGetQueryObjectuiv=_glGetQueryObjectuiv;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;function _glGetQueryiv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getQuery(target,pname)}var _emscripten_glGetQueryiv=_glGetQueryiv;function _glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;function _glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;function _glGetSamplerParameterfv(sampler,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)}var _emscripten_glGetSamplerParameterfv=_glGetSamplerParameterfv;function _glGetSamplerParameteriv(sampler,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)}var _emscripten_glGetSamplerParameteriv=_glGetSamplerParameteriv;function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;function _glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;function _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}var _emscripten_glGetShaderSource=_glGetShaderSource;function _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}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}var _emscripten_glGetShaderiv=_glGetShaderiv;function _glGetString(name_){var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s&&stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);if(true)glVersion="OpenGL ES 3.0 ("+glVersion+")";else{glVersion="OpenGL ES 2.0 ("+glVersion+")"}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 _emscripten_glGetString=_glGetString;function _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=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));exts=exts.map(function(e){return stringToNewUTF8(e)});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_glGetStringi=_glGetStringi;function _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;if(length)HEAP32[length>>2]=1}}var _emscripten_glGetSynciv=_glGetSynciv;function _glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;function _glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;function _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}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}var _emscripten_glGetTransformFeedbackVarying=_glGetTransformFeedbackVarying;function _glGetUniformBlockIndex(program,uniformBlockName){return GLctx.getUniformBlockIndex(GL.programs[program],UTF8ToString(uniformBlockName))}var _emscripten_glGetUniformBlockIndex=_glGetUniformBlockIndex;function _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]}}var _emscripten_glGetUniformIndices=_glGetUniformIndices;function jstoi_q(str){return parseInt(str)}function webglGetLeftBracePos(name){return name.slice(-1)=="]"&&name.lastIndexOf("[")}function webglPrepareUniformLocationsBeforeFirstUse(program){var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex0?"["+webglLoc+"]":""))}return webglLoc}else{GL.recordError(1282)}}function 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;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}var _emscripten_glGetUniformfv=_glGetUniformfv;function _glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}var _emscripten_glGetUniformiv=_glGetUniformiv;function _glGetUniformuiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}var _emscripten_glGetUniformuiv=_glGetUniformuiv;function 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"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}}function _glGetVertexAttribIiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,0)}var _emscripten_glGetVertexAttribIiv=_glGetVertexAttribIiv;var _glGetVertexAttribIuiv=_glGetVertexAttribIiv;var _emscripten_glGetVertexAttribIuiv=_glGetVertexAttribIuiv;function _glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;function _glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;function _glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;function _glHint(x0,x1){GLctx.hint(x0,x1)}var _emscripten_glHint=_glHint;function _glInvalidateFramebuffer(target,numAttachments,attachments){var list=tempFixedLengthArray[numAttachments];for(var i=0;i>2]}GLctx.invalidateFramebuffer(target,list)}var _emscripten_glInvalidateFramebuffer=_glInvalidateFramebuffer;function _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_glInvalidateSubFramebuffer=_glInvalidateSubFramebuffer;function _glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}var _emscripten_glIsBuffer=_glIsBuffer;function _glIsEnabled(x0){return GLctx.isEnabled(x0)}var _emscripten_glIsEnabled=_glIsEnabled;function _glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}var _emscripten_glIsFramebuffer=_glIsFramebuffer;function _glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}var _emscripten_glIsProgram=_glIsProgram;function _glIsQuery(id){var query=GL.queries[id];if(!query)return 0;return GLctx.isQuery(query)}var _emscripten_glIsQuery=_glIsQuery;function _glIsQueryEXT(id){var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}var _emscripten_glIsQueryEXT=_glIsQueryEXT;function _glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;function _glIsSampler(id){var sampler=GL.samplers[id];if(!sampler)return 0;return GLctx.isSampler(sampler)}var _emscripten_glIsSampler=_glIsSampler;function _glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}var _emscripten_glIsShader=_glIsShader;function _glIsSync(sync){return GLctx.isSync(GL.syncs[sync])}var _emscripten_glIsSync=_glIsSync;function _glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}var _emscripten_glIsTexture=_glIsTexture;function _glIsTransformFeedback(id){return GLctx.isTransformFeedback(GL.transformFeedbacks[id])}var _emscripten_glIsTransformFeedback=_glIsTransformFeedback;function _glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)}var _emscripten_glIsVertexArray=_glIsVertexArray;var _glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;function _glLineWidth(x0){GLctx.lineWidth(x0)}var _emscripten_glLineWidth=_glLineWidth;function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}var _emscripten_glLinkProgram=_glLinkProgram;function _glPauseTransformFeedback(){GLctx.pauseTransformFeedback()}var _emscripten_glPauseTransformFeedback=_glPauseTransformFeedback;function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}var _emscripten_glPixelStorei=_glPixelStorei;function _glPolygonOffset(x0,x1){GLctx.polygonOffset(x0,x1)}var _emscripten_glPolygonOffset=_glPolygonOffset;function _glProgramBinary(program,binaryFormat,binary,length){GL.recordError(1280)}var _emscripten_glProgramBinary=_glProgramBinary;function _glProgramParameteri(program,pname,value){GL.recordError(1280)}var _emscripten_glProgramParameteri=_glProgramParameteri;function _glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)}var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;function _glReadBuffer(x0){GLctx.readBuffer(x0)}var _emscripten_glReadBuffer=_glReadBuffer;function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}var _emscripten_glReadPixels=_glReadPixels;function _glReleaseShaderCompiler(){}var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;function _glRenderbufferStorage(x0,x1,x2,x3){GLctx.renderbufferStorage(x0,x1,x2,x3)}var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;function _glRenderbufferStorageMultisample(x0,x1,x2,x3,x4){GLctx.renderbufferStorageMultisample(x0,x1,x2,x3,x4)}var _emscripten_glRenderbufferStorageMultisample=_glRenderbufferStorageMultisample;function _glResumeTransformFeedback(){GLctx.resumeTransformFeedback()}var _emscripten_glResumeTransformFeedback=_glResumeTransformFeedback;function _glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}var _emscripten_glSampleCoverage=_glSampleCoverage;function _glSamplerParameterf(sampler,pname,param){GLctx.samplerParameterf(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameterf=_glSamplerParameterf;function _glSamplerParameterfv(sampler,pname,params){var param=HEAPF32[params>>2];GLctx.samplerParameterf(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameterfv=_glSamplerParameterfv;function _glSamplerParameteri(sampler,pname,param){GLctx.samplerParameteri(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameteri=_glSamplerParameteri;function _glSamplerParameteriv(sampler,pname,params){var param=HEAP32[params>>2];GLctx.samplerParameteri(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameteriv=_glSamplerParameteriv;function _glScissor(x0,x1,x2,x3){GLctx.scissor(x0,x1,x2,x3)}var _emscripten_glScissor=_glScissor;function _glShaderBinary(count,shaders,binaryformat,binary,length){GL.recordError(1280)}var _emscripten_glShaderBinary=_glShaderBinary;function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}var _emscripten_glShaderSource=_glShaderSource;function _glStencilFunc(x0,x1,x2){GLctx.stencilFunc(x0,x1,x2)}var _emscripten_glStencilFunc=_glStencilFunc;function _glStencilFuncSeparate(x0,x1,x2,x3){GLctx.stencilFuncSeparate(x0,x1,x2,x3)}var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;function _glStencilMask(x0){GLctx.stencilMask(x0)}var _emscripten_glStencilMask=_glStencilMask;function _glStencilMaskSeparate(x0,x1){GLctx.stencilMaskSeparate(x0,x1)}var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;function _glStencilOp(x0,x1,x2){GLctx.stencilOp(x0,x1,x2)}var _emscripten_glStencilOp=_glStencilOp;function _glStencilOpSeparate(x0,x1,x2,x3){GLctx.stencilOpSeparate(x0,x1,x2,x3)}var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}var _emscripten_glTexImage2D=_glTexImage2D;function _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,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,null)}}var _emscripten_glTexImage3D=_glTexImage3D;function _glTexParameterf(x0,x1,x2){GLctx.texParameterf(x0,x1,x2)}var _emscripten_glTexParameterf=_glTexParameterf;function _glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}var _emscripten_glTexParameterfv=_glTexParameterfv;function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}var _emscripten_glTexParameteri=_glTexParameteri;function _glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}var _emscripten_glTexParameteriv=_glTexParameteriv;function _glTexStorage2D(x0,x1,x2,x3,x4){GLctx.texStorage2D(x0,x1,x2,x3,x4)}var _emscripten_glTexStorage2D=_glTexStorage2D;function _glTexStorage3D(x0,x1,x2,x3,x4,x5){GLctx.texStorage3D(x0,x1,x2,x3,x4,x5)}var _emscripten_glTexStorage3D=_glTexStorage3D;function _glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,null)}return}var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}var _emscripten_glTexSubImage2D=_glTexSubImage2D;function _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,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,null)}}var _emscripten_glTexSubImage3D=_glTexSubImage3D;function _glTransformFeedbackVaryings(program,count,varyings,bufferMode){program=GL.programs[program];var vars=[];for(var i=0;i>2]));GLctx.transformFeedbackVaryings(program,vars,bufferMode)}var _emscripten_glTransformFeedbackVaryings=_glTransformFeedbackVaryings;function _glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}var _emscripten_glUniform1f=_glUniform1f;function _glUniform1fv(location,count,value){count&&GLctx.uniform1fv(webglGetUniformLocation(location),HEAPF32,value>>2,count)}var _emscripten_glUniform1fv=_glUniform1fv;function _glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}var _emscripten_glUniform1i=_glUniform1i;function _glUniform1iv(location,count,value){count&&GLctx.uniform1iv(webglGetUniformLocation(location),HEAP32,value>>2,count)}var _emscripten_glUniform1iv=_glUniform1iv;function _glUniform1ui(location,v0){GLctx.uniform1ui(webglGetUniformLocation(location),v0)}var _emscripten_glUniform1ui=_glUniform1ui;function _glUniform1uiv(location,count,value){count&&GLctx.uniform1uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count)}var _emscripten_glUniform1uiv=_glUniform1uiv;function _glUniform2f(location,v0,v1){GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)}var _emscripten_glUniform2f=_glUniform2f;function _glUniform2fv(location,count,value){count&&GLctx.uniform2fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*2)}var _emscripten_glUniform2fv=_glUniform2fv;function _glUniform2i(location,v0,v1){GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)}var _emscripten_glUniform2i=_glUniform2i;function _glUniform2iv(location,count,value){count&&GLctx.uniform2iv(webglGetUniformLocation(location),HEAP32,value>>2,count*2)}var _emscripten_glUniform2iv=_glUniform2iv;function _glUniform2ui(location,v0,v1){GLctx.uniform2ui(webglGetUniformLocation(location),v0,v1)}var _emscripten_glUniform2ui=_glUniform2ui;function _glUniform2uiv(location,count,value){count&&GLctx.uniform2uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*2)}var _emscripten_glUniform2uiv=_glUniform2uiv;function _glUniform3f(location,v0,v1,v2){GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)}var _emscripten_glUniform3f=_glUniform3f;function _glUniform3fv(location,count,value){count&&GLctx.uniform3fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*3)}var _emscripten_glUniform3fv=_glUniform3fv;function _glUniform3i(location,v0,v1,v2){GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)}var _emscripten_glUniform3i=_glUniform3i;function _glUniform3iv(location,count,value){count&&GLctx.uniform3iv(webglGetUniformLocation(location),HEAP32,value>>2,count*3)}var _emscripten_glUniform3iv=_glUniform3iv;function _glUniform3ui(location,v0,v1,v2){GLctx.uniform3ui(webglGetUniformLocation(location),v0,v1,v2)}var _emscripten_glUniform3ui=_glUniform3ui;function _glUniform3uiv(location,count,value){count&&GLctx.uniform3uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*3)}var _emscripten_glUniform3uiv=_glUniform3uiv;function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)}var _emscripten_glUniform4f=_glUniform4f;function _glUniform4fv(location,count,value){count&&GLctx.uniform4fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*4)}var _emscripten_glUniform4fv=_glUniform4fv;function _glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)}var _emscripten_glUniform4i=_glUniform4i;function _glUniform4iv(location,count,value){count&&GLctx.uniform4iv(webglGetUniformLocation(location),HEAP32,value>>2,count*4)}var _emscripten_glUniform4iv=_glUniform4iv;function _glUniform4ui(location,v0,v1,v2,v3){GLctx.uniform4ui(webglGetUniformLocation(location),v0,v1,v2,v3)}var _emscripten_glUniform4ui=_glUniform4ui;function _glUniform4uiv(location,count,value){count&&GLctx.uniform4uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*4)}var _emscripten_glUniform4uiv=_glUniform4uiv;function _glUniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding){program=GL.programs[program];GLctx.uniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding)}var _emscripten_glUniformBlockBinding=_glUniformBlockBinding;function _glUniformMatrix2fv(location,count,transpose,value){count&&GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*4)}var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;function _glUniformMatrix2x3fv(location,count,transpose,value){count&&GLctx.uniformMatrix2x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)}var _emscripten_glUniformMatrix2x3fv=_glUniformMatrix2x3fv;function _glUniformMatrix2x4fv(location,count,transpose,value){count&&GLctx.uniformMatrix2x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)}var _emscripten_glUniformMatrix2x4fv=_glUniformMatrix2x4fv;function _glUniformMatrix3fv(location,count,transpose,value){count&&GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*9)}var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;function _glUniformMatrix3x2fv(location,count,transpose,value){count&&GLctx.uniformMatrix3x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)}var _emscripten_glUniformMatrix3x2fv=_glUniformMatrix3x2fv;function _glUniformMatrix3x4fv(location,count,transpose,value){count&&GLctx.uniformMatrix3x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)}var _emscripten_glUniformMatrix3x4fv=_glUniformMatrix3x4fv;function _glUniformMatrix4fv(location,count,transpose,value){count&&GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*16)}var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;function _glUniformMatrix4x2fv(location,count,transpose,value){count&&GLctx.uniformMatrix4x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)}var _emscripten_glUniformMatrix4x2fv=_glUniformMatrix4x2fv;function _glUniformMatrix4x3fv(location,count,transpose,value){count&&GLctx.uniformMatrix4x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)}var _emscripten_glUniformMatrix4x3fv=_glUniformMatrix4x3fv;function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}var _emscripten_glUseProgram=_glUseProgram;function _glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}var _emscripten_glValidateProgram=_glValidateProgram;function _glVertexAttrib1f(x0,x1){GLctx.vertexAttrib1f(x0,x1)}var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;function _glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;function _glVertexAttrib2f(x0,x1,x2){GLctx.vertexAttrib2f(x0,x1,x2)}var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;function _glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;function _glVertexAttrib3f(x0,x1,x2,x3){GLctx.vertexAttrib3f(x0,x1,x2,x3)}var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;function _glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx.vertexAttrib4f(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;function _glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;function _glVertexAttribDivisor(index,divisor){GLctx.vertexAttribDivisor(index,divisor)}var _emscripten_glVertexAttribDivisor=_glVertexAttribDivisor;var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;var _glVertexAttribDivisorARB=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorARB=_glVertexAttribDivisorARB;var _glVertexAttribDivisorEXT=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorEXT=_glVertexAttribDivisorEXT;var _glVertexAttribDivisorNV=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorNV=_glVertexAttribDivisorNV;function _glVertexAttribI4i(x0,x1,x2,x3,x4){GLctx.vertexAttribI4i(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttribI4i=_glVertexAttribI4i;function _glVertexAttribI4iv(index,v){GLctx.vertexAttribI4i(index,HEAP32[v>>2],HEAP32[v+4>>2],HEAP32[v+8>>2],HEAP32[v+12>>2])}var _emscripten_glVertexAttribI4iv=_glVertexAttribI4iv;function _glVertexAttribI4ui(x0,x1,x2,x3,x4){GLctx.vertexAttribI4ui(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttribI4ui=_glVertexAttribI4ui;function _glVertexAttribI4uiv(index,v){GLctx.vertexAttribI4ui(index,HEAPU32[v>>2],HEAPU32[v+4>>2],HEAPU32[v+8>>2],HEAPU32[v+12>>2])}var _emscripten_glVertexAttribI4uiv=_glVertexAttribI4uiv;function _glVertexAttribIPointer(index,size,type,stride,ptr){GLctx.vertexAttribIPointer(index,size,type,stride,ptr)}var _emscripten_glVertexAttribIPointer=_glVertexAttribIPointer;function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}var _emscripten_glViewport=_glViewport;function _glWaitSync(sync,flags,timeout_low,timeout_high){var timeout=convertI32PairToI53(timeout_low,timeout_high);GLctx.waitSync(GL.syncs[sync],flags,timeout)}var _emscripten_glWaitSync=_glWaitSync;function _emscripten_has_asyncify(){return 0}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function doRequestFullscreen(target,strategy){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)}function _emscripten_request_fullscreen_strategy(target,deferUntilInEventHandler,fullscreenStrategy){var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;try{wasmMemory.grow(size-b.byteLength+65535>>>16);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function registerBeforeUnloadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString){var beforeUnloadEventHandlerFunc=function(e=event){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:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _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")}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(e=event){var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function _emscripten_set_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(e=event){var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(e=event){var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(e=event){fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mouseenter_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread)}function _emscripten_set_mouseleave_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}function fillPointerlockChangeEventData(eventStruct){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=function(e=event){var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_pointerlockchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)}function registerUiEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=function(e=event){if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=e.detail;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset;HEAP32[uiEvent+32>>2]=pageYOffset;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_resize_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}function fillVisibilityChangeEventData(eventStruct){var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[eventStruct>>2]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState}function registerVisibilityChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=function(e=event){var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _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)}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(e=event){var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}function _emscripten_sleep(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); +var Module=typeof Module!="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){if(Module["ENVIRONMENT_IS_PTHREAD"]||Module["$ww"])return;var loadPackage=function(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}var PACKAGE_NAME="pge.data";var REMOTE_PACKAGE_BASE="pge.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];function fetchRemotePackage(packageName,packageSize,callback,errback){if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){require("fs").readFile(packageName,function(err,contents){if(err){errback(err)}else{callback(contents.buffer)}});return}var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"](`Downloading data... (${loaded}/${total})`)}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","assets",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"](`fp ${this.name}`)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"](`fp ${that.name}`);this.requests[this.name]=null}};var files=metadata["files"];for(var i=0;i{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="pge.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).then(receiver,reason=>{err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={136268:()=>{return Module.canvas.getBoundingClientRect().left},136320:()=>{return Module.canvas.getBoundingClientRect().top},136371:()=>{return Module.olc_MOUSEX},136399:()=>{return Module.olc_MOUSEY},136427:()=>{return Module.olc_MOUSEDOWN},136457:()=>{return Module.olc_MOUSEUP},136485:()=>{Module.olc_MOUSEDOWN=-1},136511:()=>{Module.olc_MOUSEUP=-1},136535:()=>{window.onunload=Module._olc_OnPageUnload},136579:($0,$1)=>{Module.olc_AspectRatio=$0/$1;Module.olc_MOUSEDOWN=-1;Module.olc_MOUSEUP=-1;onmousemove=function(e){Module.olc_MOUSEX=e.clientX;Module.olc_MOUSEY=e.clientY};onmousedown=function(e){Module.olc_MOUSEDOWN=e.button};onmouseup=function(e){Module.olc_MOUSEUP=e.button};ontouchmove=function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY};ontouchstart=function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY};Module.olc_AssumeDefaultShells=document.querySelectorAll(".emscripten").length>=3?true:false;var olc_ResizeHandler=function(){let isFullscreen=document.fullscreenElement!=null;let width=isFullscreen?window.innerWidth:Module.canvas.parentNode.clientWidth;let height=isFullscreen?window.innerHeight:Module.canvas.parentNode.clientHeight;let viewWidth=width;let viewHeight=width/Module.olc_AspectRatio;if(viewHeight>height){viewWidth=height*Module.olc_AspectRatio;viewHeight=height}viewWidth=parseInt(viewWidth);viewHeight=parseInt(viewHeight);setTimeout(function(){if(Module.olc_AssumeDefaultShells)Module.canvas.parentNode.setAttribute("style","width: 100%; height: 70vh; margin-left: auto; margin-right: auto;");Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);Module.canvas.setAttribute("style",`width: ${viewWidth}px; height: ${viewHeight}px;`);Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus()},200)};var olc_Init=function(){if(Module.olc_AspectRatio===undefined){setTimeout(function(){Module.olc_Init()},50);return}let resizeObserver=new ResizeObserver(function(entries){Module.olc_ResizeHandler()}).observe(Module.canvas.parentNode);let mutationObserver=new MutationObserver(function(mutationsList,observer){setTimeout(function(){Module.olc_ResizeHandler()},200)}).observe(Module.canvas.parentNode,{attributes:false,childList:true,subtree:false});window.addEventListener("fullscreenchange",function(e){setTimeout(function(){Module.olc_ResizeHandler()},200)})};Module.olc_ResizeHandler=Module.olc_ResizeHandler!=undefined?Module.olc_ResizeHandler:olc_ResizeHandler;Module.olc_Init=Module.olc_Init!=undefined?Module.olc_Init:olc_Init;Module.olc_Init()},138973:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},139120:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},139354:$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){autoResumeAudioContext(SDL2.audioContext)}}return SDL2.audioContext===undefined?-1:0},139847:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},139915:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setTimeout(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)}},141567:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"])},141977:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c>2]}}},143062:$0=>{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&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>>2;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},146692:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},146775:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},146844:()=>{return window.innerWidth},146874:()=>{return window.innerHeight}};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}function listenOnce(object,event,func){object.addEventListener(event,func,{"once":true})}function autoResumeAudioContext(ctx,elements){if(!elements){elements=[document,document.getElementById("canvas")]}["keydown","mousedown","touchstart"].forEach(event=>{elements.forEach(element=>{if(element){listenOnce(element,event,()=>{if(ctx.state==="suspended")ctx.resume()})}})})}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function ___assert_fail(condition,filename,line,func){abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var exceptionCaught=[];var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_rethrow(){var info=exceptionCaught.pop();if(!info){abort("no exception to throw")}var ptr=info.excPtr;if(!info.get_rethrown()){exceptionCaught.push(info);info.set_rethrown(true);info.set_caught(false);uncaughtExceptionCount++}exceptionLast=ptr;throw exceptionLast}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)}var preloadPlugins=Module["preloadPlugins"]||[];function FS_handledByPreloadPlugin(byteArray,fullname,finish,onerror){if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled}function FS_createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}function FS_modeStringToFlags(str){var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags}function FS_getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:()=>{for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){global.performance=require("perf_hooks").performance}_emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(()=>{callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:2};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglBindAPI(api){if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0}function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _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;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _eglGetError(){return EGL.errorCode}function _eglInitialize(display,majorVersion,minorVersion){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function stringToNewUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret}function _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}function _eglSwapBuffers(dpy,surface){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}function _eglSwapInterval(display,interval){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}function _eglWaitClient(){EGL.setErrorCode(12288);return 1}var _eglWaitGL=_eglWaitClient;function _eglWaitNative(nativeEngineId){EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function runMainThreadEmAsm(code,sigPtr,argbuf,sync){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int_sync_on_main_thread(code,sigPtr,argbuf){return runMainThreadEmAsm(code,sigPtr,argbuf,1)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function withStackSave(f){var stack=stackSave();var ret=f();stackRestore(stack);return ret}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_get_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height}function stringToUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret}function getCanvasElementSize(target){return withStackSave(function(){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]];return size})}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function setCanvasElementSize(target,width,height){if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{withStackSave(function(){var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height)})}}function 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(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){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}function setLetterbox(element,topBottom,leftRight){element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function JSEvents_resizeCanvasForFullscreen(target,strategy){var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=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>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function _emscripten_get_screen_size(width,height){HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height}function _glActiveTexture(x0){GLctx.activeTexture(x0)}var _emscripten_glActiveTexture=_glActiveTexture;function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}var _emscripten_glAttachShader=_glAttachShader;function _glBeginQuery(target,id){GLctx.beginQuery(target,GL.queries[id])}var _emscripten_glBeginQuery=_glBeginQuery;function _glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])}var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;function _glBeginTransformFeedback(x0){GLctx.beginTransformFeedback(x0)}var _emscripten_glBeginTransformFeedback=_glBeginTransformFeedback;function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}var _emscripten_glBindAttribLocation=_glBindAttribLocation;function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}var _emscripten_glBindBuffer=_glBindBuffer;function _glBindBufferBase(target,index,buffer){GLctx.bindBufferBase(target,index,GL.buffers[buffer])}var _emscripten_glBindBufferBase=_glBindBufferBase;function _glBindBufferRange(target,index,buffer,offset,ptrsize){GLctx.bindBufferRange(target,index,GL.buffers[buffer],offset,ptrsize)}var _emscripten_glBindBufferRange=_glBindBufferRange;function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}var _emscripten_glBindFramebuffer=_glBindFramebuffer;function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;function _glBindSampler(unit,sampler){GLctx.bindSampler(unit,GL.samplers[sampler])}var _emscripten_glBindSampler=_glBindSampler;function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}var _emscripten_glBindTexture=_glBindTexture;function _glBindTransformFeedback(target,id){GLctx.bindTransformFeedback(target,GL.transformFeedbacks[id])}var _emscripten_glBindTransformFeedback=_glBindTransformFeedback;function _glBindVertexArray(vao){GLctx.bindVertexArray(GL.vaos[vao])}var _emscripten_glBindVertexArray=_glBindVertexArray;var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;function _glBlendColor(x0,x1,x2,x3){GLctx.blendColor(x0,x1,x2,x3)}var _emscripten_glBlendColor=_glBlendColor;function _glBlendEquation(x0){GLctx.blendEquation(x0)}var _emscripten_glBlendEquation=_glBlendEquation;function _glBlendEquationSeparate(x0,x1){GLctx.blendEquationSeparate(x0,x1)}var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}var _emscripten_glBlendFunc=_glBlendFunc;function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx.blendFuncSeparate(x0,x1,x2,x3)}var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;function _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_glBlitFramebuffer=_glBlitFramebuffer;function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}var _emscripten_glBufferData=_glBufferData;function _glBufferSubData(target,offset,size,data){if(true){size&&GLctx.bufferSubData(target,offset,HEAPU8,data,size);return}GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}var _emscripten_glBufferSubData=_glBufferSubData;function _glCheckFramebufferStatus(x0){return GLctx.checkFramebufferStatus(x0)}var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;function _glClear(x0){GLctx.clear(x0)}var _emscripten_glClear=_glClear;function _glClearBufferfi(x0,x1,x2,x3){GLctx.clearBufferfi(x0,x1,x2,x3)}var _emscripten_glClearBufferfi=_glClearBufferfi;function _glClearBufferfv(buffer,drawbuffer,value){GLctx.clearBufferfv(buffer,drawbuffer,HEAPF32,value>>2)}var _emscripten_glClearBufferfv=_glClearBufferfv;function _glClearBufferiv(buffer,drawbuffer,value){GLctx.clearBufferiv(buffer,drawbuffer,HEAP32,value>>2)}var _emscripten_glClearBufferiv=_glClearBufferiv;function _glClearBufferuiv(buffer,drawbuffer,value){GLctx.clearBufferuiv(buffer,drawbuffer,HEAPU32,value>>2)}var _emscripten_glClearBufferuiv=_glClearBufferuiv;function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}var _emscripten_glClearColor=_glClearColor;function _glClearDepthf(x0){GLctx.clearDepth(x0)}var _emscripten_glClearDepthf=_glClearDepthf;function _glClearStencil(x0){GLctx.clearStencil(x0)}var _emscripten_glClearStencil=_glClearStencil;function convertI32PairToI53(lo,hi){return(lo>>>0)+hi*4294967296}function _glClientWaitSync(sync,flags,timeout_low,timeout_high){var timeout=convertI32PairToI53(timeout_low,timeout_high);return GLctx.clientWaitSync(GL.syncs[sync],flags,timeout)}var _emscripten_glClientWaitSync=_glClientWaitSync;function _glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}var _emscripten_glColorMask=_glColorMask;function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}var _emscripten_glCompileShader=_glCompileShader;function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){if(true){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data)}else{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8,data,imageSize)}return}GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;function _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_glCompressedTexImage3D=_glCompressedTexImage3D;function _glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){if(true){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data)}else{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8,data,imageSize)}return}GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;function _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_glCompressedTexSubImage3D=_glCompressedTexSubImage3D;function _glCopyBufferSubData(x0,x1,x2,x3,x4){GLctx.copyBufferSubData(x0,x1,x2,x3,x4)}var _emscripten_glCopyBufferSubData=_glCopyBufferSubData;function _glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;function _glCopyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8){GLctx.copyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8)}var _emscripten_glCopyTexSubImage3D=_glCopyTexSubImage3D;function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}var _emscripten_glCreateProgram=_glCreateProgram;function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}var _emscripten_glCreateShader=_glCreateShader;function _glCullFace(x0){GLctx.cullFace(x0)}var _emscripten_glCullFace=_glCullFace;function _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.currentPixelPackBufferBinding)GLctx.currentPixelPackBufferBinding=0;if(id==GLctx.currentPixelUnpackBufferBinding)GLctx.currentPixelUnpackBufferBinding=0}}var _emscripten_glDeleteBuffers=_glDeleteBuffers;function _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_glDeleteFramebuffers=_glDeleteFramebuffers;function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null}var _emscripten_glDeleteProgram=_glDeleteProgram;function _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_glDeleteQueries=_glDeleteQueries;function _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_glDeleteQueriesEXT=_glDeleteQueriesEXT;function _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_glDeleteRenderbuffers=_glDeleteRenderbuffers;function _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_glDeleteSamplers=_glDeleteSamplers;function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}var _emscripten_glDeleteShader=_glDeleteShader;function _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_glDeleteSync=_glDeleteSync;function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}var _emscripten_glDeleteTextures=_glDeleteTextures;function _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 _emscripten_glDeleteTransformFeedbacks=_glDeleteTransformFeedbacks;function _glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}}var _emscripten_glDeleteVertexArrays=_glDeleteVertexArrays;var _glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;function _glDepthFunc(x0){GLctx.depthFunc(x0)}var _emscripten_glDepthFunc=_glDepthFunc;function _glDepthMask(flag){GLctx.depthMask(!!flag)}var _emscripten_glDepthMask=_glDepthMask;function _glDepthRangef(x0,x1){GLctx.depthRange(x0,x1)}var _emscripten_glDepthRangef=_glDepthRangef;function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}var _emscripten_glDetachShader=_glDetachShader;function _glDisable(x0){GLctx.disable(x0)}var _emscripten_glDisable=_glDisable;function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}var _emscripten_glDrawArrays=_glDrawArrays;function _glDrawArraysInstanced(mode,first,count,primcount){GLctx.drawArraysInstanced(mode,first,count,primcount)}var _emscripten_glDrawArraysInstanced=_glDrawArraysInstanced;var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;var _glDrawArraysInstancedARB=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedARB=_glDrawArraysInstancedARB;var _glDrawArraysInstancedEXT=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedEXT=_glDrawArraysInstancedEXT;var _glDrawArraysInstancedNV=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedNV=_glDrawArraysInstancedNV;var tempFixedLengthArray=[];function _glDrawBuffers(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)}var _emscripten_glDrawBuffers=_glDrawBuffers;var _glDrawBuffersEXT=_glDrawBuffers;var _emscripten_glDrawBuffersEXT=_glDrawBuffersEXT;var _glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}var _emscripten_glDrawElements=_glDrawElements;function _glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx.drawElementsInstanced(mode,count,type,indices,primcount)}var _emscripten_glDrawElementsInstanced=_glDrawElementsInstanced;var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;var _glDrawElementsInstancedARB=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedARB=_glDrawElementsInstancedARB;var _glDrawElementsInstancedEXT=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedEXT=_glDrawElementsInstancedEXT;var _glDrawElementsInstancedNV=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedNV=_glDrawElementsInstancedNV;function _glDrawRangeElements(mode,start,end,count,type,indices){_glDrawElements(mode,count,type,indices)}var _emscripten_glDrawRangeElements=_glDrawRangeElements;function _glEnable(x0){GLctx.enable(x0)}var _emscripten_glEnable=_glEnable;function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;function _glEndQuery(x0){GLctx.endQuery(x0)}var _emscripten_glEndQuery=_glEndQuery;function _glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}var _emscripten_glEndQueryEXT=_glEndQueryEXT;function _glEndTransformFeedback(){GLctx.endTransformFeedback()}var _emscripten_glEndTransformFeedback=_glEndTransformFeedback;function _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_glFenceSync=_glFenceSync;function _glFinish(){GLctx.finish()}var _emscripten_glFinish=_glFinish;function _glFlush(){GLctx.flush()}var _emscripten_glFlush=_glFlush;function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;function _glFramebufferTextureLayer(target,attachment,texture,level,layer){GLctx.framebufferTextureLayer(target,attachment,GL.textures[texture],level,layer)}var _emscripten_glFramebufferTextureLayer=_glFramebufferTextureLayer;function _glFrontFace(x0){GLctx.frontFace(x0)}var _emscripten_glFrontFace=_glFrontFace;function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}var _emscripten_glGenBuffers=_glGenBuffers;function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}var _emscripten_glGenFramebuffers=_glGenFramebuffers;function _glGenQueries(n,ids){__glGenObject(n,ids,"createQuery",GL.queries)}var _emscripten_glGenQueries=_glGenQueries;function _glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}}var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;function _glGenSamplers(n,samplers){__glGenObject(n,samplers,"createSampler",GL.samplers)}var _emscripten_glGenSamplers=_glGenSamplers;function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}var _emscripten_glGenTextures=_glGenTextures;function _glGenTransformFeedbacks(n,ids){__glGenObject(n,ids,"createTransformFeedback",GL.transformFeedbacks)}var _emscripten_glGenTransformFeedbacks=_glGenTransformFeedbacks;function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _emscripten_glGenVertexArrays=_glGenVertexArrays;var _glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;function _glGenerateMipmap(x0){GLctx.generateMipmap(x0)}var _emscripten_glGenerateMipmap=_glGenerateMipmap;function __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;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}}function _glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;function _glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}var _emscripten_glGetActiveUniform=_glGetActiveUniform;function _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}else{if(length)HEAP32[length>>2]=0}}var _emscripten_glGetActiveUniformBlockName=_glGetActiveUniformBlockName;function _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;return}var result=GLctx.getActiveUniformBlockParameter(program,uniformBlockIndex,pname);if(result===null)return;if(pname==35395){for(var i=0;i>2]=result[i]}}else{HEAP32[params>>2]=result}}var _emscripten_glGetActiveUniformBlockiv=_glGetActiveUniformBlockiv;function _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]}}var _emscripten_glGetActiveUniformsiv=_glGetActiveUniformsiv;function _glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}var _emscripten_glGetAttribLocation=_glGetAttribLocation;function writeI53ToI64(ptr,num){HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}function 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}var exts=GLctx.getSupportedExtensions()||[];ret=2*exts.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];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i>>0]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(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;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p>>0]=ret?1:0;break}}function _glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}var _emscripten_glGetBooleanv=_glGetBooleanv;function _glGetBufferParameteri64v(target,value,data){if(!data){GL.recordError(1281);return}writeI53ToI64(data,GLctx.getBufferParameter(target,value))}var _emscripten_glGetBufferParameteri64v=_glGetBufferParameteri64v;function _glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;function _glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}var _emscripten_glGetError=_glGetError;function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}var _emscripten_glGetFloatv=_glGetFloatv;function _glGetFragDataLocation(program,name){return GLctx.getFragDataLocation(GL.programs[program],UTF8ToString(name))}var _emscripten_glGetFragDataLocation=_glGetFragDataLocation;function _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}var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;function 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;break;case 2:HEAPF32[data>>2]=ret;break;case 4:HEAP8[data>>0]=ret?1:0;break;default:throw"internal emscriptenWebGLGetIndexed() error, bad type: "+type}}function _glGetInteger64i_v(target,index,data){emscriptenWebGLGetIndexed(target,index,data,1)}var _emscripten_glGetInteger64i_v=_glGetInteger64i_v;function _glGetInteger64v(name_,p){emscriptenWebGLGet(name_,p,1)}var _emscripten_glGetInteger64v=_glGetInteger64v;function _glGetIntegeri_v(target,index,data){emscriptenWebGLGetIndexed(target,index,data,0)}var _emscripten_glGetIntegeri_v=_glGetIntegeri_v;function _glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}var _emscripten_glGetIntegerv=_glGetIntegerv;function _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]}}var _emscripten_glGetInternalformativ=_glGetInternalformativ;function _glGetProgramBinary(program,bufSize,length,binaryFormat,binary){GL.recordError(1282)}var _emscripten_glGetProgramBinary=_glGetProgramBinary;function _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}var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;function _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}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}}var _emscripten_glGetProgramiv=_glGetProgramiv;function _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_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;function _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}var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;function _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}var _emscripten_glGetQueryObjectuiv=_glGetQueryObjectuiv;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;function _glGetQueryiv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getQuery(target,pname)}var _emscripten_glGetQueryiv=_glGetQueryiv;function _glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;function _glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;function _glGetSamplerParameterfv(sampler,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)}var _emscripten_glGetSamplerParameterfv=_glGetSamplerParameterfv;function _glGetSamplerParameteriv(sampler,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)}var _emscripten_glGetSamplerParameteriv=_glGetSamplerParameteriv;function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;function _glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;function _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}var _emscripten_glGetShaderSource=_glGetShaderSource;function _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}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}var _emscripten_glGetShaderiv=_glGetShaderiv;function _glGetString(name_){var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s&&stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);if(true)glVersion="OpenGL ES 3.0 ("+glVersion+")";else{glVersion="OpenGL ES 2.0 ("+glVersion+")"}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 _emscripten_glGetString=_glGetString;function _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=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));exts=exts.map(function(e){return stringToNewUTF8(e)});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_glGetStringi=_glGetStringi;function _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;if(length)HEAP32[length>>2]=1}}var _emscripten_glGetSynciv=_glGetSynciv;function _glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;function _glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;function _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}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}var _emscripten_glGetTransformFeedbackVarying=_glGetTransformFeedbackVarying;function _glGetUniformBlockIndex(program,uniformBlockName){return GLctx.getUniformBlockIndex(GL.programs[program],UTF8ToString(uniformBlockName))}var _emscripten_glGetUniformBlockIndex=_glGetUniformBlockIndex;function _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]}}var _emscripten_glGetUniformIndices=_glGetUniformIndices;function jstoi_q(str){return parseInt(str)}function webglGetLeftBracePos(name){return name.slice(-1)=="]"&&name.lastIndexOf("[")}function webglPrepareUniformLocationsBeforeFirstUse(program){var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex0?"["+webglLoc+"]":""))}return webglLoc}else{GL.recordError(1282)}}function 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;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}var _emscripten_glGetUniformfv=_glGetUniformfv;function _glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}var _emscripten_glGetUniformiv=_glGetUniformiv;function _glGetUniformuiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}var _emscripten_glGetUniformuiv=_glGetUniformuiv;function 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"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}}function _glGetVertexAttribIiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,0)}var _emscripten_glGetVertexAttribIiv=_glGetVertexAttribIiv;var _glGetVertexAttribIuiv=_glGetVertexAttribIiv;var _emscripten_glGetVertexAttribIuiv=_glGetVertexAttribIuiv;function _glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;function _glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;function _glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;function _glHint(x0,x1){GLctx.hint(x0,x1)}var _emscripten_glHint=_glHint;function _glInvalidateFramebuffer(target,numAttachments,attachments){var list=tempFixedLengthArray[numAttachments];for(var i=0;i>2]}GLctx.invalidateFramebuffer(target,list)}var _emscripten_glInvalidateFramebuffer=_glInvalidateFramebuffer;function _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_glInvalidateSubFramebuffer=_glInvalidateSubFramebuffer;function _glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}var _emscripten_glIsBuffer=_glIsBuffer;function _glIsEnabled(x0){return GLctx.isEnabled(x0)}var _emscripten_glIsEnabled=_glIsEnabled;function _glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}var _emscripten_glIsFramebuffer=_glIsFramebuffer;function _glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}var _emscripten_glIsProgram=_glIsProgram;function _glIsQuery(id){var query=GL.queries[id];if(!query)return 0;return GLctx.isQuery(query)}var _emscripten_glIsQuery=_glIsQuery;function _glIsQueryEXT(id){var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}var _emscripten_glIsQueryEXT=_glIsQueryEXT;function _glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;function _glIsSampler(id){var sampler=GL.samplers[id];if(!sampler)return 0;return GLctx.isSampler(sampler)}var _emscripten_glIsSampler=_glIsSampler;function _glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}var _emscripten_glIsShader=_glIsShader;function _glIsSync(sync){return GLctx.isSync(GL.syncs[sync])}var _emscripten_glIsSync=_glIsSync;function _glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}var _emscripten_glIsTexture=_glIsTexture;function _glIsTransformFeedback(id){return GLctx.isTransformFeedback(GL.transformFeedbacks[id])}var _emscripten_glIsTransformFeedback=_glIsTransformFeedback;function _glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)}var _emscripten_glIsVertexArray=_glIsVertexArray;var _glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;function _glLineWidth(x0){GLctx.lineWidth(x0)}var _emscripten_glLineWidth=_glLineWidth;function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}var _emscripten_glLinkProgram=_glLinkProgram;function _glPauseTransformFeedback(){GLctx.pauseTransformFeedback()}var _emscripten_glPauseTransformFeedback=_glPauseTransformFeedback;function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}var _emscripten_glPixelStorei=_glPixelStorei;function _glPolygonOffset(x0,x1){GLctx.polygonOffset(x0,x1)}var _emscripten_glPolygonOffset=_glPolygonOffset;function _glProgramBinary(program,binaryFormat,binary,length){GL.recordError(1280)}var _emscripten_glProgramBinary=_glProgramBinary;function _glProgramParameteri(program,pname,value){GL.recordError(1280)}var _emscripten_glProgramParameteri=_glProgramParameteri;function _glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)}var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;function _glReadBuffer(x0){GLctx.readBuffer(x0)}var _emscripten_glReadBuffer=_glReadBuffer;function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}var _emscripten_glReadPixels=_glReadPixels;function _glReleaseShaderCompiler(){}var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;function _glRenderbufferStorage(x0,x1,x2,x3){GLctx.renderbufferStorage(x0,x1,x2,x3)}var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;function _glRenderbufferStorageMultisample(x0,x1,x2,x3,x4){GLctx.renderbufferStorageMultisample(x0,x1,x2,x3,x4)}var _emscripten_glRenderbufferStorageMultisample=_glRenderbufferStorageMultisample;function _glResumeTransformFeedback(){GLctx.resumeTransformFeedback()}var _emscripten_glResumeTransformFeedback=_glResumeTransformFeedback;function _glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}var _emscripten_glSampleCoverage=_glSampleCoverage;function _glSamplerParameterf(sampler,pname,param){GLctx.samplerParameterf(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameterf=_glSamplerParameterf;function _glSamplerParameterfv(sampler,pname,params){var param=HEAPF32[params>>2];GLctx.samplerParameterf(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameterfv=_glSamplerParameterfv;function _glSamplerParameteri(sampler,pname,param){GLctx.samplerParameteri(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameteri=_glSamplerParameteri;function _glSamplerParameteriv(sampler,pname,params){var param=HEAP32[params>>2];GLctx.samplerParameteri(GL.samplers[sampler],pname,param)}var _emscripten_glSamplerParameteriv=_glSamplerParameteriv;function _glScissor(x0,x1,x2,x3){GLctx.scissor(x0,x1,x2,x3)}var _emscripten_glScissor=_glScissor;function _glShaderBinary(count,shaders,binaryformat,binary,length){GL.recordError(1280)}var _emscripten_glShaderBinary=_glShaderBinary;function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}var _emscripten_glShaderSource=_glShaderSource;function _glStencilFunc(x0,x1,x2){GLctx.stencilFunc(x0,x1,x2)}var _emscripten_glStencilFunc=_glStencilFunc;function _glStencilFuncSeparate(x0,x1,x2,x3){GLctx.stencilFuncSeparate(x0,x1,x2,x3)}var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;function _glStencilMask(x0){GLctx.stencilMask(x0)}var _emscripten_glStencilMask=_glStencilMask;function _glStencilMaskSeparate(x0,x1){GLctx.stencilMaskSeparate(x0,x1)}var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;function _glStencilOp(x0,x1,x2){GLctx.stencilOp(x0,x1,x2)}var _emscripten_glStencilOp=_glStencilOp;function _glStencilOpSeparate(x0,x1,x2,x3){GLctx.stencilOpSeparate(x0,x1,x2,x3)}var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}var _emscripten_glTexImage2D=_glTexImage2D;function _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,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,null)}}var _emscripten_glTexImage3D=_glTexImage3D;function _glTexParameterf(x0,x1,x2){GLctx.texParameterf(x0,x1,x2)}var _emscripten_glTexParameterf=_glTexParameterf;function _glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}var _emscripten_glTexParameterfv=_glTexParameterfv;function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}var _emscripten_glTexParameteri=_glTexParameteri;function _glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}var _emscripten_glTexParameteriv=_glTexParameteriv;function _glTexStorage2D(x0,x1,x2,x3,x4){GLctx.texStorage2D(x0,x1,x2,x3,x4)}var _emscripten_glTexStorage2D=_glTexStorage2D;function _glTexStorage3D(x0,x1,x2,x3,x4,x5){GLctx.texStorage3D(x0,x1,x2,x3,x4,x5)}var _emscripten_glTexStorage3D=_glTexStorage3D;function _glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,null)}return}var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}var _emscripten_glTexSubImage2D=_glTexSubImage2D;function _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,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,null)}}var _emscripten_glTexSubImage3D=_glTexSubImage3D;function _glTransformFeedbackVaryings(program,count,varyings,bufferMode){program=GL.programs[program];var vars=[];for(var i=0;i>2]));GLctx.transformFeedbackVaryings(program,vars,bufferMode)}var _emscripten_glTransformFeedbackVaryings=_glTransformFeedbackVaryings;function _glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}var _emscripten_glUniform1f=_glUniform1f;function _glUniform1fv(location,count,value){count&&GLctx.uniform1fv(webglGetUniformLocation(location),HEAPF32,value>>2,count)}var _emscripten_glUniform1fv=_glUniform1fv;function _glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}var _emscripten_glUniform1i=_glUniform1i;function _glUniform1iv(location,count,value){count&&GLctx.uniform1iv(webglGetUniformLocation(location),HEAP32,value>>2,count)}var _emscripten_glUniform1iv=_glUniform1iv;function _glUniform1ui(location,v0){GLctx.uniform1ui(webglGetUniformLocation(location),v0)}var _emscripten_glUniform1ui=_glUniform1ui;function _glUniform1uiv(location,count,value){count&&GLctx.uniform1uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count)}var _emscripten_glUniform1uiv=_glUniform1uiv;function _glUniform2f(location,v0,v1){GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)}var _emscripten_glUniform2f=_glUniform2f;function _glUniform2fv(location,count,value){count&&GLctx.uniform2fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*2)}var _emscripten_glUniform2fv=_glUniform2fv;function _glUniform2i(location,v0,v1){GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)}var _emscripten_glUniform2i=_glUniform2i;function _glUniform2iv(location,count,value){count&&GLctx.uniform2iv(webglGetUniformLocation(location),HEAP32,value>>2,count*2)}var _emscripten_glUniform2iv=_glUniform2iv;function _glUniform2ui(location,v0,v1){GLctx.uniform2ui(webglGetUniformLocation(location),v0,v1)}var _emscripten_glUniform2ui=_glUniform2ui;function _glUniform2uiv(location,count,value){count&&GLctx.uniform2uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*2)}var _emscripten_glUniform2uiv=_glUniform2uiv;function _glUniform3f(location,v0,v1,v2){GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)}var _emscripten_glUniform3f=_glUniform3f;function _glUniform3fv(location,count,value){count&&GLctx.uniform3fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*3)}var _emscripten_glUniform3fv=_glUniform3fv;function _glUniform3i(location,v0,v1,v2){GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)}var _emscripten_glUniform3i=_glUniform3i;function _glUniform3iv(location,count,value){count&&GLctx.uniform3iv(webglGetUniformLocation(location),HEAP32,value>>2,count*3)}var _emscripten_glUniform3iv=_glUniform3iv;function _glUniform3ui(location,v0,v1,v2){GLctx.uniform3ui(webglGetUniformLocation(location),v0,v1,v2)}var _emscripten_glUniform3ui=_glUniform3ui;function _glUniform3uiv(location,count,value){count&&GLctx.uniform3uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*3)}var _emscripten_glUniform3uiv=_glUniform3uiv;function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)}var _emscripten_glUniform4f=_glUniform4f;function _glUniform4fv(location,count,value){count&&GLctx.uniform4fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*4)}var _emscripten_glUniform4fv=_glUniform4fv;function _glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)}var _emscripten_glUniform4i=_glUniform4i;function _glUniform4iv(location,count,value){count&&GLctx.uniform4iv(webglGetUniformLocation(location),HEAP32,value>>2,count*4)}var _emscripten_glUniform4iv=_glUniform4iv;function _glUniform4ui(location,v0,v1,v2,v3){GLctx.uniform4ui(webglGetUniformLocation(location),v0,v1,v2,v3)}var _emscripten_glUniform4ui=_glUniform4ui;function _glUniform4uiv(location,count,value){count&&GLctx.uniform4uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*4)}var _emscripten_glUniform4uiv=_glUniform4uiv;function _glUniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding){program=GL.programs[program];GLctx.uniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding)}var _emscripten_glUniformBlockBinding=_glUniformBlockBinding;function _glUniformMatrix2fv(location,count,transpose,value){count&&GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*4)}var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;function _glUniformMatrix2x3fv(location,count,transpose,value){count&&GLctx.uniformMatrix2x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)}var _emscripten_glUniformMatrix2x3fv=_glUniformMatrix2x3fv;function _glUniformMatrix2x4fv(location,count,transpose,value){count&&GLctx.uniformMatrix2x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)}var _emscripten_glUniformMatrix2x4fv=_glUniformMatrix2x4fv;function _glUniformMatrix3fv(location,count,transpose,value){count&&GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*9)}var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;function _glUniformMatrix3x2fv(location,count,transpose,value){count&&GLctx.uniformMatrix3x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)}var _emscripten_glUniformMatrix3x2fv=_glUniformMatrix3x2fv;function _glUniformMatrix3x4fv(location,count,transpose,value){count&&GLctx.uniformMatrix3x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)}var _emscripten_glUniformMatrix3x4fv=_glUniformMatrix3x4fv;function _glUniformMatrix4fv(location,count,transpose,value){count&&GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*16)}var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;function _glUniformMatrix4x2fv(location,count,transpose,value){count&&GLctx.uniformMatrix4x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)}var _emscripten_glUniformMatrix4x2fv=_glUniformMatrix4x2fv;function _glUniformMatrix4x3fv(location,count,transpose,value){count&&GLctx.uniformMatrix4x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)}var _emscripten_glUniformMatrix4x3fv=_glUniformMatrix4x3fv;function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}var _emscripten_glUseProgram=_glUseProgram;function _glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}var _emscripten_glValidateProgram=_glValidateProgram;function _glVertexAttrib1f(x0,x1){GLctx.vertexAttrib1f(x0,x1)}var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;function _glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;function _glVertexAttrib2f(x0,x1,x2){GLctx.vertexAttrib2f(x0,x1,x2)}var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;function _glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;function _glVertexAttrib3f(x0,x1,x2,x3){GLctx.vertexAttrib3f(x0,x1,x2,x3)}var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;function _glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx.vertexAttrib4f(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;function _glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;function _glVertexAttribDivisor(index,divisor){GLctx.vertexAttribDivisor(index,divisor)}var _emscripten_glVertexAttribDivisor=_glVertexAttribDivisor;var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;var _glVertexAttribDivisorARB=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorARB=_glVertexAttribDivisorARB;var _glVertexAttribDivisorEXT=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorEXT=_glVertexAttribDivisorEXT;var _glVertexAttribDivisorNV=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorNV=_glVertexAttribDivisorNV;function _glVertexAttribI4i(x0,x1,x2,x3,x4){GLctx.vertexAttribI4i(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttribI4i=_glVertexAttribI4i;function _glVertexAttribI4iv(index,v){GLctx.vertexAttribI4i(index,HEAP32[v>>2],HEAP32[v+4>>2],HEAP32[v+8>>2],HEAP32[v+12>>2])}var _emscripten_glVertexAttribI4iv=_glVertexAttribI4iv;function _glVertexAttribI4ui(x0,x1,x2,x3,x4){GLctx.vertexAttribI4ui(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttribI4ui=_glVertexAttribI4ui;function _glVertexAttribI4uiv(index,v){GLctx.vertexAttribI4ui(index,HEAPU32[v>>2],HEAPU32[v+4>>2],HEAPU32[v+8>>2],HEAPU32[v+12>>2])}var _emscripten_glVertexAttribI4uiv=_glVertexAttribI4uiv;function _glVertexAttribIPointer(index,size,type,stride,ptr){GLctx.vertexAttribIPointer(index,size,type,stride,ptr)}var _emscripten_glVertexAttribIPointer=_glVertexAttribIPointer;function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}var _emscripten_glViewport=_glViewport;function _glWaitSync(sync,flags,timeout_low,timeout_high){var timeout=convertI32PairToI53(timeout_low,timeout_high);GLctx.waitSync(GL.syncs[sync],flags,timeout)}var _emscripten_glWaitSync=_glWaitSync;function _emscripten_has_asyncify(){return 0}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function doRequestFullscreen(target,strategy){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)}function _emscripten_request_fullscreen_strategy(target,deferUntilInEventHandler,fullscreenStrategy){var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;try{wasmMemory.grow(size-b.byteLength+65535>>>16);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function registerBeforeUnloadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString){var beforeUnloadEventHandlerFunc=function(e=event){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:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _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")}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(e=event){var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function _emscripten_set_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(e=event){var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(e=event){var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(e=event){fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mouseenter_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread)}function _emscripten_set_mouseleave_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}function fillPointerlockChangeEventData(eventStruct){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=function(e=event){var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_pointerlockchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)}function registerUiEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=function(e=event){if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=e.detail;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset;HEAP32[uiEvent+32>>2]=pageYOffset;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_resize_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}function fillVisibilityChangeEventData(eventStruct){var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[eventStruct>>2]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState}function registerVisibilityChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=function(e=event){var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _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)}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(e=event){var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}function _emscripten_sleep(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/olcCodeJam2023Entry/pge.wasm b/olcCodeJam2023Entry/pge.wasm index 13fab02f3f8608000531533d82a131541a61786f..20218a30ffd85fe81e15c8c47a009ee97bc5b9b8 100644 GIT binary patch delta 117777 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 delta 113376 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